Fix text relocation on ppc32.

The ____longjmp_chk implementation didn't load from memory the
right way.
This commit is contained in:
Andreas Schwab 2009-06-25 08:56:20 -07:00 committed by Ulrich Drepper
parent 3f241d7584
commit 80a98966c8
2 changed files with 26 additions and 2 deletions

View File

@ -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

View File

@ -26,11 +26,30 @@
#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: