summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-06-14 10:43:33 +0930
committerAlan Modra <amodra@gmail.com>2017-06-14 10:43:33 +0930
commitfb499eb04e8aa897e2b97694be92a1506885c1df (patch)
treed4bc6b2100a59160d564eff8e16422dfed4a751d
parentdd8854361b7e44a40284d51f95819aa587af20d6 (diff)
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.
-rw-r--r--ChangeLog10
-rw-r--r--sysdeps/powerpc/powerpc64/sysdep.h27
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S26
3 files changed, 26 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index ddfa599967..3f43ec4c6f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2017-06-14 Alan Modra <amodra@gmail.com>
+ * 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.
+
+2017-06-14 Alan Modra <amodra@gmail.com>
+
* sysdeps/powerpc/powerpc64/sysdep.h: (call_mcount_parm_offset): Delete.
(SAVE_ARG, REST_ARG, CFI_SAVE_ARG): Correct.
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