* [Bug gdb/18869] internal-error: inline_frame_this_id: Assertion `frame_id_p (*this_id)' failed.
2015-08-25 23:07 [Bug gdb/18869] New: internal-error: inline_frame_this_id: Assertion `frame_id_p (*this_id)' failed luto at mit dot edu
2021-11-04 13:19 ` [Bug gdb/18869] " rohini at junelife dot com
@ 2022-02-21 23:35 ` sean.anderson at seco dot com
1 sibling, 0 replies; 3+ messages in thread
From: sean.anderson at seco dot com @ 2022-02-21 23:35 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=18869
Sean Anderson <sean.anderson at seco dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sean.anderson at seco dot com
--- Comment #12 from Sean Anderson <sean.anderson at seco dot com> ---
I ran into this today while debugging U-Boot on aarch64. The real stack is
gdb$ x/8ag $sp
0x1001de10: 0x1001de20 0x10000be4 <fsl_lsch2_early_init_f+12>
0x1001de20: 0x1001de30 0x100013d0 <board_early_init_f+12>
0x1001de30: 0x1001de40 0x10000db0 <board_init_f+32>
0x1001de40: 0x100000f0 <save_boot_params_ret+196> 0x10001124 <_main+36>
So the problem appears to occur with "artificial" frames. Here's what happens
when I try to get a backtrace:
gdb$ set debug frame
gdb$ tar ext :3333
Remote debugging using :3333
[frame] reinit_frame_cache: generation=4
[frame] reinit_frame_cache: generation=5
[frame] reinit_frame_cache: generation=6
[frame] reinit_frame_cache: generation=7
[frame] reinit_frame_cache: generation=8
[frame] reinit_frame_cache: generation=9
[frame] reinit_frame_cache: generation=10
[frame] frame_id_p: l={!stack,!code,!special} -> 0
[frame] frame_id_p: l={!stack,!code,!special} -> 0
[frame] frame_id_p: l={!stack,!code,!special} -> 0
[frame] create_sentinel_frame: ->
{level=-1,type=SENTINEL_FRAME,unwind=0x561f635e3466,pc=<unknown>,id={stack=<sentinel>,!code,special=0x0000000000000000},func=<unknown>}
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] frame_unwind_arch: next_frame=-1 -> aarch64
[frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<outer>,!code,special=0x0000000000000000} -> 0
[frame] get_prev_frame_raw: ->
{level=0,type=<unknown>,unwind=<unknown>,pc=<unknown>,id=<not
computed>,func=<unknown>}
[frame] get_prev_frame_always_1: exit
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=32(pc)
[frame] frame_unwind_register_value: -> register=32
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_pc: this_frame=-1 -> 0x10001440
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=<unknown>,unwind=<unknown>,pc=0x10001440,id=<not
computed>,func=<unknown>} // cached
[frame] get_prev_frame_always_1: exit
[frame] compute_frame_id: enter
[frame] compute_frame_id: fi=0
[frame] frame_unwind_find_by_frame: enter
[frame] frame_unwind_find_by_frame: this_frame=0
[frame] frame_unwind_try_unwinder: trying unwinder "dummy"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 tailcall"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "inline"
[frame] frame_unwind_try_unwinder: yes
[frame] frame_unwind_find_by_frame: exit
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=0
[frame] get_prev_frame_raw: ->
{level=1,type=<unknown>,unwind=<unknown>,pc=<unknown>,id=<not
computed>,func=<unknown>}
[frame] compute_frame_id: enter
[frame] compute_frame_id: fi=1
[frame] frame_unwind_find_by_frame: enter
[frame] frame_unwind_find_by_frame: this_frame=1
[frame] frame_unwind_arch: next_frame=0 -> aarch64
[frame] frame_unwind_try_unwinder: trying unwinder "dummy"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 tailcall"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "inline"
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=0, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=32(pc)
[frame] frame_unwind_register_value: -> register=32
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> register=32
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_pc: this_frame=0 -> 0x10001440
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "jit"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "(null)"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "aarch64 stub"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 signal"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "aarch64 prologue"
[frame] frame_unwind_try_unwinder: yes
[frame] frame_unwind_find_by_frame: exit
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=0, regnum=31(sp)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=31(sp)
[frame] frame_unwind_register_value: -> register=31
bytes=[10de011000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> register=31
bytes=[10de011000000000]
[frame] frame_unwind_register_value: exit
[frame] get_frame_func_if_available: this_frame=1 -> 0x10001410
[frame] frame_id_p: l={stack=0x1001de10,code=0x0000000010001410,!special}
-> 1
[frame] compute_frame_id: ->
{stack=0x1001de10,code=0x0000000010001410,!special}
[frame] compute_frame_id: exit
[frame] get_prev_frame_always_1: exit
[frame] frame_id_p: l={stack=0x1001de10,code=0x0000000010001410,!special} ->
1
[frame] frame_id_p:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] compute_frame_id: ->
{stack=0x1001de10,code=0x0000000010001434,!special,artificial=1}
[frame] compute_frame_id: exit
enable_devices_ns_access (ns_dev=<optimized out>, num=<optimized out>[frame]
frame_id_p: l={!stack,!code,!special} -> 0
) at board/freescale/common/ns_access.c:204
204 for (i = 0; i < num; i++)
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e32a4,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
gdb$ bt
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e3434,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e32a4,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
#0 enable_devices_ns_access (ns_dev=<optimized out>, num=<optimized
out>[frame] frame_id_p: l={!stack,!code,!special} -> 0
) at board/freescale/common/ns_access.c:204
[frame] get_prev_frame: enter
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=0
[frame] get_prev_frame_always_1: ->
{level=1,type=NORMAL_FRAME,unwind=0x561f635e3498,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001410,!special},func=0x10001410}
// cached
[frame] get_prev_frame_always_1: exit
[frame] get_prev_frame: exit
#1 enable_layerscape_ns_access ([frame] frame_id_p: l={!stack,!code,!special}
-> 0
) at board/freescale/common/ns_access.c:213
[frame] get_prev_frame: enter
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=1
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_arch: next_frame=1 -> aarch64
[frame] frame_unwind_register_value: frame=1, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=30(x30)
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=30(x30)
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] get_prev_frame: enter
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e336c,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
[frame] get_prev_frame: exit
[frame] frame_id_p:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 0
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] value_fetch_lazy_register: (frame=0, regnum=30(x30), ...) ->
register=30 bytes=[4014001000000000]
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> computed
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=0, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=32(pc)
[frame] frame_unwind_register_value: -> register=32
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> register=32
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] get_prev_frame_raw: ->
{level=2,type=<unknown>,unwind=<unknown>,pc=<unknown>,id=<not
computed>,func=<unknown>}
[frame] compute_frame_id: enter
[frame] compute_frame_id: fi=2
[frame] frame_unwind_find_by_frame: enter
[frame] frame_unwind_find_by_frame: this_frame=2
[frame] frame_unwind_try_unwinder: trying unwinder "dummy"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 tailcall"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "inline"
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=30(x30)
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1, regnum=30(x30)
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] get_prev_frame: enter
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e34fc,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
[frame] get_prev_frame: exit
[frame] frame_id_p:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 0
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] value_fetch_lazy_register: (frame=0, regnum=30(x30), ...)
-> register=30 bytes=[4014001000000000]
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> computed
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_pc: this_frame=1 -> 0x10001440
[frame] frame_unwind_try_unwinder: yes
[frame] frame_unwind_find_by_frame: exit
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=2
[frame] get_prev_frame_raw: ->
{level=3,type=<unknown>,unwind=<unknown>,pc=<unknown>,id=<not
computed>,func=<unknown>}
[frame] compute_frame_id: enter
[frame] compute_frame_id: fi=3
[frame] frame_unwind_find_by_frame: enter
[frame] frame_unwind_find_by_frame: this_frame=3
[frame] frame_unwind_arch: next_frame=2 -> aarch64
[frame] frame_unwind_try_unwinder: trying unwinder "dummy"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2
tailcall"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "inline"
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=2, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=32(pc)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=30(x30)
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=-1,
regnum=30(x30)
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_id_p:
l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] frame_id_eq:
l={stack=<sentinel>,!code,special=0x0000000000000000},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
[frame] get_prev_frame: enter
[frame] get_prev_frame_always_1: enter
[frame] get_prev_frame_always_1: this_frame=-1
[frame] get_prev_frame_always_1: ->
{level=0,type=INLINE_FRAME,unwind=0x561f635e33d0,pc=0x10001440,id={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},func=<unknown>}
// cached
[frame] get_prev_frame_always_1: exit
[frame] get_prev_frame: exit
[frame] frame_id_p:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=<sentinel>,!code,special=0x0000000000000000} -> 0
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1},
r={stack=0x1001de10,code=0x0000000010001434,!special,artificial=1} -> 1
[frame] value_fetch_lazy_register: (frame=0, regnum=30(x30),
...) -> register=30 bytes=[4014001000000000]
[frame] frame_unwind_register_value: -> register=30
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> computed
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> computed
bytes=[4014001000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_pc: this_frame=2 -> 0x10001440
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "jit"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "(null)"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "aarch64 stub"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 signal"
[frame] frame_unwind_try_unwinder: no
[frame] frame_unwind_try_unwinder: trying unwinder "aarch64
prologue"
[frame] frame_unwind_try_unwinder: yes
[frame] frame_unwind_find_by_frame: exit
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=2, regnum=31(sp)
[frame] frame_unwind_register_value: enter
[frame] frame_unwind_register_value: frame=1, regnum=31(sp)
[frame] frame_unwind_register_value: -> computed
bytes=[10de011000000000]
[frame] frame_unwind_register_value: exit
[frame] frame_unwind_register_value: -> computed
bytes=[10de011000000000]
[frame] frame_unwind_register_value: exit
[frame] get_frame_func_if_available: this_frame=3 -> 0x10001410
[frame] frame_id_p:
l={stack=0x1001de10,code=0x0000000010001410,!special} -> 1
[frame] compute_frame_id: ->
{stack=0x1001de10,code=0x0000000010001410,!special}
[frame] compute_frame_id: exit
[frame] frame_id_eq:
l={stack=0x1001de10,code=0x0000000010001410,!special},
r={stack=0x1001de10,code=0x0000000010001410,!special} -> 1
[frame] get_prev_frame_if_no_cycle: -> nullptr // this frame has same
ID
[frame] get_prev_frame_always_1: exit
[frame] frame_id_p: l={!stack,!code,!special} -> 0
inline-frame.c:173: internal-error: void inline_frame_this_id(frame_info*,
void**, frame_id*): Assertion `frame_id_p (*this_id)' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
This is a bug, please report it. For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.
Aborted (core dumped)
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 3+ messages in thread