diff options
author | Pedro Alves <palves@redhat.com> | 2018-11-22 16:09:12 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-11-22 16:09:12 +0000 |
commit | 151bb4a5059e73934f7bc61318efaaffe0c91b81 (patch) | |
tree | 1fc2e95d8a6fe37949f6ee0d3893aaaca32474b7 | |
parent | 79a9468c702f7087b5bbff2cfd2210a94e7c5fa4 (diff) | |
download | gdb-151bb4a5059e73934f7bc61318efaaffe0c91b81.zip gdb-151bb4a5059e73934f7bc61318efaaffe0c91b81.tar.gz gdb-151bb4a5059e73934f7bc61318efaaffe0c91b81.tar.bz2 |
Avoid find_thread_ptid with null_ptid
With a following patch, find_thread_ptid will first find the inferior
for the passed-in ptid, using find_inferior_pid, and then look for the
thread in that inferior's thread list. If we pass down null_ptid to
find_thread_ptid then that means we'll end up passing 0 to
find_inferior_pid, which hits this assertion:
> struct inferior *
> find_inferior_pid (int pid)
> {
> struct inferior *inf;
>
> /* Looking for inferior pid == 0 is always wrong, and indicative of
> a bug somewhere else. There may be more than one with pid == 0,
> for instance. */
> gdb_assert (pid != 0);
This patch prepares for the change, by avoiding passing down null_ptid
to find_thread_ptid or to functions that naturally use it, such as the
target_pid_to_str call in inferior.c:add_inferior. In that latter
case, the patch changes GDB output,
from:
(gdb) add-inferior
[New inferior 2 (process 0)]
to:
(gdb) add-inferior
[New inferior 2]
which seems like a good change to me. It might not even make sense to
talk about "process" for the current target, for example.
The python_on_normal_stop change ends up avoiding looking up the
same thread twice (inferior_thread also does a look up).
gdb/ChangeLog:
2018-11-22 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_on_user_selected_context_changed): Use
inferior_thread instead of find_thread_ptid, and only when
inferior_ptid is not null_ptid.
* inferior.c (add_inferior): Don't include target_pid_to_str
output when the inferior is not started.
* python/py-inferior.c (python_on_normal_stop): Don't use
find_thread_ptid.
(tui_on_user_selected_context_changed): Use inferior_thread
instead of find_thread_ptid, and only when inferior_ptid is not
null_ptid.
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/cli/cli-interp.c | 4 | ||||
-rw-r--r-- | gdb/inferior.c | 11 | ||||
-rw-r--r-- | gdb/python/py-inferior.c | 4 | ||||
-rw-r--r-- | gdb/tui/tui-interp.c | 4 |
5 files changed, 25 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d562a4b..a6738bd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2018-11-22 Pedro Alves <palves@redhat.com> + + * cli/cli-interp.c (cli_on_user_selected_context_changed): Use + inferior_thread instead of find_thread_ptid, and only when + inferior_ptid is not null_ptid. + * inferior.c (add_inferior): Don't include target_pid_to_str + output when the inferior is not started. + * python/py-inferior.c (python_on_normal_stop): Don't use + find_thread_ptid. + (tui_on_user_selected_context_changed): Use inferior_thread + instead of find_thread_ptid, and only when inferior_ptid is not + null_ptid. + 2018-11-21 Benno Fünfstück <benno.fuenfstueck@gmail.com> PR python/23714 diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 75d8093..b527fc7 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -257,13 +257,11 @@ cli_on_command_error (void) static void cli_on_user_selected_context_changed (user_selected_what selection) { - struct thread_info *tp; - /* This event is suppressed. */ if (cli_suppress_notification.user_selected_context) return; - tp = find_thread_ptid (inferior_ptid); + thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : NULL; SWITCH_THRU_ALL_UIS () { diff --git a/gdb/inferior.c b/gdb/inferior.c index 17d28c4..394386a 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -122,9 +122,14 @@ add_inferior (int pid) struct inferior *inf = add_inferior_silent (pid); if (print_inferior_events) - printf_unfiltered (_("[New inferior %d (%s)]\n"), - inf->num, - target_pid_to_str (ptid_t (pid))); + { + if (pid != 0) + printf_unfiltered (_("[New inferior %d (%s)]\n"), + inf->num, + target_pid_to_str (ptid_t (pid))); + else + printf_unfiltered (_("[New inferior %d]\n"), inf->num); + } return inf; } diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index e987cfe..7b378ca 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -86,8 +86,8 @@ python_on_normal_stop (struct bpstats *bs, int print_frame) if (!gdb_python_initialized) return; - if (!find_thread_ptid (inferior_ptid)) - return; + if (inferior_ptid == null_ptid) + return; stop_signal = inferior_thread ()->suspend.stop_signal; diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index acc8f03..a4f3925 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -210,13 +210,11 @@ tui_on_command_error (void) static void tui_on_user_selected_context_changed (user_selected_what selection) { - struct thread_info *tp; - /* This event is suppressed. */ if (cli_suppress_notification.user_selected_context) return; - tp = find_thread_ptid (inferior_ptid); + thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : NULL; SWITCH_THRU_ALL_UIS () { |