Commit ed47971a by Loren J. Rittle Committed by Loren J. Rittle

gcconfig.h: Change all likely references to linker script synthesized symbols to use this...

	* include/private/gcconfig.h: Change all likely references
	to linker script synthesized symbols to use this idiom:
	extern int etext[]; etext

From-SVN: r51352
parent b7d5968d
2002-03-25 Loren J. Rittle <ljrittle@acm.org>
* include/private/gcconfig.h: Change all likely references
to linker script synthesized symbols to use this idiom:
extern int etext[]; etext
2002-03-25 Jeff Sturm <jsturm@one-point.com> 2002-03-25 Jeff Sturm <jsturm@one-point.com>
* linux_threads.c (GC_get_nprocs): Close file descriptor. * linux_threads.c (GC_get_nprocs): Close file descriptor.
......
...@@ -450,7 +450,9 @@ ...@@ -450,7 +450,9 @@
* On UNIX systems, the collector will scan the area between DATASTART * On UNIX systems, the collector will scan the area between DATASTART
* and DATAEND for root pointers. * and DATAEND for root pointers.
* *
* DATAEND, if not &end. * DATAEND, if not `end' where `end' is defined as ``extern int end[];''.
* RTH suggests gaining access to linker script synth'd values with
* this idiom instead of `&end' where `end' is defined as ``extern int end;'' .
* *
* ALIGN_DOUBLE of GC_malloc should return blocks aligned to twice * ALIGN_DOUBLE of GC_malloc should return blocks aligned to twice
* the pointer size. * the pointer size.
...@@ -546,14 +548,14 @@ ...@@ -546,14 +548,14 @@
# ifdef OPENBSD # ifdef OPENBSD
# define OS_TYPE "OPENBSD" # define OS_TYPE "OPENBSD"
# define HEURISTIC2 # define HEURISTIC2
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# ifdef NETBSD # ifdef NETBSD
# define OS_TYPE "NETBSD" # define OS_TYPE "NETBSD"
# define HEURISTIC2 # define HEURISTIC2
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# ifdef LINUX # ifdef LINUX
# define OS_TYPE "LINUX" # define OS_TYPE "LINUX"
...@@ -576,24 +578,24 @@ ...@@ -576,24 +578,24 @@
/* contain large read-only data tables */ /* contain large read-only data tables */
/* that we'd rather not scan. */ /* that we'd rather not scan. */
# endif /* !GLIBC2 */ # endif /* !GLIBC2 */
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# else # else
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# endif # endif
# endif # endif
# ifdef SUNOS4 # ifdef SUNOS4
# define OS_TYPE "SUNOS4" # define OS_TYPE "SUNOS4"
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0x1ffff) & ~0x1ffff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0x1ffff) & ~0x1ffff))
# define HEURISTIC1 /* differs */ # define HEURISTIC1 /* differs */
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# endif # endif
# ifdef HP # ifdef HP
# define OS_TYPE "HP" # define OS_TYPE "HP"
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# define STACKBOTTOM ((ptr_t) 0xffeffffc) # define STACKBOTTOM ((ptr_t) 0xffeffffc)
/* empirically determined. seems to work. */ /* empirically determined. seems to work. */
# include <unistd.h> # include <unistd.h>
...@@ -601,13 +603,13 @@ ...@@ -601,13 +603,13 @@
# endif # endif
# ifdef SYSV # ifdef SYSV
# define OS_TYPE "SYSV" # define OS_TYPE "SYSV"
extern etext; extern etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0x3fffff) \ # define DATASTART ((ptr_t)((((word) (etext)) + 0x3fffff) \
& ~0x3fffff) \ & ~0x3fffff) \
+((word)&etext & 0x1fff)) +((word)etext & 0x1fff))
/* This only works for shared-text binaries with magic number 0413. /* This only works for shared-text binaries with magic number 0413.
The other sorts of SysV binaries put the data at the end of the text, The other sorts of SysV binaries put the data at the end of the text,
in which case the default of &etext would work. Unfortunately, in which case the default of etext would work. Unfortunately,
handling both would require having the magic-number available. handling both would require having the magic-number available.
-- Parag -- Parag
*/ */
...@@ -667,8 +669,8 @@ ...@@ -667,8 +669,8 @@
# define STACK_GRAN 0x10000000 # define STACK_GRAN 0x10000000
/* Stack usually starts at 0x80000000 */ /* Stack usually starts at 0x80000000 */
# define LINUX_DATA_START # define LINUX_DATA_START
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# endif # endif
# ifdef MACOSX # ifdef MACOSX
/* There are reasons to suspect this may not be reliable. */ /* There are reasons to suspect this may not be reliable. */
...@@ -685,16 +687,16 @@ ...@@ -685,16 +687,16 @@
# define ALIGNMENT 4 # define ALIGNMENT 4
# define OS_TYPE "NETBSD" # define OS_TYPE "NETBSD"
# define HEURISTIC2 # define HEURISTIC2
extern char etext; extern char etext[];
# define DATASTART GC_data_start # define DATASTART GC_data_start
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# endif # endif
# ifdef NOSYS # ifdef NOSYS
# define ALIGNMENT 4 # define ALIGNMENT 4
# define OS_TYPE "NOSYS" # define OS_TYPE "NOSYS"
extern void __end, __dso_handle; extern void __end[], __dso_handle[];
# define DATASTART (&__dso_handle) /* OK, that's ugly. */ # define DATASTART (__dso_handle) /* OK, that's ugly. */
# define DATAEND (&__end) # define DATAEND (__end)
/* Stack starts at 0xE0000000 for the simulator. */ /* Stack starts at 0xE0000000 for the simulator. */
# undef STACK_GRAN # undef STACK_GRAN
# define STACK_GRAN 0x10000000 # define STACK_GRAN 0x10000000
...@@ -705,8 +707,8 @@ ...@@ -705,8 +707,8 @@
# ifdef VAX # ifdef VAX
# define MACH_TYPE "VAX" # define MACH_TYPE "VAX"
# define ALIGNMENT 4 /* Pointers are longword aligned by 4.2 C compiler */ # define ALIGNMENT 4 /* Pointers are longword aligned by 4.2 C compiler */
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# ifdef BSD # ifdef BSD
# define OS_TYPE "BSD" # define OS_TYPE "BSD"
# define HEURISTIC1 # define HEURISTIC1
...@@ -738,11 +740,11 @@ ...@@ -738,11 +740,11 @@
# define ALIGN_DOUBLE # define ALIGN_DOUBLE
# ifdef SUNOS5 # ifdef SUNOS5
# define OS_TYPE "SUNOS5" # define OS_TYPE "SUNOS5"
extern int _etext; extern int _etext[];
extern int _end; extern int _end[];
extern char * GC_SysVGetDataStart(); extern char * GC_SysVGetDataStart();
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext)
# define DATAEND (&_end) # define DATAEND (_end)
# if !defined(USE_MMAP) && defined(REDIRECT_MALLOC) # if !defined(USE_MMAP) && defined(REDIRECT_MALLOC)
# define USE_MMAP # define USE_MMAP
/* Otherwise we now use calloc. Mmap may result in the */ /* Otherwise we now use calloc. Mmap may result in the */
...@@ -780,9 +782,9 @@ ...@@ -780,9 +782,9 @@
# define OS_TYPE "SUNOS4" # define OS_TYPE "SUNOS4"
/* [If you have a weak stomach, don't read this.] */ /* [If you have a weak stomach, don't read this.] */
/* We would like to use: */ /* We would like to use: */
/* # define DATASTART ((ptr_t)((((word) (&etext)) + 0x1fff) & ~0x1fff)) */ /* # define DATASTART ((ptr_t)((((word) (etext)) + 0x1fff) & ~0x1fff)) */
/* This fails occasionally, due to an ancient, but very */ /* This fails occasionally, due to an ancient, but very */
/* persistent ld bug. &etext is set 32 bytes too high. */ /* persistent ld bug. etext is set 32 bytes too high. */
/* We instead read the text segment size from the a.out */ /* We instead read the text segment size from the a.out */
/* header, which happens to be mapped into our address space */ /* header, which happens to be mapped into our address space */
/* at the start of the text segment. The detective work here */ /* at the start of the text segment. The detective work here */
...@@ -798,8 +800,8 @@ ...@@ -798,8 +800,8 @@
# ifdef DRSNX # ifdef DRSNX
# define OS_TYPE "DRSNX" # define OS_TYPE "DRSNX"
extern char * GC_SysVGetDataStart(); extern char * GC_SysVGetDataStart();
extern int etext; extern int etext[];
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, etext)
# define MPROTECT_VDB # define MPROTECT_VDB
# define STACKBOTTOM ((ptr_t) 0xdfff0000) # define STACKBOTTOM ((ptr_t) 0xdfff0000)
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
...@@ -811,23 +813,23 @@ ...@@ -811,23 +813,23 @@
# else # else
Linux Sparc/a.out not supported Linux Sparc/a.out not supported
# endif # endif
extern int _end; extern int _end[];
extern int _etext; extern int _etext[];
# define DATAEND (&_end) # define DATAEND (_end)
# define SVR4 # define SVR4
# ifdef __arch64__ # ifdef __arch64__
# define STACKBOTTOM ((ptr_t) 0x80000000000ULL) # define STACKBOTTOM ((ptr_t) 0x80000000000ULL)
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, &_etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext)
# else # else
# define STACKBOTTOM ((ptr_t) 0xf0000000) # define STACKBOTTOM ((ptr_t) 0xf0000000)
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext)
# endif # endif
# endif # endif
# ifdef OPENBSD # ifdef OPENBSD
# define OS_TYPE "OPENBSD" # define OS_TYPE "OPENBSD"
# define STACKBOTTOM ((ptr_t) 0xf8000000) # define STACKBOTTOM ((ptr_t) 0xf8000000)
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# ifdef NETBSD # ifdef NETBSD
# define OS_TYPE "NETBSD" # define OS_TYPE "NETBSD"
...@@ -836,8 +838,8 @@ ...@@ -836,8 +838,8 @@
# define DATASTART GC_data_start # define DATASTART GC_data_start
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# else # else
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# endif # endif
# endif # endif
...@@ -857,24 +859,24 @@ ...@@ -857,24 +859,24 @@
# endif # endif
# ifdef SEQUENT # ifdef SEQUENT
# define OS_TYPE "SEQUENT" # define OS_TYPE "SEQUENT"
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# define STACKBOTTOM ((ptr_t) 0x3ffff000) # define STACKBOTTOM ((ptr_t) 0x3ffff000)
# endif # endif
# ifdef BEOS # ifdef BEOS
# define OS_TYPE "BEOS" # define OS_TYPE "BEOS"
# include <OS.h> # include <OS.h>
# define GETPAGESIZE() B_PAGE_SIZE # define GETPAGESIZE() B_PAGE_SIZE
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# endif # endif
# ifdef SUNOS5 # ifdef SUNOS5
# define OS_TYPE "SUNOS5" # define OS_TYPE "SUNOS5"
extern int _etext, _end; extern int _etext[], _end[];
extern char * GC_SysVGetDataStart(); extern char * GC_SysVGetDataStart();
# define DATASTART GC_SysVGetDataStart(0x1000, &_etext) # define DATASTART GC_SysVGetDataStart(0x1000, _etext)
# define DATAEND (&_end) # define DATAEND (_end)
/* # define STACKBOTTOM ((ptr_t)(&_start)) worked through 2.7, */ /* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */
/* but reportedly breaks under 2.8. It appears that the stack */ /* but reportedly breaks under 2.8. It appears that the stack */
/* base is a property of the executable, so this should not break */ /* base is a property of the executable, so this should not break */
/* old executables. */ /* old executables. */
...@@ -902,16 +904,16 @@ ...@@ -902,16 +904,16 @@
# endif # endif
# ifdef SCO # ifdef SCO
# define OS_TYPE "SCO" # define OS_TYPE "SCO"
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0x3fffff) \ # define DATASTART ((ptr_t)((((word) (etext)) + 0x3fffff) \
& ~0x3fffff) \ & ~0x3fffff) \
+((word)&etext & 0xfff)) +((word)etext & 0xfff))
# define STACKBOTTOM ((ptr_t) 0x7ffffffc) # define STACKBOTTOM ((ptr_t) 0x7ffffffc)
# endif # endif
# ifdef SCO_ELF # ifdef SCO_ELF
# define OS_TYPE "SCO_ELF" # define OS_TYPE "SCO_ELF"
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# define STACKBOTTOM ((ptr_t) 0x08048000) # define STACKBOTTOM ((ptr_t) 0x08048000)
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# define ELF_CLASS ELFCLASS32 # define ELF_CLASS ELFCLASS32
...@@ -942,8 +944,8 @@ ...@@ -942,8 +944,8 @@
# ifdef __ELF__ # ifdef __ELF__
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# ifdef UNDEFINED /* includes ro data */ # ifdef UNDEFINED /* includes ro data */
extern int _etext; extern int _etext[];
# define DATASTART ((ptr_t)((((word) (&_etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff))
# endif # endif
# include <features.h> # include <features.h>
# if defined(__GLIBC__) && __GLIBC__ >= 2 # if defined(__GLIBC__) && __GLIBC__ >= 2
...@@ -960,11 +962,11 @@ ...@@ -960,11 +962,11 @@
/* contain large read-only data tables */ /* contain large read-only data tables */
/* that we'd rather not scan. */ /* that we'd rather not scan. */
# endif # endif
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# else # else
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# endif # endif
# ifdef USE_I686_PREFETCH # ifdef USE_I686_PREFETCH
# define PREFETCH(x) \ # define PREFETCH(x) \
...@@ -989,10 +991,10 @@ ...@@ -989,10 +991,10 @@
# endif # endif
# ifdef CYGWIN32 # ifdef CYGWIN32
# define OS_TYPE "CYGWIN32" # define OS_TYPE "CYGWIN32"
extern int _data_start__; extern int _data_start__[];
extern int _data_end__; extern int _data_end__[];
extern int _bss_start__; extern int _bss_start__[];
extern int _bss_end__; extern int _bss_end__[];
/* For binutils 2.9.1, we have */ /* For binutils 2.9.1, we have */
/* DATASTART = _data_start__ */ /* DATASTART = _data_start__ */
/* DATAEND = _bss_end__ */ /* DATAEND = _bss_end__ */
...@@ -1003,8 +1005,8 @@ ...@@ -1003,8 +1005,8 @@
/* minumum/maximum of the two. */ /* minumum/maximum of the two. */
# define MAX(x,y) ((x) > (y) ? (x) : (y)) # define MAX(x,y) ((x) > (y) ? (x) : (y))
# define MIN(x,y) ((x) < (y) ? (x) : (y)) # define MIN(x,y) ((x) < (y) ? (x) : (y))
# define DATASTART ((ptr_t) MIN(&_data_start__, &_bss_start__)) # define DATASTART ((ptr_t) MIN(_data_start__, _bss_start__))
# define DATAEND ((ptr_t) MAX(&_data_end__, &_bss_end__)) # define DATAEND ((ptr_t) MAX(_data_end__, _bss_end__))
# undef STACK_GRAN # undef STACK_GRAN
# define STACK_GRAN 0x10000 # define STACK_GRAN 0x10000
# define HEURISTIC1 # define HEURISTIC1
...@@ -1033,10 +1035,10 @@ ...@@ -1033,10 +1035,10 @@
# ifdef DJGPP # ifdef DJGPP
# define OS_TYPE "DJGPP" # define OS_TYPE "DJGPP"
# include "stubinfo.h" # include "stubinfo.h"
extern int etext; extern int etext[];
extern int _stklen; extern int _stklen;
extern int __djgpp_stack_limit; extern int __djgpp_stack_limit;
# define DATASTART ((ptr_t)((((word) (&etext)) + 0x1ff) & ~0x1ff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0x1ff) & ~0x1ff))
/* # define STACKBOTTOM ((ptr_t)((word) _stubinfo + _stubinfo->size \ /* # define STACKBOTTOM ((ptr_t)((word) _stubinfo + _stubinfo->size \
+ _stklen)) */ + _stklen)) */
# define STACKBOTTOM ((ptr_t)((word) __djgpp_stack_limit + _stklen)) # define STACKBOTTOM ((ptr_t)((word) __djgpp_stack_limit + _stklen))
...@@ -1056,8 +1058,8 @@ ...@@ -1056,8 +1058,8 @@
# ifdef __ELF__ # ifdef __ELF__
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# endif # endif
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# ifdef NETBSD # ifdef NETBSD
# define OS_TYPE "NETBSD" # define OS_TYPE "NETBSD"
...@@ -1071,8 +1073,8 @@ ...@@ -1071,8 +1073,8 @@
# if defined(OPENBSD) || defined(NETBSD) \ # if defined(OPENBSD) || defined(NETBSD) \
|| defined(THREE86BSD) || defined(BSDI) || defined(THREE86BSD) || defined(BSDI)
# define HEURISTIC2 # define HEURISTIC2
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# endif # endif
# ifdef NEXT # ifdef NEXT
# define OS_TYPE "NEXT" # define OS_TYPE "NEXT"
...@@ -1099,10 +1101,10 @@ ...@@ -1099,10 +1101,10 @@
# define OS_TYPE "HURD" # define OS_TYPE "HURD"
# define STACK_GROWS_DOWN # define STACK_GROWS_DOWN
# define HEURISTIC2 # define HEURISTIC2
extern int __data_start; extern int __data_start[];
# define DATASTART ( (ptr_t) (&__data_start)) # define DATASTART ( (ptr_t) (__data_start))
extern int _end; extern int _end[];
# define DATAEND ( (ptr_t) (&_end)) # define DATAEND ( (ptr_t) (_end))
/* # define MPROTECT_VDB Not quite working yet? */ /* # define MPROTECT_VDB Not quite working yet? */
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# endif # endif
...@@ -1126,8 +1128,8 @@ ...@@ -1126,8 +1128,8 @@
/* This was developed for a linuxce style platform. Probably */ /* This was developed for a linuxce style platform. Probably */
/* needs to be tweaked for workstation class machines. */ /* needs to be tweaked for workstation class machines. */
# define OS_TYPE "LINUX" # define OS_TYPE "LINUX"
extern int __data_start; extern int __data_start[];
# define DATASTART ((ptr_t)(&__data_start)) # define DATASTART ((ptr_t)(__data_start))
# define ALIGNMENT 4 # define ALIGNMENT 4
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
# define STACKBOTTOM ((ptr_t)0x7fff8000) # define STACKBOTTOM ((ptr_t)0x7fff8000)
...@@ -1145,15 +1147,15 @@ ...@@ -1145,15 +1147,15 @@
# define CPP_WORDSZ _MIPS_SZPTR # define CPP_WORDSZ _MIPS_SZPTR
# define ALIGNMENT (_MIPS_SZPTR/8) # define ALIGNMENT (_MIPS_SZPTR/8)
# else # else
extern int etext, edata, end; extern int etext[], edata[], end[];
extern int _DYNAMIC_LINKING, _gp; extern int _DYNAMIC_LINKING[], _gp[];
# define DATASTART ((ptr_t)((((word)&etext + 0x3ffff) & ~0x3ffff) \ # define DATASTART ((ptr_t)((((word)etext + 0x3ffff) & ~0x3ffff) \
+ ((word)&etext & 0xffff))) + ((word)etext & 0xffff)))
# define DATAEND (&edata) # define DATAEND (edata)
# define DATASTART2 (&_DYNAMIC_LINKING \ # define DATASTART2 (_DYNAMIC_LINKING \
? (ptr_t)(((word)&_gp + 0x8000 + 0x3ffff) & ~0x3ffff) \ ? (ptr_t)(((word)_gp + 0x8000 + 0x3ffff) & ~0x3ffff) \
: (ptr_t)&edata) : (ptr_t)edata)
# define DATAEND2 (&end) # define DATAEND2 (end)
# define ALIGNMENT 4 # define ALIGNMENT 4
# endif # endif
# define OS_TYPE "EWS4800" # define OS_TYPE "EWS4800"
...@@ -1175,8 +1177,8 @@ ...@@ -1175,8 +1177,8 @@
# endif # endif
# ifdef IRIX5 # ifdef IRIX5
# define HEURISTIC2 # define HEURISTIC2
extern int _fdata; extern int _fdata[];
# define DATASTART ((ptr_t)(&_fdata)) # define DATASTART ((ptr_t)(_fdata))
# ifdef USE_MMAP # ifdef USE_MMAP
# define HEAP_START (ptr_t)0x30000000 # define HEAP_START (ptr_t)0x30000000
# else # else
...@@ -1214,7 +1216,7 @@ ...@@ -1214,7 +1216,7 @@
# define HEURISTIC2 # define HEURISTIC2
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
# ifdef __ELF__ # ifdef __ELF__
extern int etext; extern int etext[];
# define DATASTART GC_data_start # define DATASTART GC_data_start
# define NEED_FIND_LIMIT # define NEED_FIND_LIMIT
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
...@@ -1234,9 +1236,9 @@ ...@@ -1234,9 +1236,9 @@
# define ALIGNMENT 4 # define ALIGNMENT 4
# define CPP_WORDSZ 32 # define CPP_WORDSZ 32
# endif # endif
extern int _data, _end; extern int _data[], _end[];
# define DATASTART ((ptr_t)((ulong)&_data)) # define DATASTART ((ptr_t)((ulong)_data))
# define DATAEND ((ptr_t)((ulong)&_end)) # define DATAEND ((ptr_t)((ulong)_end))
extern int errno; extern int errno;
# define STACKBOTTOM ((ptr_t)((ulong)&errno)) # define STACKBOTTOM ((ptr_t)((ulong)&errno))
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
...@@ -1270,8 +1272,8 @@ ...@@ -1270,8 +1272,8 @@
# define STACK_GROWS_UP # define STACK_GROWS_UP
# ifdef HPUX # ifdef HPUX
# define OS_TYPE "HPUX" # define OS_TYPE "HPUX"
extern int __data_start; extern int __data_start[];
# define DATASTART ((ptr_t)(&__data_start)) # define DATASTART ((ptr_t)(__data_start))
# if 0 # if 0
/* The following appears to work for 7xx systems running HP/UX */ /* The following appears to work for 7xx systems running HP/UX */
/* 9.xx Furthermore, it might result in much faster */ /* 9.xx Furthermore, it might result in much faster */
...@@ -1303,8 +1305,8 @@ ...@@ -1303,8 +1305,8 @@
# define LINUX_STACKBOTTOM # define LINUX_STACKBOTTOM
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# define LINUX_DATA_START # define LINUX_DATA_START
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# endif /* LINUX */ # endif /* LINUX */
# endif /* HP_PA */ # endif /* HP_PA */
...@@ -1344,21 +1346,21 @@ ...@@ -1344,21 +1346,21 @@
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# endif # endif
/* Handle unmapped hole alpha*-*-freebsd[45]* puts between etext and edata. */ /* Handle unmapped hole alpha*-*-freebsd[45]* puts between etext and edata. */
extern char etext; extern char etext[];
extern char edata; extern char edata[];
extern char end; extern char end[];
# define NEED_FIND_LIMIT # define NEED_FIND_LIMIT
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# define DATAEND (GC_find_limit (DATASTART, TRUE)) # define DATAEND (GC_find_limit (DATASTART, TRUE))
# define DATASTART2 ((ptr_t)(&edata)) # define DATASTART2 ((ptr_t)(edata))
# define DATAEND2 ((ptr_t)(&end)) # define DATAEND2 ((ptr_t)(end))
# define CPP_WORDSZ 64 # define CPP_WORDSZ 64
# endif # endif
# ifdef OSF1 # ifdef OSF1
# define OS_TYPE "OSF1" # define OS_TYPE "OSF1"
# define DATASTART ((ptr_t) 0x140000000) # define DATASTART ((ptr_t) 0x140000000)
extern int _end; extern int _end[];
# define DATAEND ((ptr_t) &_end) # define DATAEND ((ptr_t) _end)
extern char ** environ; extern char ** environ;
/* round up from the value of environ to the nearest page boundary */ /* round up from the value of environ to the nearest page boundary */
/* Probably breaks if putenv is called before collector */ /* Probably breaks if putenv is called before collector */
...@@ -1369,8 +1371,8 @@ ...@@ -1369,8 +1371,8 @@
/* the text segment immediately follows the stack. */ /* the text segment immediately follows the stack. */
/* Hence we give an upper pound. */ /* Hence we give an upper pound. */
/* This is currently unused, since we disabled HEURISTIC2 */ /* This is currently unused, since we disabled HEURISTIC2 */
extern int __start; extern int __start[];
# define HEURISTIC2_LIMIT ((ptr_t)((word)(&__start) & ~(getpagesize()-1))) # define HEURISTIC2_LIMIT ((ptr_t)((word)(__start) & ~(getpagesize()-1)))
# define CPP_WORDSZ 64 # define CPP_WORDSZ 64
# define MPROTECT_VDB # define MPROTECT_VDB
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
...@@ -1386,8 +1388,8 @@ ...@@ -1386,8 +1388,8 @@
# else # else
# define DATASTART ((ptr_t) 0x140000000) # define DATASTART ((ptr_t) 0x140000000)
# endif # endif
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# define MPROTECT_VDB # define MPROTECT_VDB
/* Has only been superficially tested. May not */ /* Has only been superficially tested. May not */
/* work on all versions. */ /* work on all versions. */
...@@ -1420,8 +1422,8 @@ ...@@ -1420,8 +1422,8 @@
# define ALIGNMENT 8 # define ALIGNMENT 8
# endif # endif
# define OS_TYPE "HPUX" # define OS_TYPE "HPUX"
extern int __data_start; extern int __data_start[];
# define DATASTART ((ptr_t)(&__data_start)) # define DATASTART ((ptr_t)(__data_start))
/* Gustavo Rodriguez-Rivera suggested changing HEURISTIC2 */ /* Gustavo Rodriguez-Rivera suggested changing HEURISTIC2 */
/* to this. Note that the GC must be initialized before the */ /* to this. Note that the GC must be initialized before the */
/* first putenv call. */ /* first putenv call. */
...@@ -1469,8 +1471,8 @@ ...@@ -1469,8 +1471,8 @@
# endif # endif
# define MPROTECT_VDB # define MPROTECT_VDB
/* Requires Linux 2.3.47 or later. */ /* Requires Linux 2.3.47 or later. */
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# ifdef __GNUC__ # ifdef __GNUC__
# define PREFETCH(x) \ # define PREFETCH(x) \
__asm__ (" lfetch [%0]": : "r"((void *)(x))) __asm__ (" lfetch [%0]": : "r"((void *)(x)))
...@@ -1486,15 +1488,15 @@ ...@@ -1486,15 +1488,15 @@
# define MACH_TYPE "M88K" # define MACH_TYPE "M88K"
# define ALIGNMENT 4 # define ALIGNMENT 4
# define ALIGN_DOUBLE # define ALIGN_DOUBLE
extern int etext; extern int etext[];
# ifdef CX_UX # ifdef CX_UX
# define OS_TYPE "CX_UX" # define OS_TYPE "CX_UX"
# define DATASTART ((((word)&etext + 0x3fffff) & ~0x3fffff) + 0x10000) # define DATASTART ((((word)etext + 0x3fffff) & ~0x3fffff) + 0x10000)
# endif # endif
# ifdef DGUX # ifdef DGUX
# define OS_TYPE "DGUX" # define OS_TYPE "DGUX"
extern char * GC_SysVGetDataStart(); extern char * GC_SysVGetDataStart();
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, etext)
# endif # endif
# define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */ # define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */
# endif # endif
...@@ -1505,27 +1507,27 @@ ...@@ -1505,27 +1507,27 @@
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
# ifdef UTS4 # ifdef UTS4
# define OS_TYPE "UTS4" # define OS_TYPE "UTS4"
extern int etext; extern int etext[];
extern int _etext; extern int _etext[];
extern int _end; extern int _end[];
extern char * GC_SysVGetDataStart(); extern char * GC_SysVGetDataStart();
# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext)
# define DATAEND (&_end) # define DATAEND (_end)
# define HEURISTIC2 # define HEURISTIC2
# endif # endif
# ifdef LINUX # ifdef LINUX
# define OS_TYPE "LINUX" # define OS_TYPE "LINUX"
# define HEURISTIC1 # define HEURISTIC1
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
extern int __data_start; extern int __data_start[];
# define DATASTART ((ptr_t)(&__data_start)) # define DATASTART ((ptr_t)(__data_start))
# endif # endif
# endif # endif
# if defined(PJ) # if defined(PJ)
# define ALIGNMENT 4 # define ALIGNMENT 4
extern int _etext; extern int _etext[];
# define DATASTART ((ptr_t)(&_etext)) # define DATASTART ((ptr_t)(_etext))
# define HEURISTIC1 # define HEURISTIC1
# endif # endif
...@@ -1536,8 +1538,8 @@ ...@@ -1536,8 +1538,8 @@
# ifdef NETBSD # ifdef NETBSD
# define OS_TYPE "NETBSD" # define OS_TYPE "NETBSD"
# define HEURISTIC2 # define HEURISTIC2
extern char etext; extern char etext[];
# define DATASTART ((ptr_t)(&etext)) # define DATASTART ((ptr_t)(etext))
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
# endif # endif
# ifdef LINUX # ifdef LINUX
...@@ -1563,11 +1565,11 @@ ...@@ -1563,11 +1565,11 @@
/* contain large read-only data tables */ /* contain large read-only data tables */
/* that we'd rather not scan. */ /* that we'd rather not scan. */
# endif # endif
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# else # else
extern int etext; extern int etext[];
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff)) # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
# endif # endif
# endif # endif
# ifdef MSWINCE # ifdef MSWINCE
...@@ -1576,8 +1578,8 @@ ...@@ -1576,8 +1578,8 @@
# endif # endif
# ifdef NOSYS # ifdef NOSYS
/* __data_start is usually defined in the target linker script. */ /* __data_start is usually defined in the target linker script. */
extern int __data_start; extern int __data_start[];
# define DATASTART (ptr_t)(&__data_start) # define DATASTART (ptr_t)(__data_start)
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
/* __stack_base__ is set in newlib/libc/sys/arm/crt0.S */ /* __stack_base__ is set in newlib/libc/sys/arm/crt0.S */
extern void *__stack_base__; extern void *__stack_base__;
...@@ -1598,8 +1600,8 @@ ...@@ -1598,8 +1600,8 @@
# define USE_GENERIC_PUSH_REGS # define USE_GENERIC_PUSH_REGS
# define DYNAMIC_LOADING # define DYNAMIC_LOADING
# define LINUX_DATA_START # define LINUX_DATA_START
extern int _end; extern int _end[];
# define DATAEND (&_end) # define DATAEND (_end)
# endif # endif
# endif # endif
...@@ -1617,10 +1619,10 @@ ...@@ -1617,10 +1619,10 @@
/* case we lose. Nonetheless, we try both, prefering __data_start. */ /* case we lose. Nonetheless, we try both, prefering __data_start. */
/* We assume gcc. */ /* We assume gcc. */
# pragma weak __data_start # pragma weak __data_start
extern int __data_start; extern int __data_start[];
# pragma weak data_start # pragma weak data_start
extern int data_start; extern int data_start[];
# define DATASTART ((ptr_t)(&__data_start != 0? &__data_start : &data_start)) # define DATASTART ((ptr_t)(__data_start != 0? __data_start : data_start))
#endif #endif
#if defined(LINUX) && defined(REDIRECT_MALLOC) #if defined(LINUX) && defined(REDIRECT_MALLOC)
...@@ -1644,8 +1646,8 @@ ...@@ -1644,8 +1646,8 @@
# endif # endif
# ifndef DATAEND # ifndef DATAEND
extern int end; extern int end[];
# define DATAEND (&end) # define DATAEND (end)
# endif # endif
# if defined(SVR4) && !defined(GETPAGESIZE) # if defined(SVR4) && !defined(GETPAGESIZE)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment