$NetBSD: patch-ae,v 1.18 2016/11/10 09:26:21 maya Exp $ --- libguile/gc_os_dep.c.orig 2010-12-13 17:25:01.000000000 +0000 +++ libguile/gc_os_dep.c @@ -132,7 +132,7 @@ typedef int GC_bool; # define NETBSD # define mach_type_known # endif -# if defined(__NetBSD__) && defined(__sparc__) +# if defined(__NetBSD__) && (defined(__sparc__) || defined(__sparc_v9__)) # define SPARC # define NETBSD # define mach_type_known @@ -304,6 +304,11 @@ typedef int GC_bool; # define NETBSD # define mach_type_known # endif +# if defined(__NetBSD__) && defined(__x86_64__) +# define X86_64 +# define NETBSD +# define mach_type_known +# endif # if defined(bsdi) && defined(i386) # define I386 # define BSDI @@ -444,12 +449,12 @@ scm_get_stack_base () /* * For each architecture and OS, the following need to be defined: * - * CPP_WORD_SZ is a simple integer constant representing the word size. + * CPP_WORDSZ is a simple integer constant representing the word size. * in bits. We assume byte addressibility, where a byte has 8 bits. - * We also assume CPP_WORD_SZ is either 32 or 64. + * We also assume CPP_WORDSZ is either 32 or 64. * (We care about the length of pointers, not hardware * bus widths. Thus a 64 bit processor with a C compiler that uses - * 32 bit pointers should use CPP_WORD_SZ of 32, not 64. Default is 32.) + * 32 bit pointers should use CPP_WORDSZ of 32, not 64. Default is 32.) * * MACH_TYPE is a string representation of the machine type. * OS_TYPE is analogous for the OS. @@ -716,8 +721,6 @@ scm_get_stack_base () /* base is a property of the executable, so this should not break */ /* old executables. */ /* HEURISTIC2 probably works, but this appears to be preferable. */ -# include -# define STACKBOTTOM ((ptr_t) USRSTACK) # ifndef USE_MMAP # define USE_MMAP # endif @@ -727,10 +730,18 @@ scm_get_stack_base () # define HEAP_START DATAEND # endif # define PROC_VDB -/* HEURISTIC1 reportedly no longer works under 2.7. Thus we */ -/* switched to HEURISTIC2, eventhough it creates some debugging */ -/* issues. */ -# define HEURISTIC2 +/* HEURISTIC1 reportedly no longer works under 2.7. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +/* Apparently USRSTACK is defined to be USERLIMIT, but in some */ +/* installations that's undefined. We work around this with a */ +/* gross hack: */ +# include +# ifdef USERLIMIT + /* This should work everywhere, but doesn't. */ +# define STACKBOTTOM USRSTACK +# else +# define HEURISTIC2 +# endif # include # define GETPAGESIZE() sysconf(_SC_PAGESIZE) /* getpagesize() appeared to be missing from at least one */ @@ -1008,6 +1019,21 @@ scm_get_stack_base () # endif # endif +# ifdef X86_64 +# define MACH_TYPE "X86_64" +# define ALIGNMENT 8 +# define ALIGN_DOUBLE +# define CPP_WORDSZ 64 +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# endif +# if defined(NETBSD) +# define HEURISTIC2 + extern char etext; +# define DATASTART ((ptr_t)(&etext)) +# endif +# endif + # ifdef NS32K # define MACH_TYPE "NS32K" # define ALIGNMENT 4