diff options
author | Alan Modra <amodra@gmail.com> | 2017-06-14 10:43:33 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-06-14 10:43:33 +0930 |
commit | fb499eb04e8aa897e2b97694be92a1506885c1df (patch) | |
tree | d4bc6b2100a59160d564eff8e16422dfed4a751d /sysdeps | |
parent | dd8854361b7e44a40284d51f95819aa587af20d6 (diff) | |
download | glibc-fb499eb04e8aa897e2b97694be92a1506885c1df.tar.gz glibc-fb499eb04e8aa897e2b97694be92a1506885c1df.tar.xz glibc-fb499eb04e8aa897e2b97694be92a1506885c1df.zip |
PowerPC64 FRAME_PARM_SAVE
I think FRAME_PARM[1-9]_SAVE confuse the code, particularly FRAME_PARM9_SAVE. There are only 8 parameter save slots! * sysdeps/powerpc/powerpc64/sysdep.h: (FRAME_BACKCHAIN, FRAME_CR_SAVE, FRAME_LR_SAVE): Move out of conditional. (FRAME_PARM1_SAVE, FRAME_PARM2_SAVE, FRAME_PARM3_SAVE, FRAME_PARM4_SAVE, FRAME_PARM5_SAVE, FRAME_PARM6_SAVE, FRAME_PARM7_SAVE, FRAME_PARM8_SAVE, FRAME_PARM9_SAVE): Delete. * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: Replace uses of FRAME_PARM[1-9]_SAVE with FRAME_PARM_SAVE plus offset.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/powerpc/powerpc64/sysdep.h | 27 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S | 26 |
2 files changed, 16 insertions, 37 deletions
diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h index 409734aa57..434732310c 100644 --- a/sysdeps/powerpc/powerpc64/sysdep.h +++ b/sysdeps/powerpc/powerpc64/sysdep.h @@ -21,40 +21,19 @@ #ifdef __ASSEMBLER__ /* Stack frame offsets. */ -#if _CALL_ELF != 2 -#define FRAME_MIN_SIZE 112 -#define FRAME_MIN_SIZE_PARM 112 #define FRAME_BACKCHAIN 0 #define FRAME_CR_SAVE 8 #define FRAME_LR_SAVE 16 +#if _CALL_ELF != 2 +#define FRAME_MIN_SIZE 112 +#define FRAME_MIN_SIZE_PARM 112 #define FRAME_TOC_SAVE 40 #define FRAME_PARM_SAVE 48 -#define FRAME_PARM1_SAVE 48 -#define FRAME_PARM2_SAVE 56 -#define FRAME_PARM3_SAVE 64 -#define FRAME_PARM4_SAVE 72 -#define FRAME_PARM5_SAVE 80 -#define FRAME_PARM6_SAVE 88 -#define FRAME_PARM7_SAVE 96 -#define FRAME_PARM8_SAVE 104 -#define FRAME_PARM9_SAVE 112 #else #define FRAME_MIN_SIZE 32 #define FRAME_MIN_SIZE_PARM 96 -#define FRAME_BACKCHAIN 0 -#define FRAME_CR_SAVE 8 -#define FRAME_LR_SAVE 16 #define FRAME_TOC_SAVE 24 #define FRAME_PARM_SAVE 32 -#define FRAME_PARM1_SAVE 32 -#define FRAME_PARM2_SAVE 40 -#define FRAME_PARM3_SAVE 48 -#define FRAME_PARM4_SAVE 56 -#define FRAME_PARM5_SAVE 64 -#define FRAME_PARM6_SAVE 72 -#define FRAME_PARM7_SAVE 80 -#define FRAME_PARM8_SAVE 88 -#define FRAME_PARM9_SAVE 96 #endif /* Support macros for CALL_MCOUNT. */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S index ff2ed265ee..da12d1991b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S @@ -23,20 +23,20 @@ #include "ucontext_i.h" #include <asm/errno.h> -ENTRY(__makecontext) +ENTRY (__makecontext) CALL_MCOUNT 3 /* Save parameters into the parameter save area of callers frame. */ - std r3,FRAME_PARM1_SAVE(r1) /* ucontext_t *ucp */ - std r4,FRAME_PARM2_SAVE(r1) /* void (*func)(void) */ - std r5,FRAME_PARM3_SAVE(r1) /* int argc */ - std r6,FRAME_PARM4_SAVE(r1) /* ... */ - std r7,FRAME_PARM5_SAVE(r1) - std r8,FRAME_PARM6_SAVE(r1) - std r9,FRAME_PARM7_SAVE(r1) - std r10,FRAME_PARM8_SAVE(r1) + std r3,FRAME_PARM_SAVE+0(r1) /* ucontext_t *ucp */ + std r4,FRAME_PARM_SAVE+8(r1) /* void (*func)(void) */ + std r5,FRAME_PARM_SAVE+16(r1) /* int argc */ + std r6,FRAME_PARM_SAVE+24(r1) /* ... */ + std r7,FRAME_PARM_SAVE+32(r1) + std r8,FRAME_PARM_SAVE+40(r1) + std r9,FRAME_PARM_SAVE+48(r1) + std r10,FRAME_PARM_SAVE+56(r1) mflr r0 /* Get the address of the target functions first parameter. */ - addi r6,r1,FRAME_PARM4_SAVE + addi r6,r1,FRAME_PARM_SAVE+24 std r0,FRAME_LR_SAVE(r1) cfi_offset (lr, FRAME_LR_SAVE) stdu r1,-128(r1) @@ -55,7 +55,7 @@ ENTRY(__makecontext) clrrdi r7,r7,4 li r0,0 stdu r0,-64(r7) - std r3,FRAME_PARM1_SAVE(r7) /* Store context in dummy parm1. */ + std r3,FRAME_PARM_SAVE(r7) /* Store context in dummy parm1. */ mflr r0 std r2,FRAME_TOC_SAVE(r7) /* Store the TOC pointer for later. */ std r0,FRAME_LR_SAVE(r7) @@ -102,7 +102,7 @@ L(parmloop2): addi r0,r5,-8 ble cr1,L(noparms) mtctr r0 - addi r9,r8,FRAME_PARM9_SAVE-8 + addi r9,r8,FRAME_PARM_SAVE+64-8 L(parmloop): ldu r0,8(r7) stdu r0,8(r9) @@ -148,7 +148,7 @@ L(noparms): L(exitcode): /* Recover the ucontext and TOC from the dummy frame. */ ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */ - ld r3,FRAME_PARM1_SAVE(r1) + ld r3,FRAME_PARM_SAVE(r1) ld r2,FRAME_TOC_SAVE(r1) ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */ cmpdi r3,0 |