about summary refs log tree commit diff
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)
downloadglibc-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.
-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