]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
PowerPC64 FRAME_PARM_SAVE
authorAlan Modra <amodra@gmail.com>
Wed, 14 Jun 2017 01:13:33 +0000 (10:43 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 14 Jun 2017 01:13:33 +0000 (10:43 +0930)
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.

ChangeLog
sysdeps/powerpc/powerpc64/sysdep.h
sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S

index ddfa5999671505924a6e8c047c8653f0d0ab2be2..3f43ec4c6fcff9329829d07c6a0324543de22aaa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+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.
index 409734aa57a305e7d84ec1e14ce7e0a0292a5234..434732310cdc447984ed0bf9ff7099d93181858c 100644 (file)
 #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.  */
index ff2ed265ee65781e1aa0cce295af5db7f9898b42..da12d1991b3fca42cfdce6bbbb85dac67b4bf36c 100644 (file)
 #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