[PATCH][BZ #18508] S390: Fix "backtrace() returns infinitely deep stack frames with makecontext()".
Stefan Liebler
stli@linux.vnet.ibm.com
Tue Jun 9 15:48:00 GMT 2015
Hi,
On s390/s390x backtrace(buffer, size) returns the series of called
functions until "makecontext_ret" and additional entries (up to "size")
with "makecontext_ret".
GDB-backtrace is also warning: "Backtrace stopped: previous frame
identical to this frame (corrupt stack?)"
To reproduce this scenario you have to setup a new context with
makecontext() and activate it with setcontext(). See e.g. cf() function
in testcase stdlib/tst-makecontext.c.
Or see bug in libgo "Bug 66303 - runtime.Caller() returns infinitely
deep stack frames on s390x "
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66303).
This patch omits the cfi_startproc/cfi_endproc directives in ENTRY/END
macro of __makecontext_ret. Thus no frame information is generated in
.eh_frame and backtrace stops after __makecontext_ret. There is also no
.eh_frame info for _start or thread_start functions.
Ok to commit?
Bye
Stefan
---
2015-06-09 Stefan Liebler <stli@linux.vnet.ibm.com>
[BZ #18508]
* sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
(__makecontext_ret): Omit cfi_startproc and cfi_endproc.
* sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S:
Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20150609_backtrace_makecontext.patch
Type: text/x-patch
Size: 1452 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20150609/bdc802cb/attachment.bin>
More information about the Libc-alpha
mailing list