[Bug fortran/31189] Support backtracing for non-library errors

burnus at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue May 15 16:32:00 GMT 2007



------- Comment #3 from burnus at gcc dot gnu dot org  2007-05-15 17:31 -------
Created an attachment (id=13558)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13558&action=view)
Patch

> Since PR 30498 is fixed, gfortran supports backtraces. However, they are only
> displayed for library errors not for, e.g., SEGV or signalling IEEE signals.
> 
> A support for these can be found embedded in the patch at
> http://gcc.gnu.org/ml/gcc-patches/2007-02/msg00747.html

I extracted the non-committed parts of that patch.

> Confirmed. We have to be careful how that interacts with user-installed signal
> handlers, but it's otherwise a good idea.

I think this should be no problem. They are set very early before any user
command has been set. If a user uses signal, he can install a user handler
instead which overwrites the handler in libgfortran, which is probably what the
user wants.

This covers: SIGSEGV, SIGILL, SIGFPE and SIGBUS

Examples:
a) uninitialized integer pointer:  integer, pointer :: i; i = 5
  Program received signal SIGILL: Segmentation fault
  Backtrace for this error:
    + /lib64/libc.so.6 [0x2af232dbf410]
    + function _fini (0x40084B)
b) Division by zero with -ffpe-trap=zero
  Program received signal SIGFPE: Segmentation fault
  Backtrace for this error:
    + /lib64/libc.so.6 [0x2b20b66d3410]
    + in the main program
      at line 5 of file x.f90
    + /lib64/libc.so.6(__libc_start_main+0xf4) [0x2b20b66c0944]

For (a) the backtrace using gdb is similarly useless.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31189



More information about the Gcc-bugs mailing list