summaryrefslogtreecommitdiff
path: root/config.h
diff options
context:
space:
mode:
Diffstat (limited to 'config.h')
-rw-r--r--config.h190
1 files changed, 168 insertions, 22 deletions
diff --git a/config.h b/config.h
index 4e096102..62492c3e 100644
--- a/config.h
+++ b/config.h
@@ -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