[PATCH] S390: Add cfi information for start routines in order to stop unwinding.
Stefan Liebler
stli@linux.vnet.ibm.com
Tue Nov 21 07:48:00 GMT 2017
On 11/14/2017 10:52 AM, Stefan Liebler wrote:
> Hi,
>
> 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.
>
> Bye
> Stefan
>
> 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.
Committed
More information about the Libc-alpha
mailing list