This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] S390: Add cfi information for start routines in order to stop unwinding.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]