S390: Add CFI rule in _dl_runtime_resolve[_vx] for unwinding.
authorStefan Liebler <stli@linux.vnet.ibm.com>
Mon, 11 Dec 2017 07:47:51 +0000 (08:47 +0100)
committerStefan Liebler <stli@linux.vnet.ibm.com>
Mon, 11 Dec 2017 07:47:51 +0000 (08:47 +0100)
commitdee943668fdf97e118fe14f7953486b934cbf9c4
tree486d68e7823f15f9031da4b49bfc3d8b284d336c
parentf648728cb17bcf043b6f750f360b6c8960c491fd
S390: Add CFI rule in _dl_runtime_resolve[_vx] for unwinding.

In _dl_runtime_resolve[_vx], unwinding fails after the new stack frame
is created as there is no CFI rule for r15. This is also observeable in
GDB: Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Therefore this patch is now storing r15 on stack and is using cfi_offset rule.
The stmg/lmg instruction is used to store/load r14 and r15 with one instruction.
On 64bit, the offsets of the fprs have moved to store r15 directly after r14.
On 31bit, the r14/r15 is now stored between the other gprs and fprs as the space
wasn't used.

ChangeLog:

* sysdeps/s390/s390-64/dl-trampoline.h (_dl_runtime_resolve):
Store r15 on stack and add cfi rule.
* sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_resolve):
Likewise.
ChangeLog
sysdeps/s390/s390-32/dl-trampoline.h
sysdeps/s390/s390-64/dl-trampoline.h