From: Pedro Alves Date: Thu, 18 Jun 2020 20:28:20 +0000 (+0100) Subject: Don't write to inferior_ptid in inf-ptrace.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6155c136ccf04b1e4ae1bdc201b853ce899b8607;p=binutils-gdb.git Don't write to inferior_ptid in inf-ptrace.c gdb/ChangeLog: 2020-06-18 Pedro Alves * inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the added thread. (inf_ptrace_target::attach): Don't write to inferior_ptid. Switch to the added thread. (inf_ptrace_target::detach_success): Use switch_to_no_thread instead of writing to inferior_ptid. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6854b8f9a20..4bc9c2818bd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-06-18 Pedro Alves + + * inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the + added thread. + (inf_ptrace_target::attach): Don't write to inferior_ptid. Switch + to the added thread. + (inf_ptrace_target::detach_success): Use switch_to_no_thread + instead of writing to inferior_ptid. + 2020-06-18 Pedro Alves * gdbarch-selftests.c: Include "progspace-and-thread.h". diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index a83ffcc8798..d25d226abba 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -90,9 +90,6 @@ inf_ptrace_target::create_inferior (const char *exec_file, const std::string &allargs, char **env, int from_tty) { - pid_t pid; - ptid_t ptid; - /* Do not change either targets above or the same target if already present. The reason is the target stack is shared across multiple inferiors. */ int ops_already_pushed = target_is_pushed (this); @@ -105,14 +102,15 @@ inf_ptrace_target::create_inferior (const char *exec_file, unpusher.reset (this); } - pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL, - NULL, NULL, NULL); + pid_t pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL, + NULL, NULL, NULL); - ptid = ptid_t (pid); + ptid_t ptid (pid); /* We have something that executes now. We'll be running through the shell at this point (if startup-with-shell is true), but the pid shouldn't change. */ - add_thread_silent (this, ptid); + thread_info *thr = add_thread_silent (this, ptid); + switch_to_thread (thr); unpusher.release (); @@ -190,11 +188,12 @@ inf_ptrace_target::attach (const char *args, int from_tty) inf = current_inferior (); inferior_appeared (inf, pid); inf->attach_flag = 1; - inferior_ptid = ptid_t (pid); /* Always add a main thread. If some target extends the ptrace target, it should decorate the ptid later with more info. */ - thread_info *thr = add_thread_silent (this, inferior_ptid); + thread_info *thr = add_thread_silent (this, ptid_t (pid)); + switch_to_thread (thr); + /* Don't consider the thread stopped until we've processed its initial SIGSTOP stop. */ set_executing (this, thr->ptid, true); @@ -232,7 +231,7 @@ inf_ptrace_target::detach (inferior *inf, int from_tty) void inf_ptrace_target::detach_success (inferior *inf) { - inferior_ptid = null_ptid; + switch_to_no_thread (); detach_inferior (inf); maybe_unpush_target ();