re PR fortran/51197 (Backtrace information less useful)
authorHarald Anlauf <anlauf@gmx.de>
Mon, 9 Jan 2012 19:53:27 +0000 (19:53 +0000)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 9 Jan 2012 19:53:27 +0000 (20:53 +0100)
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

libgfortran/ChangeLog
libgfortran/runtime/backtrace.c
libgfortran/runtime/compile_options.c

index c170cae..c399dbe 100644 (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.
index e28bdcb..5ebd972 100644 (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
 
index 0c139a2..8038f07 100644 (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