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
This commit is contained in:
Harald Anlauf 2012-01-09 19:53:27 +00:00 committed by Tobias Burnus
parent 96db412196
commit 3881a3dee8
3 changed files with 60 additions and 3 deletions

View File

@ -1,3 +1,12 @@
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>
* Makefile.am (libgfortran_la_LDFLAGS): Add -Wc,-shared-libgcc.

View File

@ -1,4 +1,4 @@
/* 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
This file is part of the GNU Fortran runtime library (libgfortran).
@ -197,7 +197,7 @@ show_backtrace (void)
state.frame_number = 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

View File

@ -1,5 +1,6 @@
/* 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).
@ -32,6 +33,52 @@ compile_options_t compile_options;
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. */
void
backtrace_handler (int signum)
@ -43,6 +90,7 @@ backtrace_handler (int signum)
raise (signum);
fatal_error_in_progress = 1;
show_signal (signum);
show_backtrace();
/* Now reraise the signal. We reactivate the signal's