Commit 3881a3de by Harald Anlauf Committed by Tobias Burnus

re PR fortran/51197 (Backtrace information less useful)

2012-01-09  Harald Anlauf  <anlauf@gmx.de>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/51197
        * runtime/backtrace.c (show_backtrace): Modify wording written
        before the backtrace.
        * runtime/compile_options.c (show_signal): New function.
        (backtrace_handler): Use it.


Co-Authored-By: Tobias Burnus <burnus@net-b.de>

From-SVN: r183030
parent 96db4121
2012-01-09 Harald Anlauf <anlauf@gmx.de>
Tobias Burnus <burnus@net-b.de>
PR fortran/51197
* runtime/backtrace.c (show_backtrace): Modify wording written
before the backtrace.
* runtime/compile_options.c (show_signal): New function.
(backtrace_handler): Use it.
2012-01-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2012-01-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* Makefile.am (libgfortran_la_LDFLAGS): Add -Wc,-shared-libgcc. * Makefile.am (libgfortran_la_LDFLAGS): Add -Wc,-shared-libgcc.
......
/* Copyright (C) 2006, 2007, 2009, 2011 Free Software Foundation, Inc. /* Copyright (C) 2006, 2007, 2009, 2011, 2012 Free Software Foundation, Inc.
Contributed by François-Xavier Coudert Contributed by François-Xavier Coudert
This file is part of the GNU Fortran runtime library (libgfortran). This file is part of the GNU Fortran runtime library (libgfortran).
...@@ -197,7 +197,7 @@ show_backtrace (void) ...@@ -197,7 +197,7 @@ show_backtrace (void)
state.frame_number = 0; state.frame_number = 0;
state.error = 0; state.error = 0;
estr_write ("\nA fatal error occurred! Backtrace for this error:\n"); estr_write ("\nBacktrace for this error:\n");
#if CAN_PIPE #if CAN_PIPE
......
/* Handling of compile-time options that influence the library. /* Handling of compile-time options that influence the library.
Copyright (C) 2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. Copyright (C) 2005, 2007, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of the GNU Fortran runtime library (libgfortran). This file is part of the GNU Fortran runtime library (libgfortran).
...@@ -32,6 +33,52 @@ compile_options_t compile_options; ...@@ -32,6 +33,52 @@ compile_options_t compile_options;
volatile sig_atomic_t fatal_error_in_progress = 0; volatile sig_atomic_t fatal_error_in_progress = 0;
/* Helper function for backtrace_handler to write information about the
received signal to stderr before actually giving the backtrace. */
static void
show_signal (int signum)
{
const char * name = NULL, * desc = NULL;
switch (signum)
{
#if defined(SIGSEGV)
case SIGSEGV:
name = "SIGSEGV";
desc = "Segmentation fault";
break;
#endif
#if defined(SIGBUS)
case SIGBUS:
name = "SIGBUS";
desc = "Bus error";
break;
#endif
#if defined(SIGILL)
case SIGILL:
name = "SIGILL";
desc = "Illegal instruction";
break;
#endif
#if defined(SIGFPE)
case SIGFPE:
name = "SIGFPE";
desc = "Floating-point exception";
break;
#endif
}
if (name)
st_printf ("\nProgram received signal %d (%s): %s.\n", signum, name, desc);
else
st_printf ("\nProgram received signal %d.\n", signum);
}
/* A signal handler to allow us to output a backtrace. */ /* A signal handler to allow us to output a backtrace. */
void void
backtrace_handler (int signum) backtrace_handler (int signum)
...@@ -43,6 +90,7 @@ backtrace_handler (int signum) ...@@ -43,6 +90,7 @@ backtrace_handler (int signum)
raise (signum); raise (signum);
fatal_error_in_progress = 1; fatal_error_in_progress = 1;
show_signal (signum);
show_backtrace(); show_backtrace();
/* Now reraise the signal. We reactivate the signal's /* Now reraise the signal. We reactivate the signal's
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment