diff options
Diffstat (limited to 'sysdeps/unix/sysv')
5 files changed, 43 insertions, 59 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S index 270e21e001..ae576d62c3 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S @@ -33,24 +33,24 @@ cmpld reg, r1; \ bge+ .Lok; \ mflr r0; \ - std r0,16(r1); \ + std r0,FRAME_LR_SAVE(r1); \ mr r31,r3; \ mr r30,r4; \ - stdu r1,-144(r1); \ + stdu r1,-FRAME_MIN_SIZE-32(r1); \ cfi_remember_state; \ - cfi_adjust_cfa_offset (144); \ - cfi_offset (lr, 16); \ + cfi_adjust_cfa_offset (FRAME_MIN_SIZE+32); \ + cfi_offset (lr, FRAME_LR_SAVE); \ li r3,0; \ - addi r4,r1,112; \ + addi r4,r1,FRAME_MIN_SIZE; \ li r0,__NR_sigaltstack; \ sc; \ /* Without working sigaltstack we cannot perform the test. */ \ bso .Lok2; \ - lwz r0,112+8(r1); \ + lwz r0,FRAME_MIN_SIZE+8(r1); \ andi. r4,r0,1; \ beq .Lfail; \ - ld r0,112+16(r1); \ - ld r4,112(r1); \ + ld r0,FRAME_MIN_SIZE+16(r1); \ + ld r4,FRAME_MIN_SIZE(r1); \ add r4,r4,r0; \ sub r3,r3,reg; \ cmpld r3,r0; \ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S index 348aeb5ba0..33cdf25225 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S @@ -28,9 +28,9 @@ ENTRY (__brk) CALL_MCOUNT 1 - std r3,48(r1) + std r3,-8(r1) DO_CALL(SYS_ify(brk)) - ld r6,48(r1) + ld r6,-8(r1) ld r5,.LC__curbrk@toc(r2) std r3,0(r5) cmpld r6,r3 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S index 4151d15c37..37d9d24fb9 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S @@ -40,22 +40,22 @@ ENTRY (__clone) cror cr0*4+eq,cr1*4+eq,cr0*4+eq beq- cr0,L(badargs) - /* Save some regs in parm save area. */ + /* Save some regs in the "red zone". */ #ifdef RESET_PID - std r29,48(r1) + std r29,-24(r1) #endif - std r30,56(r1) - std r31,64(r1) + std r30,-16(r1) + std r31,-8(r1) #ifdef RESET_PID - cfi_offset(r29,48) + cfi_offset(r29,-24) #endif - cfi_offset(r30,56) - cfi_offset(r31,64) + cfi_offset(r30,-16) + cfi_offset(r31,-8) /* Set up stack frame for child. */ clrrdi r4,r4,4 li r0,0 - stdu r0,-112(r4) /* min stack frame is 112 bytes per ABI */ + stdu r0,-FRAME_MIN_SIZE_PARM(r4) /* Save fn, args, stack across syscall. */ mr r30,r3 /* Function in r30. */ @@ -97,12 +97,12 @@ L(nomoregetpid): L(oldpid): #endif - std r2,40(r1) + std r2,FRAME_TOC_SAVE(r1) /* Call procedure. */ PPC64_LOAD_FUNCPTR r30 mr r3,r31 bctrl - ld r2,40(r1) + ld r2,FRAME_TOC_SAVE(r1) /* Call _exit with result from procedure. */ #ifdef SHARED b JUMPTARGET(__GI__exit) @@ -121,15 +121,15 @@ L(badargs): L(parent): /* Parent. Restore registers & return. */ #ifdef RESET_PID - cfi_offset(r29,48) + cfi_offset(r29,-24) #endif - cfi_offset(r30,56) - cfi_offset(r31,64) + cfi_offset(r30,-16) + cfi_offset(r31,-8) #ifdef RESET_PID - ld r29,48(r1) + ld r29,-24(r1) #endif - ld r30,56(r1) - ld r31,64(r1) + ld r30,-16(r1) + ld r31,-8(r1) #ifdef RESET_PID cfi_restore(r29) #endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S index 018e55c997..aba2d80902 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S @@ -46,8 +46,13 @@ # endif #endif -#define FRAMESIZE 128 -#define stackblock FRAMESIZE+48 /* offset to parm save area. */ +#if _CALL_ELF == 2 +#define FRAMESIZE (FRAME_MIN_SIZE+16+64) +#define stackblock (FRAME_MIN_SIZE+16) +#else +#define FRAMESIZE (FRAME_MIN_SIZE+16) +#define stackblock (FRAMESIZE+FRAME_PARM_SAVE) /* offset to parm save area. */ +#endif .text ENTRY(__socket) @@ -98,22 +103,22 @@ ENTRY(__socket) .Lsocket_cancel: cfi_adjust_cfa_offset(FRAMESIZE) mflr r9 - std r9,FRAMESIZE+16(r1) - cfi_offset (lr, 16) + std r9,FRAMESIZE+FRAME_LR_SAVE(r1) + cfi_offset (lr, FRAME_LR_SAVE) CENABLE - std r3,120(r1) + std r3,FRAME_MIN_SIZE+8(r1) li r3,P(SOCKOP_,socket) addi r4,r1,stackblock DO_CALL(SYS_ify(socketcall)) mfcr r0 - std r3,112(r1) - std r0,FRAMESIZE+8(r1) - cfi_offset (cr, 8) - ld r3,120(r1) + std r3,FRAME_MIN_SIZE(r1) + std r0,FRAMESIZE+FRAME_CR_SAVE(r1) + cfi_offset (cr, FRAME_CR_SAVE) + ld r3,FRAME_MIN_SIZE+8(r1) CDISABLE - ld r4,FRAMESIZE+16(r1) - ld r0,FRAMESIZE+8(r1) - ld r3,112(r1) + ld r4,FRAMESIZE+FRAME_LR_SAVE(r1) + ld r0,FRAMESIZE+FRAME_CR_SAVE(r1) + ld r3,FRAME_MIN_SIZE(r1) mtlr r4 mtcr r0 addi r1,r1,FRAMESIZE diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym index a35418d9d4..8364e4614f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym @@ -8,27 +8,6 @@ SIG_BLOCK SIG_SETMASK --- Offsets of the fields in the powerpc64 ABI stack frame. --- XXX Do these correspond to some struct? - -FRAME_BACKCHAIN 0 -FRAME_CR_SAVE 8 -FRAME_LR_SAVE 16 -FRAME_COMPILER_DW 24 -FRAME_LINKER_DW 32 -FRAME_TOC_SAVE 40 -FRAME_PARM_SAVE 48 -FRAME_PARM1_SAVE 48 -FRAME_PARM2_SAVE 56 -FRAME_PARM3_SAVE 64 -FRAME_PARM4_SAVE 72 -FRAME_PARM5_SAVE 80 -FRAME_PARM6_SAVE 88 -FRAME_PARM7_SAVE 96 -FRAME_PARM8_SAVE 104 -FRAME_PARM9_SAVE 112 - - -- Offsets of the fields in the ucontext_t structure. #define ucontext(member) offsetof (ucontext_t, member) #define mcontext(member) ucontext (uc_mcontext.member) |