Dear Janne,
- The integer values for the signal numbers are not standardized,
hence printing them might give the user a false impression that these
numbers convey some information beyond whichever SIG* macro they map
to on that particular target.
- It doesn't test all the signals which are actually handled, see
compile_options.c:set_options(). Also, as a minor point, there's no
need to have #ifdef tests for the C89 signals, again see
set_options().
How about the attached version? The description is based on IEEE Std
1003.1:2003, though I additionally left "segmentation fault" and
"floating-point exception" as those names are presumably better known
that the long description and as SIGSEGV/SIGFPE. "Bus error" is also
somewhat known, but SIGBUS should be sufficient.
Tobias
2012-01-09 Tobias Burnus <bur...@net-b.de>
PR fortran/51197
* runtime/compile_options.c (show_signal): List
more signals.
Index: libgfortran/runtime/compile_options.c
===================================================================
--- libgfortran/runtime/compile_options.c (Revision 183034)
+++ libgfortran/runtime/compile_options.c (Arbeitskopie)
@@ -43,37 +43,72 @@ show_signal (int signum)
switch (signum)
{
-#if defined(SIGSEGV)
+#if defined(SIGQUIT)
+ case SIGQUIT:
+ name = "SIGQUIT";
+ desc = "Terminal quit signal";
+ break;
+#endif
+
+ /* The following 4 signals are defined by C89. */
+ case SIGILL:
+ name = "SIGILL";
+ desc = "Illegal instruction";
+ break;
+
+ case SIGABRT:
+ name = "SIGABRT";
+ desc = "Process abort signal";
+ break;
+
+ case SIGFPE:
+ name = "SIGFPE";
+ desc = "Floating-point exception - erroneous arithmetic operation";
+ break;
+
case SIGSEGV:
name = "SIGSEGV";
- desc = "Segmentation fault";
+ desc = "Segmentation fault - invalid memory reference";
break;
-#endif
#if defined(SIGBUS)
case SIGBUS:
name = "SIGBUS";
- desc = "Bus error";
+ desc = "Access to an undefined portion of a memory object";
break;
#endif
-#if defined(SIGILL)
- case SIGILL:
- name = "SIGILL";
- desc = "Illegal instruction";
+#if defined(SIGSYS)
+ case SIGSYS:
+ name = "SIGSYS";
+ desc = "Bad system call";
break;
#endif
-#if defined(SIGFPE)
- case SIGFPE:
- name = "SIGFPE";
- desc = "Floating-point exception";
+#if defined(SIGTRAP)
+ case SIGTRAP:
+ name = "SIGTRAP";
+ desc = "Trace/breakpoint trap";
break;
#endif
+
+#if defined(SIGXCPU)
+ case SIGXCPU:
+ name = "SIGXCPU";
+ desc = "CPU time limit exceeded";
+ break;
+#endif
+
+#if defined(SIGXFSZ)
+ case SIGXFSZ:
+ name = "SIGXFSZ";
+ desc = "File size limit exceeded";
+ break;
+#endif
}
if (name)
- st_printf ("\nProgram received signal %d (%s): %s.\n", signum, name, desc);
+ st_printf ("\nProgram received signal %s: %s.\n", name, desc);
else
st_printf ("\nProgram received signal %d.\n", signum);
}