From 8beba15d536aa5c89e9e55e4c497c0bcd10cb67c Mon Sep 17 00:00:00 2001 From: Stefan Liebler Date: Tue, 21 Nov 2017 08:45:28 +0100 Subject: S390: Add cfi information for start routines in order to stop unwinding. GDB failed to detect the outermost frame while showing the backtrace within a thread: Backtrace stopped: previous frame identical to this frame (corrupt stack?) Before this patch, the start routines like thread_start had no cfi information. GDB is then using the prologue unwinder if no cfi information is available. This unwinder tries to unwind r15 and stops e.g. if r15 was updated or on some jump-instructions. On older glibc-versions (before commit "Remove cached PID/TID in clone" c579f48edba88380635ab98cb612030e3ed8691e), the thread_start function used such a jump-instruction and GDB did not fail with an error. This patch adds cfi information for _start, thread_start and __makecontext_ret and marks r14 as undefined which marks the frame as outermost frame and GDB stops the backtrace. Also tested different gcc versions in order to test _Unwind_Backtrace() in libgcc as this is used by backtrace() in glibc. ChangeLog: * sysdeps/s390/s390-64/start.S (_start): Add cfi information for r14. * sysdeps/s390/s390-32/start.S: (_start): Likewise * sysdeps/unix/sysv/linux/s390/s390-64/clone.S (thread_start): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/clone.S (thread_start): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S (__makecontext_ret): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S (__makecontext_ret): Likewise. --- ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'ChangeLog') diff --git a/ChangeLog b/ChangeLog index ca6024c35c..f9e2e18e50 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2017-11-21 Stefan Liebler + + * sysdeps/s390/s390-64/start.S (_start): Add cfi information for r14. + * sysdeps/s390/s390-32/start.S (_start): Likewise + * sysdeps/unix/sysv/linux/s390/s390-64/clone.S + (thread_start): Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/clone.S + (thread_start): Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S + (__makecontext_ret): Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S + (__makecontext_ret): Likewise. + 2017-11-21 Stefan Liebler * include/wchar.h (__wcsnlen, __wcscat, __wcsncpy, __wcpncpy, -- cgit 1.4.1