From 2005da2fe95c14229a737f2a5c5b931b8d62adee Mon Sep 17 00:00:00 2001 From: burnus Date: Mon, 9 Jan 2012 19:53:27 +0000 Subject: [PATCH 1/1] 2012-01-09 Harald Anlauf Tobias Burnus 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183030 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgfortran/ChangeLog | 9 +++++++ libgfortran/runtime/backtrace.c | 4 +-- libgfortran/runtime/compile_options.c | 50 ++++++++++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index c170cae8ef6..c399dbe53ca 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2012-01-09 Harald Anlauf + Tobias Burnus + + 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 * Makefile.am (libgfortran_la_LDFLAGS): Add -Wc,-shared-libgcc. diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c index e28bdcbc423..5ebd9721130 100644 --- a/libgfortran/runtime/backtrace.c +++ b/libgfortran/runtime/backtrace.c @@ -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 diff --git a/libgfortran/runtime/compile_options.c b/libgfortran/runtime/compile_options.c index 0c139a2d4ef..8038f07cb3e 100644 --- a/libgfortran/runtime/compile_options.c +++ b/libgfortran/runtime/compile_options.c @@ -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 -- 2.11.0