public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
From: "sean.anderson at seco dot com" <sourceware-bugzilla@sourceware.org>
To: gdb-prs@sourceware.org
Subject: [Bug gdb/18869] internal-error: inline_frame_this_id: Assertion `frame_id_p (*this_id)' failed.
Date: Mon, 21 Feb 2022 23:35:16 +0000	[thread overview]
Message-ID: <bug-18869-4717-64qPhWcog4@http.sourceware.org/bugzilla/> (raw)
In-Reply-To: <bug-18869-4717@http.sourceware.org/bugzilla/>

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.

      parent reply	other threads:[~2022-02-21 23:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-25 23:07 [Bug gdb/18869] New: " 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 [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-18869-4717-64qPhWcog4@http.sourceware.org/bugzilla/ \
    --to=sourceware-bugzilla@sourceware.org \
    --cc=gdb-prs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).