Re: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed

Simon Marchi <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 2020-02-06 1:09 p.m., Maxim Blinov wrote:
> Hi all, I have a problem running GDB in simulator mode (CGEN) for m32r and avr.
> 
> The problem in both cases seems to be to do with the following: CGEN will
> set the inferior_ptid.m_pid to 42000 (hardcoded arbitrary value). However,
> at some point, when I hit 'r' to run all, the "switch_to_no_thread()" function
> will set "inferior_ptid = null_ptid", and at some point later GDB will crash
> (see below).
> 
> Version numbers are at the bottom of email.
> 
> I can pinpoint the place at which inferior_ptid.m_pid changes from 42000 to 0,
> by running avr-gdb under my workstation-gdb, like so (the "avr-gdb" and
> "workstation-gdb" are my own prefixes, just to differentiate.):
> 
> shell-window-1$ avr-gdb hello
> (avr-gdb)
> shell-window-2$ gdb -p <the avr-gdb pid>
> (workstation-gdb)
> (workstation-gdb) watch inferior_ptid.m_pid
> (workstation-gdb) condition 1 inferior_ptid.m_pid != 42000
> (workstation-gdb) c
> (avr-gdb) target sim
> (avr-gdb) load
> (avr-gdb) info files
> Symbols from "/home/maxim/dev/ovl/avr/test-arena/hello".
> Local exec file:
>     `/home/maxim/dev/ovl/avr/test-arena/hello', file type elf32-avr.
>     Entry point: 0x0
>     0x00800100 - 0x0080010e is .data
>     0x00000000 - 0x000001b4 is .text
>     0x0080010e - 0x00800114 is .bss
> (avr-gdb) b *0x0
> (avr-gdb) r
> (workstation-gdb)
> Thread 1 "avr-gdb" hit Hardware watchpoint 2: inferior_ptid.m_pid
> 
> Old value = 42000
> New value = 0
> 0x000055f3c41229e5 in switch_to_no_thread ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/thread.c:1331
> 1331      inferior_ptid = null_ptid;
> (workstation-gdb) bt
> #0  0x000055f3c41229e5 in switch_to_no_thread ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/thread.c:1331
> #1  0x000055f3c3efae59 in switch_to_inferior_no_thread (inf=0x55f3c4d48240)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c:623
> #2  0x000055f3c3f038c4 in commit_resume_all_targets ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infrun.c:2880
> #3  0x000055f3c3f0462e in proceed (addr=0, siggnal=GDB_SIGNAL_0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infrun.c:3183
> #4  0x000055f3c3ef1c78 in run_command_1 (args=0x0, from_tty=1,
>     run_how=RUN_NORMAL)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infcmd.c:678
> #5  0x000055f3c3ef1d45 in run_command (args=0x0, from_tty=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infcmd.c:688
> #6  0x000055f3c3d59a24 in do_const_cfunc (c=0x55f3c4e24450, args=0x0,
>     from_tty=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/cli/cli-decode.c:107
> #7  0x000055f3c3d5cf43 in cmd_func (cmd=0x55f3c4e24450, args=0x0, from_tty=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/cli/cli-decode.c:1952
> #8  0x000055f3c412a254 in execute_command (p=0x55f3c4d0da21 "", from_tty=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/top.c:653
> #9  0x000055f3c3e94151 in command_handler (command=0x55f3c4d0da20 "")
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:587
> #10 0x000055f3c3e945cb in command_line_handler (rl=...)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:772
> #11 0x000055f3c3e938c5 in gdb_rl_callback_handler (rl=0x55f3c4edca80 "r")
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:218
> #12 0x000055f3c41f9d39 in rl_callback_read_char ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./readline/readline/callback.c:281
> #13 0x000055f3c3e936ed in gdb_rl_callback_read_char_wrapper_noexcept ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:176
> #14 0x000055f3c3e93797 in gdb_rl_callback_read_char_wrapper (
>     client_data=0x55f3c4d0d770)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:193
> #15 0x000055f3c3e93fe3 in stdin_event_handler (error=0,
>     client_data=0x55f3c4d0d770)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-top.c:515
> #16 0x000055f3c3e91bfe in handle_file_event (file_ptr=0x55f3c4ec93c0,
>     ready_mask=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:731
> #17 0x000055f3c3e921c7 in gdb_wait_for_event (block=1)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:857
> #18 0x000055f3c3e90fcd in gdb_do_one_event ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:346
> #19 0x000055f3c3e90ff7 in start_event_loop ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:370
> #20 0x000055f3c3f507b0 in captured_command_loop ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:360
> #21 0x000055f3c3f520ad in captured_main (data=0x7fff597e8340)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:1203
> #22 0x000055f3c3f52113 in gdb_main (args=0x7fff597e8340)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:1218
> #23 0x000055f3c3c71cc3 in main (argc=2, argv=0x7fff597e8448)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/gdb.c:32
> (workstation-gdb) c
> 
> ...
> At this point, I hit the hardware watchpoint 2 more times. I'm not sure if thats
> significant, but its just the same "changed from 42000 to 0".
> ...
> 
> (avr-gdb)
> Starting program: /home/maxim/dev/ovl/avr/test-arena/hello
> /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c:279:
> internal-error: inferior* find_inferior_pid(process_stratum_target*,
> int): Assertion `pid != 0' failed.
> A problem internal to GDB has been detected,
> further debugging may prove unreliable.
> Quit this debugging session? (y or n)
> 
> 
> And thats that. I originally did this for m32r, but when that failed, I went
> to avr but has exactly the same problem.
> 
> 
> Here is the coredump backtrace for avr-gdb:
> 
> ```
> #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
> #1  0x00007f404663d801 in __GI_abort () at abort.c:79
> #2  0x000055cb48885d69 in dump_core ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/utils.c:203
> #3  0x000055cb4888630e in internal_vproblem(internal_problem *, const
> char *, int, const char *, typedef __va_list_tag __va_list_tag *) (
>     problem=0x55cb48f27660 <internal_error_problem>,
>     file=0x55cb48a85738 "/home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x55cb48a856ab "%s: Assertion `%s' failed.",
> ap=0x7fff97d46a70)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/utils.c:413
> #4  0x000055cb488863f3 in internal_verror (
>     file=0x55cb48a85738 "/home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x55cb48a856ab "%s: Assertion `%s' failed.",
> ap=0x7fff97d46a70)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/utils.c:438
> #5  0x000055cb489cf758 in internal_error (
>     file=0x55cb48a85738 "/home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x55cb48a856ab "%s: Assertion `%s' failed.")
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdbsupport/errors.c:55
> #6  0x000055cb4860b7c3 in find_inferior_pid (targ=0x55cb48f26de0
> <gdbsim_ops>, pid=0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c:279
> #7  0x000055cb4860b88a in find_inferior_ptid (targ=0x55cb48f26de0 <gdbsim_ops>,
>     ptid=...) at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inferior.c:293
> #8  0x000055cb48831d29 in find_thread_ptid (targ=0x55cb48f26de0
> <gdbsim_ops>, ptid=...)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/thread.c:527
> #9  0x000055cb4861b629 in handle_inferior_event (ecs=0x7fff97d46ec0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infrun.c:5062
> #10 0x000055cb48618ab9 in fetch_inferior_event (client_data=0x0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infrun.c:4002
> #11 0x000055cb485fcb43 in inferior_event_handler (event_type=INF_REG_EVENT,
>     client_data=0x0) at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/inf-loop.c:43
> #12 0x000055cb48624b9c in infrun_async_inferior_event_handler (data=0x0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/infrun.c:9317
> #13 0x000055cb485a468e in check_async_event_handlers ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:1062
> #14 0x000055cb485a2f5f in gdb_do_one_event ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:325
> #15 0x000055cb485a2ff7 in start_event_loop ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/event-loop.c:370
> #16 0x000055cb486627b0 in captured_command_loop ()
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:360
> #17 0x000055cb486640ad in captured_main (data=0x7fff97d470e0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:1203
> #18 0x000055cb48664113 in gdb_main (args=0x7fff97d470e0)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/main.c:1218
> #19 0x000055cb48383cc3 in main (argc=2, argv=0x7fff97d471e8)
>     at /home/maxim/dev/ovl/avr/binutils-gdb/./gdb/gdb.c:32
> ```
> 
> And here is the coredump backtrace for m32r-unknown-elf-gdb:
> 
> ```
> #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
> #1  0x00007f5562123801 in __GI_abort () at abort.c:79
> #2  0x00005599a200c3a7 in dump_core ()
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/utils.c:203
> #3  0x00005599a200c94c in internal_vproblem(internal_problem *, const
> char *, int, const char *, typedef __va_list_tag __va_list_tag *) (
>     problem=0x5599a2744740 <internal_error_problem>,
>     file=0x5599a2280758
> "/home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x5599a22806cb "%s: Assertion `%s' failed.",
> ap=0x7ffc2d752ff0)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/utils.c:413
> #4  0x00005599a200ca31 in internal_verror (
>     file=0x5599a2280758
> "/home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x5599a22806cb "%s: Assertion `%s' failed.",
> ap=0x7ffc2d752ff0)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/utils.c:438
> #5  0x00005599a21bf5a0 in internal_error (
>     file=0x5599a2280758
> "/home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inferior.c",
>     line=279, fmt=0x5599a22806cb "%s: Assertion `%s' failed.")
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdbsupport/errors.c:55
> #6  0x00005599a1d906a7 in find_inferior_pid (targ=0x5599a2743ec0
> <gdbsim_ops>, pid=0)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inferior.c:279
> #7  0x00005599a1d9076e in find_inferior_ptid (targ=0x5599a2743ec0 <gdbsim_ops>,
>     ptid=...) at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inferior.c:293
> #8  0x00005599a1fb8367 in find_thread_ptid (targ=0x5599a2743ec0
> <gdbsim_ops>, ptid=...)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/thread.c:527
> #9  0x00005599a1da050d in handle_inferior_event (ecs=0x7ffc2d753440)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/infrun.c:5062
> #10 0x00005599a1d9d99d in fetch_inferior_event (client_data=0x0)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/infrun.c:4002
> #11 0x00005599a1d81a27 in inferior_event_handler (event_type=INF_REG_EVENT,
>     client_data=0x0) at
> /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/inf-loop.c:43
> #12 0x00005599a1da9a80 in infrun_async_inferior_event_handler (data=0x0)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/infrun.c:9317
> #13 0x00005599a1d29572 in check_async_event_handlers ()
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/event-loop.c:1062
> #14 0x00005599a1d27e43 in gdb_do_one_event ()
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/event-loop.c:325
> #15 0x00005599a1d27edb in start_event_loop ()
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/event-loop.c:370
> #16 0x00005599a1de8dee in captured_command_loop ()
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/main.c:360
> #17 0x00005599a1dea6eb in captured_main (data=0x7ffc2d753660)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/main.c:1203
> #18 0x00005599a1dea751 in gdb_main (args=0x7ffc2d753660)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/main.c:1218
> #19 0x00005599a1b0b413 in main (argc=2, argv=0x7ffc2d753768)
>     at /home/maxim/dev/ovl/m32r/binutils-gdb/./gdb/gdb.c:32
> ```
> 
> I saw this discussion that seemed to have a very similar problem, here:
> https://sourceware.org/ml/gdb-patches/2019-10/msg00512.html
> 
> The patch doesn't apply anymore, but even when I did try adding an equivalent
> statement, it still didn't work (I only tried with AVR though).
> 
> Version numbers:
> 
> maxim@fujitsu:~/dev/ovl/avr/test-arena$ avr-gdb --version
> GNU gdb (GDB) 10.0.50.20200201-git
> Copyright (C) 2020 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> maxim@fujitsu:~/dev/ovl/avr/test-arena$ avr-as --version
> GNU assembler (GNU Binutils) 2.34
> Copyright (C) 2020 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public Licence version 3 or later.
> This program has absolutely no warranty.
> This assembler was configured for a target of `avr'.
> 
> Maxim
> 

Hi Maxim,

I didn't read your backtraces in details, but this looks very much like what
was fixed by this patch (present in master):

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cf1d9e092f871df3b34a58cfcde915c689ac9067

Can you check if you have it?

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.