S390: Use symbolic offsets for stack variables in 64-bit _dl_runtime_resolve

Maintainability improvement.

ChangeLog:

	* sysdeps/s390/s390-64/dl-trampoline.h (_dl_runtime_resolve):
	Use symbolic offsets for stack variables.
This commit is contained in:
Ilya Leoshkevich 2018-08-10 09:07:42 +02:00 committed by Stefan Liebler
parent 6954059ad6
commit 0fb7afa2f9
2 changed files with 88 additions and 41 deletions

View File

@ -1,3 +1,8 @@
2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com>
* sysdeps/s390/s390-64/dl-trampoline.h (_dl_runtime_resolve):
Use symbolic offsets for stack variables.
2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com> 2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com>
* sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_profile): * sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_profile):

View File

@ -37,47 +37,71 @@
* v16 - v31 : call clobbered * v16 - v31 : call clobbered
*/ */
#define CFA_OFF 160
#define FRAME_OFF CFA_OFF + FRAME_SIZE
#define V24_OFF -288
#define V25_OFF -272
#define V26_OFF -256
#define V27_OFF -240
#define V28_OFF -224
#define V29_OFF -208
#define V30_OFF -192
#define V31_OFF -176
#define PLT1_OFF -112
#define PLT2_OFF -104
#define R2_OFF -96
#define R3_OFF -88
#define R4_OFF -80
#define R5_OFF -72
#define R14_OFF -64
#define R15_OFF -56
#define F0_OFF -48
#define F2_OFF -40
#define F4_OFF -32
#define F6_OFF -24
.globl _dl_runtime_resolve .globl _dl_runtime_resolve
.type _dl_runtime_resolve, @function .type _dl_runtime_resolve, @function
cfi_startproc cfi_startproc
.align 16 .align 16
_dl_runtime_resolve: _dl_runtime_resolve:
stmg %r2,%r5,64(%r15) # save call-clobbered argument registers stmg %r2,%r5,CFA_OFF+R2_OFF(%r15) # save registers
cfi_offset (r2, -96) cfi_offset (r2, R2_OFF)
cfi_offset (r3, -88) cfi_offset (r3, R3_OFF)
cfi_offset (r4, -80) cfi_offset (r4, R4_OFF)
cfi_offset (r5, -72) cfi_offset (r5, R5_OFF)
stmg %r14,%r15,96(%r15) stmg %r14,%r15,CFA_OFF+R14_OFF(%r15)
cfi_offset (r14, -64) cfi_offset (r14, R14_OFF)
cfi_offset (r15, -56) cfi_offset (r15, R15_OFF)
std %f0,112(%r15) std %f0,CFA_OFF+F0_OFF(%r15)
cfi_offset (f0, -48) cfi_offset (f0, F0_OFF)
std %f2,120(%r15) std %f2,CFA_OFF+F2_OFF(%r15)
cfi_offset (f2, -40) cfi_offset (f2, F2_OFF)
std %f4,128(%r15) std %f4,CFA_OFF+F4_OFF(%r15)
cfi_offset (f4, -32) cfi_offset (f4, F4_OFF)
std %f6,136(%r15) std %f6,CFA_OFF+F6_OFF(%r15)
cfi_offset (f6, -24) cfi_offset (f6, F6_OFF)
lmg %r2,%r3,48(%r15) # load args for fixup saved by PLT lmg %r2,%r3,CFA_OFF+PLT1_OFF(%r15) # load args saved by PLT
lgr %r0,%r15 lgr %r0,%r15
#ifdef RESTORE_VRS #ifdef RESTORE_VRS
aghi %r15,-288 # create stack frame # define FRAME_SIZE (CFA_OFF + 128)
cfi_adjust_cfa_offset (288) aghi %r15,-FRAME_SIZE # create stack frame
cfi_adjust_cfa_offset (FRAME_SIZE)
.machine push .machine push
.machine "z13" .machine "z13"
vstm %v24,%v31,160(%r15)# store call-clobbered vector argument registers vstm %v24,%v31,FRAME_OFF+V24_OFF(%r15) # save call-clobbered vr args
cfi_offset (v24, -288) cfi_offset (v24, V24_OFF)
cfi_offset (v25, -272) cfi_offset (v25, V25_OFF)
cfi_offset (v26, -256) cfi_offset (v26, V26_OFF)
cfi_offset (v27, -240) cfi_offset (v27, V27_OFF)
cfi_offset (v28, -224) cfi_offset (v28, V28_OFF)
cfi_offset (v29, -208) cfi_offset (v29, V29_OFF)
cfi_offset (v30, -192) cfi_offset (v30, V30_OFF)
cfi_offset (v31, -176) cfi_offset (v31, V31_OFF)
.machine pop .machine pop
#else #else
aghi %r15,-160 # create stack frame # define FRAME_SIZE CFA_OFF
cfi_adjust_cfa_offset (160) aghi %r15,-FRAME_SIZE # create stack frame
cfi_adjust_cfa_offset (FRAME_SIZE)
#endif #endif
stg %r0,0(%r15) # write backchain stg %r0,0(%r15) # write backchain
brasl %r14,_dl_fixup # call _dl_fixup brasl %r14,_dl_fixup # call _dl_fixup
@ -85,22 +109,40 @@ _dl_runtime_resolve:
#ifdef RESTORE_VRS #ifdef RESTORE_VRS
.machine push .machine push
.machine "z13" .machine "z13"
vlm %v24,%v31,160(%r15)# restore vector registers vlm %v24,%v31,FRAME_OFF+V24_OFF(%r15) # restore vector registers
.machine pop .machine pop
lmg %r14,%r15,384(%r15)# remove stack frame and restore registers
#else
lmg %r14,%r15,256(%r15)# remove stack frame and restore registers
#endif #endif
cfi_def_cfa_offset (160) lmg %r14,%r15,FRAME_OFF+R14_OFF(%r15) # restore frame and registers
ld %f0,112(%r15) #undef FRAME_SIZE
ld %f2,120(%r15) cfi_def_cfa_offset (CFA_OFF)
ld %f4,128(%r15) ld %f0,CFA_OFF+F0_OFF(%r15)
ld %f6,136(%r15) ld %f2,CFA_OFF+F2_OFF(%r15)
lmg %r2,%r5,64(%r15) ld %f4,CFA_OFF+F4_OFF(%r15)
ld %f6,CFA_OFF+F6_OFF(%r15)
lmg %r2,%r5,CFA_OFF+R2_OFF(%r15)
br %r1 br %r1
cfi_endproc cfi_endproc
.size _dl_runtime_resolve, .-_dl_runtime_resolve .size _dl_runtime_resolve, .-_dl_runtime_resolve
#undef V24_OFF
#undef V25_OFF
#undef V26_OFF
#undef V27_OFF
#undef V28_OFF
#undef V29_OFF
#undef V30_OFF
#undef V31_OFF
#undef PLT1_OFF
#undef PLT2_OFF
#undef R2_OFF
#undef R3_OFF
#undef R4_OFF
#undef R5_OFF
#undef R14_OFF
#undef R15_OFF
#undef F0_OFF
#undef F2_OFF
#undef F4_OFF
#undef F6_OFF
#ifndef PROF #ifndef PROF
.globl _dl_runtime_profile .globl _dl_runtime_profile