aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--sysdeps/powerpc/powerpc32/__longjmp-common.S1
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S6
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/setjmp-common.S9
-rw-r--r--sysdeps/powerpc/powerpc32/setjmp-common.S6
-rw-r--r--sysdeps/powerpc/powerpc64/setjmp-common.S6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h2
7 files changed, 40 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9d9b3ae980..5201d34627 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2005-12-29 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h [ASSEMBLER]:
+ Define PTR_DEMANGLE2.
+ * sysdeps/powerpc/powerpc32/setjmp-common.S [PTR_MANGLE]: Also
+ mangle r1.
+ * sysdeps/powerpc/powerpc32/__longjmp-common.S [PTR_DEMANGLE]: Also
+ demangle r1.
+ * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S [PTR_MANGLE]: Mangle
+ r0 and r1.
+ * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S [PTR_DEMANGLE]:
+ Demangle r0 and r1.
+
* sysdeps/powerpc/powerpc64/setjmp-common.S [PTR_MANGLE]: Also
mangle r1.
* sysdeps/powerpc/powerpc64/__longjmp-common.S [PTR_DEMANGLE]: Also
diff --git a/sysdeps/powerpc/powerpc32/__longjmp-common.S b/sysdeps/powerpc/powerpc32/__longjmp-common.S
index 80f5905208..d3f5545579 100644
--- a/sysdeps/powerpc/powerpc32/__longjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/__longjmp-common.S
@@ -43,6 +43,7 @@ ENTRY (BP_SYM (__longjmp))
lwz r20,((JB_GPRS+6)*4)(r3)
#ifdef PTR_DEMANGLE
PTR_DEMANGLE (r0, r25)
+ PTR_DEMANGLE2 (r1, r25)
#endif
mtlr r0
lwz r21,((JB_GPRS+7)*4)(r3)
diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
index 73cc8181f9..022d7ebbad 100644
--- a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
@@ -1,5 +1,5 @@
/* longjmp for PowerPC.
- Copyright (C) 1995-99, 2000, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1995-99, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -128,6 +128,10 @@ L(no_vmx):
lfd fp19,((JB_FPRS+5*2)*4)(r3)
lwz r20,((JB_GPRS+6)*4)(r3)
lfd fp20,((JB_FPRS+6*2)*4)(r3)
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (r0, r25)
+ PTR_DEMANGLE2 (r1, r25)
+#endif
mtlr r0
lwz r21,((JB_GPRS+7)*4)(r3)
lfd fp21,((JB_FPRS+7*2)*4)(r3)
diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
index cf3f215f2d..dae79046d3 100644
--- a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
@@ -32,10 +32,19 @@
ENTRY (BP_SYM (__sigsetjmp))
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+#ifdef PTR_MANGLE
+ mr r5,r1
+ PTR_MANGLE(r5, r10)
+ stw r5,(JB_GPR1*4)(3)
+#else
stw r1,(JB_GPR1*4)(3)
+#endif
mflr r0
stw r14,((JB_GPRS+0)*4)(3)
stfd fp14,((JB_FPRS+0*2)*4)(3)
+#ifdef PTR_MANGLE
+ PTR_MANGLE (r0, r10)
+#endif
stw r0,(JB_LR*4)(3)
stw r15,((JB_GPRS+1)*4)(3)
stfd fp15,((JB_FPRS+1*2)*4)(3)
diff --git a/sysdeps/powerpc/powerpc32/setjmp-common.S b/sysdeps/powerpc/powerpc32/setjmp-common.S
index 750075459c..35740923d2 100644
--- a/sysdeps/powerpc/powerpc32/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/setjmp-common.S
@@ -33,7 +33,13 @@
ENTRY (BP_SYM (__sigsetjmp))
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+#ifdef PTR_MANGLE
+ mr r5,r1
+ PTR_MANGLE(r5, r10)
+ stw r5,(JB_GPR1*4)(3)
+#else
stw r1,(JB_GPR1*4)(3)
+#endif
mflr r0
stw r14,((JB_GPRS+0)*4)(3)
#ifdef PTR_MANGLE
diff --git a/sysdeps/powerpc/powerpc64/setjmp-common.S b/sysdeps/powerpc/powerpc64/setjmp-common.S
index 4098fd63f5..9660302ba5 100644
--- a/sysdeps/powerpc/powerpc64/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc64/setjmp-common.S
@@ -46,7 +46,13 @@ ENTRY (BP_SYM (__sigsetjmp))
.hidden JUMPTARGET(GLUE(__sigsetjmp,_ent))
JUMPTARGET(GLUE(__sigsetjmp,_ent)):
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+#ifdef PTR_MANGLE
+ mr r5, r1
+ PTR_MANGLE (r5, r10)
+ std r5,(JB_GPR1*8)(3)
+#else
std r1,(JB_GPR1*8)(3)
+#endif
mflr r0
#if defined SHARED && !defined IS_IN_rtld
ld r5,40(r1) /* Retrieve the callers TOC. */
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
index d3cd45ce99..cf49d0a527 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
@@ -181,6 +181,8 @@
lwz tmpreg,POINTER_GUARD(r2); \
xor reg,tmpreg,reg
# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg)
+# define PTR_DEMANGLE2(reg, tmpreg) \
+ xor reg,tmpreg,reg
# else
# define PTR_MANGLE(var) \
(var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())