From 6cb3421f1f940dd093331ed494df9db4e7194e9a Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Fri, 25 Jan 2002 18:06:24 +0000 Subject: 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 --- boehm-gc/ChangeLog | 8 ++++++++ boehm-gc/include/gc.h | 2 +- boehm-gc/include/private/gcconfig.h | 15 ++++++++++++--- boehm-gc/rs6000_mach_dep.s | 13 +++++++++++-- 4 files changed, 32 insertions(+), 6 deletions(-) (limited to 'boehm-gc') diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 83e266a..df5c8e1 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,11 @@ +2002-01-25 David Edelsohn + + * 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 * 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 c73ecc0..7d5bd25 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 75405dc..1c92ee3 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 e0dbe80..12bf9a8 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 -- cgit v1.1