[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