S390: Fix unwind in 32-bit _mcount
authorIlya Leoshkevich <iii@linux.ibm.com>
Fri, 10 Aug 2018 07:07:44 +0000 (09:07 +0200)
committerStefan Liebler <stli@linux.ibm.com>
Fri, 10 Aug 2018 07:07:44 +0000 (09:07 +0200)
* 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.

ChangeLog
sysdeps/s390/s390-32/s390-mcount.S

index c3a085e..bcbeb8c 100644 (file)
--- 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.
index 153777e..84f48a2 100644 (file)
@@ -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