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



Janne Blomqvist <jb at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |ian at airs dot com



--- Comment #5 from Janne Blomqvist <jb at gcc dot gnu.org> 2012-11-26 16:43:16 
UTC ---

Bummer, I've hit a snag. Otherwise the patch works, but trying to do a symbolic

backtrace from a signal handler fails (which was sort of the entire idea of

using libbacktrace instead of forking addr2line). Ian, any idea what might go

wrong?



With the testcase below which is expected to fail due to a div-by-zero:



module test

contains

  subroutine c(num, denum, res)

    integer :: num, denum, res

    res = num / denum

  end subroutine c



  subroutine b(n, d, r)

    integer :: n, d, r

    call c(n, d, r)

  end subroutine b



  subroutine a(n, d, r)

    integer :: n, d, r

    call b(n, d, r)

  end subroutine a

end module test



program bt

  use test

  integer :: res

  call a(1, 0, res)

  print *, res

end program bt



compiled with "-g" the result is



$ ./bt2.g 



Program received signal SIGFPE: Floating-point exception - erroneous arithmetic

operation.



Backtrace for this error:



Program received signal SIGSEGV: Segmentation fault - invalid memory reference.



Backtrace for this error:

Segmentation fault (core dumped)



backtrace via gdb:



(gdb) r

Starting program:

/home/janne/src/gfortran/my-patches/pr54572-libbacktrace/bt2.g 



Program received signal SIGFPE, Arithmetic exception.

0x000000000040086b in __test_MOD_c ()

(gdb) c

Continuing.



Program received signal SIGFPE: Floating-point exception - erroneous arithmetic

operation.



Backtrace for this error:



Program received signal SIGSEGV, Segmentation fault.

0x00007ffff7bb2a1c in read_uint32 () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

(gdb) bt

#0  0x00007ffff7bb2a1c in read_uint32 () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#1  0x00007ffff7bb53be in backtrace_dwarf_add () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#2  0x00007ffff7bb72a7 in elf_add () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#3  0x00007ffff7bb7696 in backtrace_initialize () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#4  0x00007ffff7bb630d in fileline_initialize () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#5  0x00007ffff7bb6427 in backtrace_pcinfo () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#6  0x00007ffff7bb6831 in unwind () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#7  0x00007ffff75b9ec9 in _Unwind_Backtrace () from

/home/janne/src/gfortran/trunk/install/lib64/libgcc_s.so.1

#8  0x00007ffff7bb6885 in backtrace_full () from

/home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3

#9  0x00007ffff7ad527e in _gfortrani_show_backtrace () at

../../../trunk-git/libgfortran/runtime/backtrace.c:92

#10 0x00007ffff7ad5888 in _gfortrani_backtrace_handler ()

    at ../../../trunk-git/libgfortran/runtime/compile_options.c:129

#11 <signal handler called>

#12 0x000000000040086b in __test_MOD_c ()

#13 0x0000000000400848 in __test_MOD_b ()

#14 0x000000000040081b in __test_MOD_a ()

#15 0x0000000000400898 in MAIN__ ()

#16 0x0000000000400930 in main ()

#17 0x00007ffff6fd176d in __libc_start_main (main=0x4008fc <main>, argc=1,

ubp_av=0x7fffffffd718, init=<optimized out>, 

    fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd708)

at libc-start.c:226

#18 0x0000000000400709 in _start ()





For comparison, if I compile the testcase without "-g" then it works as

expected:



$ ./bt2



Program received signal SIGFPE: Floating-point exception - erroneous arithmetic

operation.



Backtrace for this error:

0x7fcf58e202a0

0x7fcf58e20887

0x7fcf5833149f

0x40086b

0x400847

0x40081a

0x400897

0x40092f

0x7fcf5831c76c

0x400708

Floating point exception (core dumped)

Reply via email to