Message ID | ml71gu$et2$1@ger.gmane.org |
---|---|
State | New |
Headers | show |
On 06/09/2015 05:42 PM, Stefan Liebler wrote: > 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?)" Is it possible to extract a test case from the Go program, by calling makecontext and backtrace in the same way to Go run time does? I think this would be a useful addition to the glibc test suite.
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S index e1f9347..8d36ea2 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S @@ -17,6 +17,14 @@ #include <sysdep.h> +/* We do not want .eh_frame info for __makecontext_ret to stop unwinding + if backtrace() was called within a context created by makecontext. + (there is also no .eh_frame info for _start or thread_start) */ +#undef cfi_startproc +#define cfi_startproc +#undef cfi_endproc +#define cfi_endproc + ENTRY(__makecontext_ret) basr %r14,%r7 ltr %r8,%r8 /* Check whether uc_link is 0. */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S index 11a3cd3..64619f1 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S @@ -17,6 +17,14 @@ #include <sysdep.h> +/* We do not want .eh_frame info for __makecontext_ret to stop unwinding + if backtrace() was called within a context created by makecontext. + (there is also no .eh_frame info for _start or thread_start) */ +#undef cfi_startproc +#define cfi_startproc +#undef cfi_endproc +#define cfi_endproc + ENTRY(__makecontext_ret) basr %r14,%r7 ltgr %r8,%r8 /* Check whether uc_link is 0. */