diff options
Diffstat (limited to 'config.h')
-rw-r--r-- | config.h | 190 |
1 files changed, 168 insertions, 22 deletions
@@ -11,7 +11,7 @@ * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. */ -/* Boehm, May 19, 1994 2:11 pm PDT */ +/* Boehm, October 3, 1995 6:39 pm PDT */ #ifndef CONFIG_H @@ -33,6 +33,11 @@ # define HP # define mach_type_known # endif +# if defined(__NetBSD__) && defined(m68k) +# define M68K +# define NETBSD +# define mach_type_known +# endif # if defined(vax) # define VAX # ifdef ultrix @@ -42,12 +47,12 @@ # endif # define mach_type_known # endif -# if defined(mips) +# if defined(mips) || defined(__mips) # define MIPS -# ifdef ultrix +# if defined(ultrix) || defined(__ultrix) # define ULTRIX # else -# ifdef _SYSTYPE_SVR4 +# if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) || defined(__SYSTYPE_SVR4__) # define IRIX5 # else # define RISCOS /* or IRIX 4.X */ @@ -65,7 +70,7 @@ # define SUNOS5 # define mach_type_known # endif -# if defined(__OS2__) && defined(__32BIT__) +# if (defined(__OS2__) || defined(__EMX__)) && defined(__32BIT__) # define I386 # define OS2 # define mach_type_known @@ -74,7 +79,7 @@ # define RT # define mach_type_known # endif -# if defined(sun) && defined(sparc) +# if defined(sun) && (defined(sparc) || defined(__sparc)) # define SPARC /* Test for SunOS 5.x */ # include <errno.h> @@ -85,15 +90,20 @@ # endif # define mach_type_known # endif +# if defined(sparc) && defined(unix) && !defined(sun) +# define SPARC +# define DRSNX +# define mach_type_known +# endif # if defined(_IBMR2) # define RS6000 # define mach_type_known # endif -# if defined(SCO) +# if defined(_M_XENIX) && defined(_M_SYSV) && defined(_M_I386) + /* The above test may need refinement */ # define I386 # define SCO # define mach_type_known -/* --> incompletely implemented */ # endif # if defined(_AUX_SOURCE) # define M68K @@ -114,8 +124,18 @@ # define mach_type_known # endif # if defined(_AMIGA) +# define M68K # define AMIGA +# define mach_type_known +# endif +# if defined(THINK_C) || defined(__MWERKS__) && !defined(__powerc) # define M68K +# define MACOS +# define mach_type_known +# endif +# if defined(__MWERKS__) && defined(__powerc) +# define POWERPC +# define MACOS # define mach_type_known # endif # if defined(NeXT) && defined(mc68000) @@ -123,6 +143,11 @@ # define NEXT # define mach_type_known # endif +# if defined(NeXT) && defined(i386) +# define I386 +# define NEXT +# define mach_type_known +# endif # if defined(__FreeBSD__) && defined(i386) # define I386 # define FREEBSD @@ -148,11 +173,26 @@ # define CX_UX # define mach_type_known # endif +# if defined(DGUX) +# define M88K + /* DGUX defined */ +# define mach_type_known +# endif # if defined(_MSDOS) && (_M_IX86 == 300) || (_M_IX86 == 400) # define I386 # define MSWIN32 /* or Win32s */ # define mach_type_known # endif +# if defined(GO32) +# define I386 +# define DJGPP /* MSDOS running the DJGPP port of GCC */ +# define mach_type_known +# endif +# if defined(__BORLANDC__) +# define I386 +# define MSWIN32 +# define mach_type_known +# endif /* Feel free to add more clauses here */ @@ -168,25 +208,26 @@ # endif /* Mapping is: M68K ==> Motorola 680X0 */ /* (SUNOS4,HP,NEXT, and SYSV (A/UX), */ - /* and AMIGA variants) */ + /* MACOS and AMIGA variants) */ /* I386 ==> Intel 386 */ /* (SEQUENT, OS2, SCO, LINUX, NETBSD, */ /* FREEBSD, THREE86BSD, MSWIN32, */ - /* BSDI, SUNOS5 variants) */ + /* BSDI, SUNOS5, NEXT variants) */ /* NS32K ==> Encore Multimax */ /* MIPS ==> R2000 or R3000 */ /* (RISCOS, ULTRIX variants) */ /* VAX ==> DEC VAX */ /* (BSD, ULTRIX variants) */ - /* RS6000 ==> IBM RS/6000 AIX3.1 */ + /* RS6000 ==> IBM RS/6000 AIX3.X */ /* RT ==> IBM PC/RT */ /* HP_PA ==> HP9000/700 & /800 */ /* HP/UX */ /* SPARC ==> SPARC under SunOS */ - /* (SUNOS4, SUNOS5 variants) */ + /* (SUNOS4, SUNOS5, */ + /* DRSNX variants) */ /* ALPHA ==> DEC Alpha OSF/1 */ /* M88K ==> Motorola 88XX0 */ - /* (CX/UX so far) */ + /* (CX_UX and DGUX) */ /* @@ -222,7 +263,7 @@ * If either of the last two macros are defined, then STACKBOTTOM is computed * during collector startup using one of the following two heuristics: * HEURISTIC1: Take an address inside GC_init's frame, and round it up to - * the next multiple of 16 MB. + * the next multiple of STACK_GRAN. * HEURISTIC2: Take an address inside GC_init's frame, increment it repeatedly * in small steps (decrement if STACK_GROWS_UP), and read the value * at each location. Remember the value when the first @@ -270,9 +311,16 @@ */ +# define STACK_GRAN 0x1000000 # ifdef M68K # define MACH_TYPE "M68K" # define ALIGNMENT 2 +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 + extern char etext; +# define DATASTART ((ptr_t)(&etext)) +# endif # ifdef SUNOS4 # define OS_TYPE "SUNOS4" extern char etext; @@ -310,11 +358,36 @@ # define OS_TYPE "AMIGA" /* STACKBOTTOM and DATASTART handled specially */ /* in os_dep.c */ +# define DATAEND /* not needed */ +# endif +# ifdef MACOS +# ifndef __LOWMEM__ +# include <LowMem.h> +# endif +# define OS_TYPE "MACOS" + /* see os_dep.c for details of global data segments. */ +# define STACKBOTTOM ((ptr_t) LMGetCurStackBase()) +# define DATAEND /* not needed */ # endif # ifdef NEXT # define OS_TYPE "NEXT" # define DATASTART ((ptr_t) get_etext()) # define STACKBOTTOM ((ptr_t) 0x4000000) +# define DATAEND /* not needed */ +# endif +# endif + +# ifdef POWERPC +# define MACH_TYPE "POWERPC" +# define ALIGNMENT 2 +# ifdef MACOS +# ifndef __LOWMEM__ +# include <LowMem.h> +# endif +# define OS_TYPE "MACOS" + /* see os_dep.c for details of global data segments. */ +# define STACKBOTTOM ((ptr_t) LMGetCurStackBase()) +# define DATAEND /* not needed */ # endif # endif @@ -347,8 +420,13 @@ extern int etext; # ifdef SUNOS5 # define OS_TYPE "SUNOS5" -# define DATASTART ((ptr_t)((((word) (&etext)) + 0x10003) & ~0x3)) + extern int _etext; + extern int _end; + extern char * GC_SysVGetDataStart(); +# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) +# define DATAEND (&_end) # define PROC_VDB +# define HEURISTIC1 # endif # ifdef SUNOS4 # define OS_TYPE "SUNOS4" @@ -363,16 +441,28 @@ /* was done by Robert Ehrlich, Manuel Serrano, and Bernard */ /* Serpette of INRIA. */ /* This assumes ZMAGIC, i.e. demand-loadable executables. */ -# define DATASTART ((ptr_t)(*(int *)0x2004+0x2000)) +# define TEXTSTART 0x2000 +# define DATASTART ((ptr_t)(*(int *)(TEXTSTART+0x4)+TEXTSTART)) +# define MPROTECT_VDB +# define HEURISTIC1 +# endif +# ifdef DRSNX +# define CPP_WORDSZ 32 +# define OS_TYPE "DRSNX" + extern char * GC_SysVGetDataStart(); + extern int etext; +# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &etext) # define MPROTECT_VDB +# define STACKBOTTOM ((ptr_t) 0xdfff0000) # endif -# define HEURISTIC1 # define DYNAMIC_LOADING # endif # ifdef I386 # define MACH_TYPE "I386" -# define ALIGNMENT 4 /* Appears to hold for all "32 bit" compilers */ +# define ALIGNMENT 4 /* Appears to hold for all "32 bit" compilers */ + /* except Borland. The -a4 option fixes */ + /* Borland. */ # ifdef SEQUENT # define OS_TYPE "SEQUENT" extern int etext; @@ -381,14 +471,15 @@ # endif # ifdef SUNOS5 # define OS_TYPE "SUNOS5" - extern int etext; -# define DATASTART ((ptr_t)((((word) (&etext)) + 0x1003) & ~0x3)) - extern int _start(); + extern int etext, _start; + extern char * GC_SysVGetDataStart(); +# define DATASTART GC_SysVGetDataStart(0x1000, &etext) # define STACKBOTTOM ((ptr_t)(&_start)) # define PROC_VDB # endif # ifdef SCO # define OS_TYPE "SCO" + extern int etext; # define DATASTART ((ptr_t)((((word) (&etext)) + 0x3fffff) \ & ~0x3fffff) \ +((word)&etext & 0xfff)) @@ -399,17 +490,27 @@ extern int etext; # define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define STACKBOTTOM ((ptr_t)0xc0000000) +# define MPROTECT_VDB # endif # ifdef OS2 # define OS_TYPE "OS2" /* STACKBOTTOM and DATASTART are handled specially in */ /* os_dep.c. OS2 actually has the right */ /* system call! */ +# define DATAEND /* not needed */ # endif # ifdef MSWIN32 # define OS_TYPE "MSWIN32" /* STACKBOTTOM and DATASTART are handled specially in */ /* os_dep.c. */ +# define MPROTECT_VDB +# define DATAEND /* not needed */ +# endif +# ifdef DJGPP +# define OS_TYPE "DJGPP" + extern int etext; +# define DATASTART ((ptr_t)(&etext)) +# define STACKBOTTOM ((ptr_t)0x00080000) # endif # ifdef FREEBSD # define OS_TYPE "FREEBSD" @@ -430,6 +531,12 @@ extern char etext; # define DATASTART ((ptr_t)(&etext)) # endif +# ifdef NEXT +# define OS_TYPE "NEXT" +# define DATASTART ((ptr_t) get_etext()) +# define STACKBOTTOM ((ptr_t)0xc0000000) +# define DATAEND /* not needed */ +# endif # endif # ifdef NS32K @@ -460,6 +567,11 @@ # ifdef IRIX5 # define OS_TYPE "IRIX5" # define MPROTECT_VDB + /* The above is dubious. Mprotect and signals do work, */ + /* and dirty bits are implemented under IRIX5. But, */ + /* at least under IRIX5.2, mprotect seems to be so */ + /* slow relative to the hardware that incremental */ + /* collection is likely to be rarely useful. */ # define DYNAMIC_LOADING # endif # endif @@ -485,14 +597,26 @@ # define ALIGNMENT 8 # define DATASTART ((ptr_t) 0x140000000) # define HEURISTIC2 + /* Normally HEURISTIC2 is too conervative, since */ + /* the text segment immediately follows the stack. */ + /* Hence we give an upper pound. */ + extern __start; +# define HEURISTIC2_LIMIT ((ptr_t)((word)(&__start) & ~(getpagesize()-1))) # define CPP_WORDSZ 64 # define MPROTECT_VDB +# define DYNAMIC_LOADING # endif # ifdef M88K # define MACH_TYPE "M88K" # define ALIGNMENT 4 -# define DATASTART ((((word)&etext + 0x3fffff) & ~0x3fffff) + 0x10000) +# ifdef CX_UX +# define DATASTART ((((word)&etext + 0x3fffff) & ~0x3fffff) + 0x10000) +# endif +# ifdef DGUX + extern char * GC_SysVGetDataStart(); +# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &etext) +# endif # define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */ # endif @@ -508,6 +632,24 @@ # define OS_TYPE "" # endif +# ifndef DATAEND + extern int end; +# define DATAEND (&end) +# endif + +# if defined(SUNOS5) || defined(DRSNX) + /* OS has SVR4 generic features. Probably others also qualify. */ +# define SVR4 +# endif + +# if defined(SUNOS5) || defined(DRSNX) + /* OS has SUNOS5 style semi-undocumented interface to dynamic */ + /* loader. */ +# define SUNOS5DL + /* OS has SUNOS5 style signal handlers. */ +# define SUNOS5SIGS +# endif + # if CPP_WORDSZ != 32 && CPP_WORDSZ != 64 -> bad word size # endif @@ -538,4 +680,8 @@ # define DEFAULT_VDB # endif +# if defined(SPARC) +# define SAVE_CALL_CHAIN +# endif + # endif |