summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2018-08-10 09:07:44 +0200
committerStefan Liebler <stli@linux.ibm.com>2018-08-10 09:07:44 +0200
commit8f135efcad9f32daaa560b7403ab8c1498c0c659 (patch)
tree086a4b3ff4175bb9ee7f33565a585f1a66c51702
parent71c01af52fdf643abe3946f934693a55887a8ead (diff)
downloadglibc-8f135efcad9f32daaa560b7403ab8c1498c0c659.tar.gz
S390: Fix unwind in 32-bit _mcount
* Fix CFI offset for %r14. * Fix unwound value of %r15 being off by 128 bytes. ChangeLog: * sysdeps/s390/s390-32/s390-mcount.S (_mcount): Fix unwind.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/s390/s390-32/s390-mcount.S8
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index c3a085e22b..bcbeb8cd67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com>
+ * sysdeps/s390/s390-32/s390-mcount.S (_mcount):
+ Fix unwind.
+
+2018-08-10 Ilya Leoshkevich <iii@linux.ibm.com>
+
* sysdeps/s390/s390-64/Versions (__fentry__): Add.
* sysdeps/s390/s390-64/s390x-mcount.S: Move the common
code to s390x-mcount.h and #include it.
diff --git a/sysdeps/s390/s390-32/s390-mcount.S b/sysdeps/s390/s390-32/s390-mcount.S
index 153777e1b8..84f48a20fc 100644
--- a/sysdeps/s390/s390-32/s390-mcount.S
+++ b/sysdeps/s390/s390-32/s390-mcount.S
@@ -55,9 +55,13 @@ C_LABEL(_mcount)
/* Save the caller-clobbered registers. */
ahi %r15,-128
cfi_adjust_cfa_offset (128)
+ /* binutils 2.28+: .cfi_val_offset r15, -96 */
+ .cfi_escape \
+ /* DW_CFA_val_offset */ 0x14, \
+ /* r15 */ 0x0f, \
+ /* scaled offset */ 0x18
stm %r14,%r5,96(%r15)
- cfi_offset (r14, 0)
- cfi_offset (r15, 4)
+ cfi_offset (r14, -128)
l %r2,132(%r15) # callers address = first parameter
la %r2,0(%r2) # clear bit 0
la %r3,0(%r14) # callees address = second parameter