Hi,
I am attempting to unwind from an optimized shared (non-stripped) library
compiled with debugging information. However I cannot unwind pass the second
entry on the call stack. Ideally I would like to unwind all the way back to
main and I understand libunwind has techniques it uses when and if the frame
pointers/dwarf information is unavailable and I want to make sure that I'm
using libunwind in such a way that gives it is the best possibility to use
these techniques. Here are some details:
Linux x86_64
Libunwind version 1.1
Library name: libsatlas.so
Leaf Symobol name: ATL_spKBmm (after this location unw_step() returns 0)
Actual stack (from gdb):
#0 0x00007ffff7851e00 in ATL_spKBmm () from /usr/local/atlas/lib/libsatlas.so
#1 0x00007ffff7917830 in ATL_smmJIK2 () from /usr/local/atlas/lib/libsatlas.so
#2 0x00007ffff79187ad in ATL_smmJIK () from /usr/local/atlas/lib/libsatlas.so
#3 0x00007ffff790fb7b in ATL_sgemm () from /usr/local/atlas/lib/libsatlas.so
#4 0x00007ffff769a831 in atl_f77wrap_sgemm_ () from
/usr/local/atlas/lib/libsatlas.so
#5 0x00007ffff7699a64 in sgemm_ () from /usr/local/atlas/lib/libsatlas.so
#6 0x00000000004008e5 in fa () at sgemm_port.f90:39
#7 0x000000000040091d in MAIN__ () at sgemm_port.f90:59
I've also attached debugging information from libunwind. This is the
information printed at the last attempt to unwind:
>_Ux86_64_step: (cursor=0x7fff8ec56d10, ip=0x00007f321ed00a1d,
>cfa=0x00007fff8ec57728)
>_Ux86_64_step: [RBP=0x7fff8ec571f8] = 0x4620 (cfa = 0x7fff8ec57728) -> 0x0
>_Ux86_64_step: NULL %rbp loc, returning 0
Thanks for any insight.
- Scott
>_Ux86_64_init_mem_validate: using msync to validate memory
>_Ux86_64_init_local: (cursor=0x7fff8ec56d10)
>_Ux86_64_step: (cursor=0x7fff8ec56d10, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec568e0)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 53f8, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f3528b8
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f29a249 cfa=0x7fff8ec568e0
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321f29a249 cfa=0x7fff8ec568e0
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec568e0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d10, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec57150)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 5448, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f352908
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f29a4a1 cfa=0x7fff8ec57150
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321f29a4a1 cfa=0x7fff8ec57150
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec57150
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d10, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57180)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 8c94, segbase =
>7f321e55763c, debug_frame_base = 0, fde_addr = 7f321e5602d0
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57180
format=1
>_Ux86_64_cache_frame: cache frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57180
format=1
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57180
format=1 addr=0x7fff8ec57180 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d10, ip=0x00007f321ed00a1d,
>cfa=0x00007fff8ec57728)
>_Ux86_64_step: [RBP=0x7fff8ec571f8] = 0x4620 (cfa = 0x7fff8ec57728) -> 0x0
>_Ux86_64_step: NULL %rbp loc, returning 0
>_Ux86_64_init_local: (cursor=0x7fff8ec56d90)
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec56960)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec56960
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec571d0)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec571d0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57200)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57200
format=1 addr=0x7fff8ec57200 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321ecb5336,
>cfa=0x00007fff8ec57788)
>_Ux86_64_step: [RBP=0x7fff8ec57278] = 0x360 (cfa = 0x7fff8ec57788) -> 0x0
>_Ux86_64_step: NULL %rbp loc, returning 0
>_Ux86_64_init_local: (cursor=0x7fff8ec56c10)
>_Ux86_64_step: (cursor=0x7fff8ec56c10, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec567e0)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec567e0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56c10, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec57050)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec57050
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56c10, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57080)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57080
format=1 addr=0x7fff8ec57080 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56c10, ip=0x00007f321eda65c4,
>cfa=0x00007fff8ec57630)
>_Ux86_64_step: [RBP=0x7fff8ec570f8] = 0x2a0daa0 (cfa = 0x7fff8ec57630) ->
>0x48537d80485300c0
>_Ux86_64_step: NULL %rbp loc, returning 0
>_Ux86_64_init_local: (cursor=0x7fff8ec56d90)
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec56960)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec56960
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec571d0)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec571d0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57200)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57200
format=1 addr=0x7fff8ec57200 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321ecb53ff,
>cfa=0x00007fff8ec57788)
>_Ux86_64_step: [RBP=0x7fff8ec57278] = 0x360 (cfa = 0x7fff8ec57788) -> 0x0
>_Ux86_64_step: NULL %rbp loc, returning 0
>_Ux86_64_init_local: (cursor=0x7fff8ec56d90)
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec56960)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec56960
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec571d0)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec571d0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57200)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57200
format=1 addr=0x7fff8ec57200 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56d90, ip=0x00007f321ecb54ff,
>cfa=0x00007fff8ec57788)
>_Ux86_64_step: [RBP=0x7fff8ec57278] = 0x360 (cfa = 0x7fff8ec57788) -> 0x0
>_Ux86_64_step: NULL %rbp loc, returning 0
>_Ux86_64_init_local: (cursor=0x7fff8ec56fd0)
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321f29a249,
>cfa=0x00007fff8ec56ba0)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a249 cfa=0x7fff8ec56ba0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321f29a4a1,
>cfa=0x00007fff8ec57410)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29a4a1 cfa=0x7fff8ec57410
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321e3ffff0,
>cfa=0x00007fff8ec57440)
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e3ffff0 cfa=0x7fff8ec57440
format=1 addr=0x7fff8ec57440 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 165c, segbase =
>7f321e1bdf5c, debug_frame_base = 0, fde_addr = 7f321e1bf5b8
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321e1b51f6 cfa=0x7fff8ec579e0
format=0
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321e1b51f6,
>cfa=0x00007fff8ec579e0)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 165c, segbase =
>7f321e1bdf5c, debug_frame_base = 0, fde_addr = 7f321e1bf5b8
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321e1b51f6 cfa=0x7fff8ec579e0
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321e1b51f6 cfa=0x7fff8ec579e0
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e1b51f6 cfa=0x7fff8ec579e0
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 2f10, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f3503d0
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f291c8f cfa=0x7fff8ec57a40
format=0
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321f291c8f,
>cfa=0x00007fff8ec57a40)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 2f10, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f3503d0
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f291c8f cfa=0x7fff8ec57a40
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321f291c8f cfa=0x7fff8ec57a40
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f291c8f cfa=0x7fff8ec57a40
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 5708, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f352bc8
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f29b2b4 cfa=0x7fff8ec57a50
format=0
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321f29b2b4,
>cfa=0x00007fff8ec57a50)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 5708, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f352bc8
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321f29b2b4 cfa=0x7fff8ec57a50
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321f29b2b4 cfa=0x7fff8ec57a50
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321f29b2b4 cfa=0x7fff8ec57a50
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 9e04, segbase =
>7f321e55763c, debug_frame_base = 0, fde_addr = 7f321e561440
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321e40547a cfa=0x7fff8ec57a90
format=0
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321e40547a,
>cfa=0x00007fff8ec57a90)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 9e04, segbase =
>7f321e55763c, debug_frame_base = 0, fde_addr = 7f321e561440
>_Ux86_64_fetch_frame: fetch frame ip=0x7f321e40547a cfa=0x7fff8ec57a90
format=0
>_Ux86_64_cache_frame: cache frame ip=0x7f321e40547a cfa=0x7fff8ec57a90
format=0
>_Ux86_64_reuse_frame: reuse frame ip=0x7f321e40547a cfa=0x7fff8ec57a90
format=0 addr=0x0 offset=+0
>_Ux86_64_step: returning 1
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 3478, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f350938
>_Ux86_64_step: (cursor=0x7fff8ec56fd0, ip=0x00007f321f291943,
>cfa=0x00007fff8ec57ad0)
>_Ux86_64_dwarf_search_unwind_table: e->fde_offset = 3478, segbase =
>7f321f34d4c0, debug_frame_base = 0, fde_addr = 7f321f350938
>_Ux86_64_step: [RBP=0x7fff8ec57aa0] = 0x7fff8ec57ad0 (cfa = 0x7fff8ec57ad0)
>-> 0x7fff8ec57bd0
>_Ux86_64_step: NULL %rbp loc, returning 0
_______________________________________________
Libunwind-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel