mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
Implement '-target-detach pid'.
* infcmd.c (detach_command): Make nonstatic. * inferior.h (detach_command): Declare. * mi/mi-cmds.c (mi_cmds): Don't route -target-detach via CLI. * mi/mi-cmds.h (mi_cmd_target_detach): Declare. * mi/mi-main.c (find_thread_of_process, mi_cmd_target_detach): New.
This commit is contained in:
parent
3d043ef6a3
commit
6418d433f1
@ -1,3 +1,13 @@
|
|||||||
|
2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
|
Implement '-target-detach pid'.
|
||||||
|
|
||||||
|
* infcmd.c (detach_command): Make nonstatic.
|
||||||
|
* inferior.h (detach_command): Declare.
|
||||||
|
* mi/mi-cmds.c (mi_cmds): Don't route -target-detach via CLI.
|
||||||
|
* mi/mi-cmds.h (mi_cmd_target_detach): Declare.
|
||||||
|
* mi/mi-main.c (find_thread_of_process, mi_cmd_target_detach): New.
|
||||||
|
|
||||||
2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
|
2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
Include group-id in thread-created notification.
|
Include group-id in thread-created notification.
|
||||||
|
@ -86,8 +86,6 @@ static void unset_command (char *, int);
|
|||||||
|
|
||||||
static void float_info (char *, int);
|
static void float_info (char *, int);
|
||||||
|
|
||||||
static void detach_command (char *, int);
|
|
||||||
|
|
||||||
static void disconnect_command (char *, int);
|
static void disconnect_command (char *, int);
|
||||||
|
|
||||||
static void unset_environment_command (char *, int);
|
static void unset_environment_command (char *, int);
|
||||||
@ -2344,7 +2342,7 @@ attach_command (char *args, int from_tty)
|
|||||||
* started via the normal ptrace (PTRACE_TRACEME).
|
* started via the normal ptrace (PTRACE_TRACEME).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
void
|
||||||
detach_command (char *args, int from_tty)
|
detach_command (char *args, int from_tty)
|
||||||
{
|
{
|
||||||
dont_repeat (); /* Not for the faint of heart. */
|
dont_repeat (); /* Not for the faint of heart. */
|
||||||
|
@ -269,6 +269,8 @@ extern void interrupt_target_command (char *args, int from_tty);
|
|||||||
|
|
||||||
extern void interrupt_target_1 (int all_threads);
|
extern void interrupt_target_1 (int all_threads);
|
||||||
|
|
||||||
|
extern void detach_command (char *, int);
|
||||||
|
|
||||||
/* Address at which inferior stopped. */
|
/* Address at which inferior stopped. */
|
||||||
|
|
||||||
extern CORE_ADDR stop_pc;
|
extern CORE_ADDR stop_pc;
|
||||||
|
@ -121,7 +121,7 @@ struct mi_cmd mi_cmds[] =
|
|||||||
{ "symbol-type", { NULL, 0 }, NULL },
|
{ "symbol-type", { NULL, 0 }, NULL },
|
||||||
{ "target-attach", { "attach", 1 }, NULL },
|
{ "target-attach", { "attach", 1 }, NULL },
|
||||||
{ "target-compare-sections", { NULL, 0 }, NULL },
|
{ "target-compare-sections", { NULL, 0 }, NULL },
|
||||||
{ "target-detach", { "detach", 0 }, 0 },
|
{ "target-detach", { NULL, 0 }, mi_cmd_target_detach },
|
||||||
{ "target-disconnect", { "disconnect", 0 }, 0 },
|
{ "target-disconnect", { "disconnect", 0 }, 0 },
|
||||||
{ "target-download", { "load", 1 }, NULL},
|
{ "target-download", { "load", 1 }, NULL},
|
||||||
{ "target-exec-status", { NULL, 0 }, NULL },
|
{ "target-exec-status", { NULL, 0 }, NULL },
|
||||||
|
@ -75,6 +75,7 @@ extern mi_cmd_argv_ftype mi_cmd_stack_list_frames;
|
|||||||
extern mi_cmd_argv_ftype mi_cmd_stack_list_locals;
|
extern mi_cmd_argv_ftype mi_cmd_stack_list_locals;
|
||||||
extern mi_cmd_argv_ftype mi_cmd_stack_select_frame;
|
extern mi_cmd_argv_ftype mi_cmd_stack_select_frame;
|
||||||
extern mi_cmd_argv_ftype mi_cmd_symbol_list_lines;
|
extern mi_cmd_argv_ftype mi_cmd_symbol_list_lines;
|
||||||
|
extern mi_cmd_argv_ftype mi_cmd_target_detach;
|
||||||
extern mi_cmd_argv_ftype mi_cmd_target_file_get;
|
extern mi_cmd_argv_ftype mi_cmd_target_file_get;
|
||||||
extern mi_cmd_argv_ftype mi_cmd_target_file_put;
|
extern mi_cmd_argv_ftype mi_cmd_target_file_put;
|
||||||
extern mi_cmd_argv_ftype mi_cmd_target_file_delete;
|
extern mi_cmd_argv_ftype mi_cmd_target_file_delete;
|
||||||
|
@ -199,6 +199,42 @@ mi_cmd_exec_interrupt (char *command, char **argv, int argc)
|
|||||||
error ("Usage: -exec-interrupt [--all]");
|
error ("Usage: -exec-interrupt [--all]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_thread_of_process (struct thread_info *ti, void *p)
|
||||||
|
{
|
||||||
|
int pid = *(int *)p;
|
||||||
|
if (PIDGET (ti->ptid) == pid && !is_exited (ti->ptid))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mi_cmd_target_detach (char *command, char **argv, int argc)
|
||||||
|
{
|
||||||
|
if (argc != 0 && argc != 1)
|
||||||
|
error ("Usage: -target-detach [thread-group]");
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
struct thread_info *tp;
|
||||||
|
char *end = argv[0];
|
||||||
|
int pid = strtol (argv[0], &end, 10);
|
||||||
|
if (*end != '\0')
|
||||||
|
error (_("Cannot parse thread group id '%s'"), argv[0]);
|
||||||
|
|
||||||
|
/* Pick any thread in the desired process. Current
|
||||||
|
target_detach deteches from the parent of inferior_ptid. */
|
||||||
|
tp = iterate_over_threads (find_thread_of_process, &pid);
|
||||||
|
if (!tp)
|
||||||
|
error (_("Thread group is empty"));
|
||||||
|
|
||||||
|
switch_to_thread (tp->ptid);
|
||||||
|
}
|
||||||
|
|
||||||
|
detach_command (NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mi_cmd_thread_select (char *command, char **argv, int argc)
|
mi_cmd_thread_select (char *command, char **argv, int argc)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user