diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2018-08-10 09:07:42 +0200 |
---|---|---|
committer | Stefan Liebler <stli@linux.ibm.com> | 2018-08-10 09:07:42 +0200 |
commit | b215eee1e1dca1ed76678afff2710ed7a38aedc4 (patch) | |
tree | 956f6d266f79b77c311129e2c33b621609cd515d | |
parent | 329c6fec8b8c72e43948730d93ad80bf7447b36a (diff) | |
download | glibc-b215eee1e1dca1ed76678afff2710ed7a38aedc4.tar.gz glibc-b215eee1e1dca1ed76678afff2710ed7a38aedc4.tar.xz glibc-b215eee1e1dca1ed76678afff2710ed7a38aedc4.zip |
S390: Do not clobber R0 in 32-bit _dl_runtime_resolve
Preparation for the usage of R0 by __fentry__. ChangeLog: * sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_resolve): Do not clobber R0.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/s390/s390-32/dl-trampoline.h | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 751186d350..8dd005990b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com> + * sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_resolve): + Do not clobber R0. + +2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com> + * sysdeps/s390/s390-64/dl-trampoline.h (_dl_runtime_profile): Use symbolic offsets for stack variables. diff --git a/sysdeps/s390/s390-32/dl-trampoline.h b/sysdeps/s390/s390-32/dl-trampoline.h index fa83b79926..da50d9e9dc 100644 --- a/sysdeps/s390/s390-32/dl-trampoline.h +++ b/sysdeps/s390/s390-32/dl-trampoline.h @@ -26,8 +26,9 @@ * v24, v26, v28, v30, v25, v27, v29, v31 : vector parameter registers * 24(r15), 28(r15) : PLT arguments PLT1, PLT2 * 96(r15) : additional stack parameters - * The normal clobber rules for function calls apply: - * r0 - r5 : call clobbered + * The slightly tightened normal clobber rules for function calls apply: + * r0 : call saved (for __fentry__) + * r1 - r5 : call clobbered * r6 - r13 : call saved * r14 : return address (call clobbered) * r15 : stack pointer (call saved) @@ -50,6 +51,7 @@ #define V29_OFF -144 #define V30_OFF -128 #define V31_OFF -112 +#define R0_OFF -76 #define PLT1_OFF -72 #define PLT2_OFF -68 #define R2_OFF -64 @@ -65,6 +67,8 @@ cfi_startproc .align 16 _dl_runtime_resolve: + st %r0,CFA_OFF+R0_OFF(%r15) + cfi_offset (r0, R0_OFF) stm %r2,%r5,CFA_OFF+R2_OFF(%r15) # save registers cfi_offset (r2, R2_OFF) cfi_offset (r3, R3_OFF) @@ -119,6 +123,7 @@ _dl_runtime_resolve: ld %f0,CFA_OFF+F0_OFF(%r15) ld %f2,CFA_OFF+F2_OFF(%r15) lm %r2,%r5,CFA_OFF+R2_OFF(%r15) + l %r0,CFA_OFF+R0_OFF(%r15) br %r1 1: .long _dl_fixup - 0b cfi_endproc @@ -131,6 +136,7 @@ _dl_runtime_resolve: #undef V29_OFF #undef V30_OFF #undef V31_OFF +#undef R0_OFF #undef PLT1_OFF #undef PLT2_OFF #undef R2_OFF |