From: Simon Marchi Date: Mon, 20 Jan 2020 00:47:49 +0000 (-0500) Subject: sim: don't rely on inferior_ptid in gdbsim_target::wait X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cf1d9e092f871df3b34a58cfcde915c689ac9067;p=binutils-gdb.git sim: don't rely on inferior_ptid in gdbsim_target::wait When running a program with the simulator target, I get: /home/simark/src/binutils-gdb/gdb/inferior.c:279: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed. This can be reproduced by building a GDB for --target=arm-none-gnueabi, and running with $ ./gdb -nx --data-directory=data-directory a.out -ex "target sim" -ex load -ex "b main" -ex r Where a.out is any program with a main. The problem is that gdbsim_target::wait assumes that inferior_ptid has the value of the thread it wants to report an event for. Actually, it's the target's responsibility to come up with the ptid of the thread the event is for. In the sim target, that ptid is stored in sim_inferior_data::remote_sim_ptid, so return that instead of inferior_ptid. ChangeLog: * remote-sim.c (gdbsim_target::wait): Return sim_data->remote_sim_ptid instead of inferior_ptid. --- diff --git a/ChangeLog b/ChangeLog index e75c8c249c9..582d1f27704 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2020-01-19 Simon Marchi + + * remote-sim.c (gdbsim_target::wait): Return + sim_data->remote_sim_ptid instead of inferior_ptid. + 2020-01-18 Nick Clifton Binutils 2.34 branch created. diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c index ac3b4d3a580..caa94464e1e 100644 --- a/gdb/remote-sim.c +++ b/gdb/remote-sim.c @@ -1022,7 +1022,7 @@ gdbsim_target::wait (ptid_t ptid, struct target_waitstatus *status, int options) break; } - return inferior_ptid; + return sim_data->remote_sim_ptid; } /* Get ready to modify the registers array. On machines which store