Skip to content

Commit

Permalink
Make linux_nat_detach/thread_db_detach use the inferior parameter
Browse files Browse the repository at this point in the history
This patch makes these two functions actually use the inferior parameter
added by the previous patch, instead of reading inferior_ptid.  I chose
these two, because they are the one actually used when I detach on my
GNU/Linux system, so they were easy to test.

I took the opportunity to pass the inferior being detached to
inf_ptrace_detach_success, so it could use it too.  From there, it made
sense to add an overload of detach_inferior that takes the inferior
directly rather than the pid, to avoid having to pass inf->pid only for
the callee to look up the inferior structure by pid.

gdb/ChangeLog:

	* inf-ptrace.c (inf_ptrace_detach): Adjust call to
	inf_ptrace_detach_success.
	(inf_ptrace_detach_success): Add inferior parameter, use it
	instead of inferior_ptid, pass it to detach_inferior.
	* inf-ptrace.h (inf_ptrace_detach_success): Add inferior
	parameter.
	* inferior.c (detach_inferior): Add overload that takes an
	inferior object.
	* inferior.h (detach_inferior): Likewise.
	* linux-nat.c (linux_nat_detach): Use the inf parameter, don't
	use inferior_ptid, adjust call to inf_ptrace_detach_success.
	* linux-thread-db.c (thread_db_detach): Use inf parameter.
  • Loading branch information
Simon Marchi committed Jan 19, 2018
1 parent 6e1e196 commit bc09b0c
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 14 deletions.
15 changes: 15 additions & 0 deletions gdb/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
2018-01-19 Simon Marchi <simon.marchi@ericsson.com>

* inf-ptrace.c (inf_ptrace_detach): Adjust call to
inf_ptrace_detach_success.
(inf_ptrace_detach_success): Add inferior parameter, use it
instead of inferior_ptid, pass it to detach_inferior.
* inf-ptrace.h (inf_ptrace_detach_success): Add inferior
parameter.
* inferior.c (detach_inferior): Add overload that takes an
inferior object.
* inferior.h (detach_inferior): Likewise.
* linux-nat.c (linux_nat_detach): Use the inf parameter, don't
use inferior_ptid, adjust call to inf_ptrace_detach_success.
* linux-thread-db.c (thread_db_detach): Use inf parameter.

2018-01-19 Simon Marchi <simon.marchi@ericsson.com>

* target.h (struct target_ops) <to_detach>: Add inferior
Expand Down
8 changes: 3 additions & 5 deletions gdb/inf-ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,18 +263,16 @@ inf_ptrace_detach (struct target_ops *ops, inferior *inf, int from_tty)
error (_("This system does not support detaching from a process"));
#endif

inf_ptrace_detach_success (ops);
inf_ptrace_detach_success (ops, inf);
}

/* See inf-ptrace.h. */

void
inf_ptrace_detach_success (struct target_ops *ops)
inf_ptrace_detach_success (struct target_ops *ops, inferior *inf)
{
pid_t pid = ptid_get_pid (inferior_ptid);

inferior_ptid = null_ptid;
detach_inferior (pid);
detach_inferior (inf);

inf_child_maybe_unpush_target (ops);
}
Expand Down
2 changes: 1 addition & 1 deletion gdb/inf-ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ extern pid_t get_ptrace_pid (ptid_t);


/* Cleanup the inferior after a successful ptrace detach. */
extern void inf_ptrace_detach_success (struct target_ops *ops);
extern void inf_ptrace_detach_success (struct target_ops *ops, inferior *inf);

#endif
15 changes: 13 additions & 2 deletions gdb/inferior.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,17 +253,28 @@ exit_inferior_num_silent (int num)
exit_inferior_1 (inf, 1);
}

/* See inferior.h. */

void
detach_inferior (int pid)
detach_inferior (inferior *inf)
{
struct inferior *inf = find_inferior_pid (pid);
/* Save the pid, since exit_inferior_1 will reset it. */
int pid = inf->pid;

exit_inferior_1 (inf, 0);

if (print_inferior_events)
printf_unfiltered (_("[Inferior %d detached]\n"), pid);
}

/* See inferior.h. */

void
detach_inferior (int pid)
{
detach_inferior (find_inferior_pid (pid));
}

void
inferior_appeared (struct inferior *inf, int pid)
{
Expand Down
3 changes: 3 additions & 0 deletions gdb/inferior.h
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,9 @@ extern struct inferior *add_inferior_silent (int pid);
extern void delete_inferior (struct inferior *todel);

/* Delete an existing inferior list entry, due to inferior detaching. */
extern void detach_inferior (inferior *inf);

/* Same as the above, but with the inferior specified by PID. */
extern void detach_inferior (int pid);

extern void exit_inferior (int pid);
Expand Down
8 changes: 3 additions & 5 deletions gdb/linux-nat.c
Original file line number Diff line number Diff line change
Expand Up @@ -1499,10 +1499,8 @@ detach_callback (struct lwp_info *lp, void *data)
static void
linux_nat_detach (struct target_ops *ops, inferior *inf, int from_tty)
{
int pid;
struct lwp_info *main_lwp;

pid = ptid_get_pid (inferior_ptid);
int pid = inf->pid;

/* Don't unregister from the event loop, as there may be other
inferiors running. */
Expand All @@ -1517,7 +1515,7 @@ linux_nat_detach (struct target_ops *ops, inferior *inf, int from_tty)
iterate_over_lwps (pid_to_ptid (pid), detach_callback, NULL);

/* Only the initial process should be left right now. */
gdb_assert (num_lwps (ptid_get_pid (inferior_ptid)) == 1);
gdb_assert (num_lwps (pid) == 1);

main_lwp = find_lwp_pid (pid_to_ptid (pid));

Expand All @@ -1538,7 +1536,7 @@ linux_nat_detach (struct target_ops *ops, inferior *inf, int from_tty)

detach_one_lwp (main_lwp, &signo);

inf_ptrace_detach_success (ops);
inf_ptrace_detach_success (ops, inf);
}
}

Expand Down
2 changes: 1 addition & 1 deletion gdb/linux-thread-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,7 @@ thread_db_detach (struct target_ops *ops, inferior *inf, int from_tty)
{
struct target_ops *target_beneath = find_target_beneath (ops);

delete_thread_db_info (ptid_get_pid (inferior_ptid));
delete_thread_db_info (inf->pid);

target_beneath->to_detach (target_beneath, inf, from_tty);

Expand Down

0 comments on commit bc09b0c

Please sign in to comment.