aboutsummaryrefslogtreecommitdiff
path: root/boehm-gc
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2002-01-25 18:06:24 +0000
committerDavid Edelsohn <edelsohn@gnu.org>2002-01-25 18:06:24 +0000
commit78174612f0af496754e871ae96a97d8c24bea0b8 (patch)
treee5a833a73574d5e62d52532dad7b1f72cb709cba /boehm-gc
parentdea202ea9a63e827f18b272e397b9f086147218c (diff)
* 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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@49218 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc')
-rw-r--r--boehm-gc/ChangeLog8
-rw-r--r--boehm-gc/include/gc.h2
-rw-r--r--boehm-gc/include/private/gcconfig.h15
-rw-r--r--boehm-gc/rs6000_mach_dep.s13
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