Fix text relocation on ppc32.
authorAndreas Schwab <aschwab@redhat.com>
Thu, 25 Jun 2009 15:56:20 +0000 (08:56 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 25 Jun 2009 15:56:20 +0000 (08:56 -0700)
The ____longjmp_chk implementation didn't load from memory the
right way.

ChangeLog
sysdeps/powerpc/powerpc32/____longjmp_chk.S

index 3e1f365..ca5d5b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-25  Andreas Schwab  <aschwab@redhat.com>
+
+       * sysdeps/powerpc/powerpc32/____longjmp_chk.S (LOAD_ARG): Define.
+       (CHECK_SP): Use it.
+               
 2009-06-24  Andreas Schwab  <aschwab@redhat.com>
 
        * sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S: Fix cfa offset
index 5c1f648..510ce52 100644 (file)
 
 #define __longjmp ____longjmp_chk
 
+#ifdef PIC
+# ifdef HAVE_ASM_PPC_REL16
+#  define LOAD_ARG \
+       bcl     20,31,1f;                               \
+1:     mflr    r3;                                     \
+       addis   r3,r3,_GLOBAL_OFFSET_TABLE_-1b@ha;      \
+       addi    r3,r3,_GLOBAL_OFFSET_TABLE_-1b@l;       \
+       lwz     r3,.LC0@got(r3)
+# else
+#  define LOAD_ARG \
+       bl      _GLOBAL_OFFSET_TABLE_-4@local;          \
+       mflr    r3;                                     \
+       lwz     r3,.LC0@got(r3)
+# endif
+#else
+# define LOAD_ARG \
+       lis     r3,.LC0@ha;                             \
+       la      r3,.LC0@l(r3)
+#endif
+
 #define CHECK_SP(reg) \
        cmplw   reg, r1;                                \
        bge+    .Lok;                                   \
-       lis     r3,.LC0@ha;                             \
-       la      r3,.LC0@l(r3);                          \
+       LOAD_ARG;                                       \
        bl      HIDDEN_JUMPTARGET (__fortify_fail);     \
 .Lok: