diff options
author | David Edelsohn <edelsohn@gnu.org> | 2002-01-25 18:06:24 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2002-01-25 13:06:24 -0500 |
commit | 6cb3421f1f940dd093331ed494df9db4e7194e9a (patch) | |
tree | e5a833a73574d5e62d52532dad7b1f72cb709cba /boehm-gc | |
parent | 01a2ccd010c3587d7db5d54e2c8d5b880415b414 (diff) | |
download | gcc-6cb3421f1f940dd093331ed494df9db4e7194e9a.tar.gz |
gc.h (GC_INIT): Add DATASTART and DATAEND roots on AIX.
* 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.
From-SVN: r49218
Diffstat (limited to 'boehm-gc')
-rw-r--r-- | boehm-gc/ChangeLog | 8 | ||||
-rw-r--r-- | boehm-gc/include/gc.h | 2 | ||||
-rw-r--r-- | boehm-gc/include/private/gcconfig.h | 15 | ||||
-rw-r--r-- | boehm-gc/rs6000_mach_dep.s | 13 |
4 files changed, 32 insertions, 6 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 83e266a6232..df5c8e123d1 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 c73ecc0ae7a..7d5bd250b8b 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 75405dcd7af..1c92ee31f2f 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 e0dbe808596..12bf9a84d51 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 |