On Tue, Nov 01, 2011 at 08:23:56PM +0200, Janne Blomqvist wrote:
> Hi,
> 
> the attached patch changes the backtracing functionality, which is
> used to print a stack trace before aborting when something goes
> belly-up, to use the stack unwinding functionality provided by libgcc
> instead of using the glibc backtrace_symbols and backtrace_symbols_fd
> functions, or the "pstack" utility which is available on some systems
> (Solaris?). There are some nice benefits of this:
> 
> - It should work on all targets, not only those which use glibc or pstack.
> 
> - It gets the correct line numbers, whereas the backtrace_symbols_fd
> output was usually (but not always) offset by one. This is probably
> related to the use of _Unwind_GetIPInfo and in some cases decrementing
> the IP.
> 
> - Based on some googling, it's a bit unclear whether backtrace()
> and/or backtrace_symbols_fd() actually are async-signal-safe due to
> usage of dlsym/dladdr and such.
> 
> It still uses addr2line if available to print out function and file
> names and line numbers. If addr2line is not found on the path during
> program startup, it resorts to printing out the addresses only.
> 
> Regtested on x86_64-unknown-linux-gnu, Ok for trunk?
> 
> 2011-11-01  Janne Blomqvist  <j...@gcc.gnu.org>
> 
>       PR fortran/46686
>       * configure.ac: Don't check execinfo.h, backtrace,
>       backtrace_symbols_fd. Check execve instead of execvp. Call
>       GCC_CHECK_UNWIND_GETIPINFO.
>       * runtime/backtrace.c: Don't include unused headers, include
>       limits.h and unwind.h.
>       (CAN_FORK): Check execve instead of execvp.
>       (GLIBC_BACKTRACE): Remove.
>       (bt_header): Conform to gdb backtrace format.
>       (struct bt_state): New struct.
>       (trace_function): New function.
>       (show_backtrace): Use _Unwind_Backtrace from libgcc instead of
>       glibc backtrace functions.

OK.

-- 
Steve

Reply via email to