diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 83e266a62329edb6e8ca980ae405e0bc406df663..df5c8e123d1c1381461718a48a0e02a5d17a6767 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,11 @@ +2002-01-25 David Edelsohn <edelsohn@gnu.org> + + * include/gc.h (GC_INIT): Add DATASTART and DATAEND roots on AIX. + * include/private/gcconfig.h (RS6000): Add 64-bit AIX support. + Define USE_GENERIC_PUSH_REGS. Use AIX _data and _end symbols for + DATASTART and DATAEND roots. + * rs6000_mach_dep.s: Add function descriptor and traceback table. + 2001-12-16 Jeff Sturm <jsturm@one-point.com> * dyn_load.c: Define ElfW (if needed) for all targets, diff --git a/boehm-gc/include/gc.h b/boehm-gc/include/gc.h index c73ecc0ae7a580f468f7888ee304a44c0a2f9150..7d5bd250b8b41e4e96eb913dc75e897390cd983e 100644 --- a/boehm-gc/include/gc.h +++ b/boehm-gc/include/gc.h @@ -888,7 +888,7 @@ extern void GC_thr_init(); /* Needed for Solaris/X86 */ # define GC_INIT() { extern end, etext; \ GC_noop(&end, &etext); } #else -# if defined(__CYGWIN32__) && defined(GC_USE_DLL) +# if (defined(__CYGWIN32__) && defined(GC_USE_DLL)) || defined (_AIX) /* * Similarly gnu-win32 DLLs need explicit initialization */ diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h index 75405dcd7af73e64826c49fe99acc4b5693a5580..1c92ee31f2fdfb276aa6c5b7100a10ca26beeb7d 100644 --- a/boehm-gc/include/private/gcconfig.h +++ b/boehm-gc/include/private/gcconfig.h @@ -1174,10 +1174,19 @@ # ifdef RS6000 # define MACH_TYPE "RS6000" -# define ALIGNMENT 4 -# define DATASTART ((ptr_t)0x20000000) +# ifdef __64BIT__ +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# else +# define ALIGNMENT 4 +# define CPP_WORDSZ 32 +# endif + extern int _data, _end; +# define DATASTART ((ptr_t)((ulong)&_data)) +# define DATAEND ((ptr_t)((ulong)&_end)) extern int errno; # define STACKBOTTOM ((ptr_t)((ulong)&errno)) +# define USE_GENERIC_PUSH_REGS # define DYNAMIC_LOADING /* For really old versions of AIX, this may have to be removed. */ # endif @@ -1582,7 +1591,7 @@ # if defined(SVR4) || defined(LINUX) || defined(IRIX) || defined(HPUX) \ || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \ - || defined(BSD) || defined(AIX) || defined(MACOSX) || defined(OSF1) + || defined(BSD) || defined(_AIX) || defined(MACOSX) || defined(OSF1) # define UNIX_LIKE /* Basic Unix-like system calls work. */ # endif diff --git a/boehm-gc/rs6000_mach_dep.s b/boehm-gc/rs6000_mach_dep.s index e0dbe808596b1952a0c9ff114b7d70179abe5d53..12bf9a84d51ce8bfbf83cd7153b47a2f7fe537eb 100644 --- a/boehm-gc/rs6000_mach_dep.s +++ b/boehm-gc/rs6000_mach_dep.s @@ -1,4 +1,3 @@ - .csect .set r0,0 .set r1,1 .set r2,2 @@ -32,10 +31,18 @@ .set r30,30 .set r31,31 + .extern .GC_push_one # Mark from machine registers that are saved by C compiler .globl .GC_push_regs +.csect .text[PR] + .align 2 + .globl GC_push_regs + .globl .GC_push_regs +.csect GC_push_regs[DS] +GC_push_regs: + .long .GC_push_regs, TOC[tc0], 0 +.csect .text[PR] .GC_push_regs: - .extern .GC_push_one stu r1,-64(r1) # reserve stack frame mflr r0 # save link register st r0,0x48(r1) @@ -103,3 +110,5 @@ mtlr r0 ai r1,r1,64 br + .long 0 + .byte 0,0,0,0,0,0,0,0