* target.h (struct target_ops) <to_supports_multi_process>: New
field. (target_supports_multi_process): New define. * target.c (update_current_target): Inherit and de_fault to_supports_multi_process. * infcmd.c (attach_command): Allow attaching to multiple processes if the target supports it. (detach_command): If the target claims there is still execution, don't clear the thread list. * remote.c (remote_supports_multi_process): New. (init_remote_ops): Register remote_supports_multi_process.
This commit is contained in:
parent
676e87b308
commit
8a30517206
@ -1,3 +1,17 @@
|
||||
2008-10-27 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* target.h (struct target_ops) <to_supports_multi_process>: New
|
||||
field.
|
||||
(target_supports_multi_process): New define.
|
||||
* target.c (update_current_target): Inherit and de_fault
|
||||
to_supports_multi_process.
|
||||
* infcmd.c (attach_command): Allow attaching to multiple processes
|
||||
if the target supports it.
|
||||
(detach_command): If the target claims there is still execution,
|
||||
don't clear the thread list.
|
||||
* remote.c (remote_supports_multi_process): New.
|
||||
(init_remote_ops): Register remote_supports_multi_process.
|
||||
|
||||
2008-10-27 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* Makefile.in (.y.c, .l.c): sed free to xfree.
|
||||
|
12
gdb/infcmd.c
12
gdb/infcmd.c
@ -2201,7 +2201,10 @@ attach_command (char *args, int from_tty)
|
||||
|
||||
dont_repeat (); /* Not for the faint of heart */
|
||||
|
||||
if (target_has_execution)
|
||||
if (target_supports_multi_process ())
|
||||
/* Don't complain if we can be attached to multiple processes. */
|
||||
;
|
||||
else if (target_has_execution)
|
||||
{
|
||||
if (query ("A program is being debugged already. Kill it? "))
|
||||
target_kill ();
|
||||
@ -2311,7 +2314,12 @@ detach_command (char *args, int from_tty)
|
||||
dont_repeat (); /* Not for the faint of heart. */
|
||||
target_detach (args, from_tty);
|
||||
no_shared_libraries (NULL, from_tty);
|
||||
init_thread_list ();
|
||||
|
||||
/* If the current target interface claims there's still execution,
|
||||
then don't mess with threads of other processes. */
|
||||
if (!target_has_execution)
|
||||
init_thread_list ();
|
||||
|
||||
if (deprecated_detach_hook)
|
||||
deprecated_detach_hook ();
|
||||
}
|
||||
|
@ -8554,6 +8554,13 @@ remote_supports_non_stop (void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
remote_supports_multi_process (void)
|
||||
{
|
||||
struct remote_state *rs = get_remote_state ();
|
||||
return remote_multi_process_p (rs);
|
||||
}
|
||||
|
||||
static void
|
||||
init_remote_ops (void)
|
||||
{
|
||||
@ -8616,6 +8623,7 @@ Specify the serial device it is connected to\n\
|
||||
remote_ops.to_terminal_inferior = remote_terminal_inferior;
|
||||
remote_ops.to_terminal_ours = remote_terminal_ours;
|
||||
remote_ops.to_supports_non_stop = remote_supports_non_stop;
|
||||
remote_ops.to_supports_multi_process = remote_supports_multi_process;
|
||||
}
|
||||
|
||||
/* Set up the extended remote vector by making a copy of the standard
|
||||
|
@ -471,6 +471,7 @@ update_current_target (void)
|
||||
/* Do not inherit to_read_description. */
|
||||
INHERIT (to_get_ada_task_ptid, t);
|
||||
/* Do not inherit to_search_memory. */
|
||||
INHERIT (to_supports_multi_process, t);
|
||||
INHERIT (to_magic, t);
|
||||
/* Do not inherit to_memory_map. */
|
||||
/* Do not inherit to_flash_erase. */
|
||||
@ -638,6 +639,9 @@ update_current_target (void)
|
||||
de_fault (to_get_ada_task_ptid,
|
||||
(ptid_t (*) (long, long))
|
||||
default_get_ada_task_ptid);
|
||||
de_fault (to_supports_multi_process,
|
||||
(int (*) (void))
|
||||
return_zero);
|
||||
#undef de_fault
|
||||
|
||||
/* Finally, position the target-stack beneath the squashed
|
||||
|
10
gdb/target.h
10
gdb/target.h
@ -536,6 +536,10 @@ struct target_ops
|
||||
/* Can target execute in reverse? */
|
||||
int (*to_can_execute_reverse) ();
|
||||
|
||||
/* Does this target support debugging multiple processes
|
||||
simultaneously? */
|
||||
int (*to_supports_multi_process) (void);
|
||||
|
||||
int to_magic;
|
||||
/* Need sub-structure for target machine related rather than comm related?
|
||||
*/
|
||||
@ -647,6 +651,12 @@ extern void target_resume (ptid_t ptid, int step, enum target_signal signal);
|
||||
#define target_prepare_to_store(regcache) \
|
||||
(*current_target.to_prepare_to_store) (regcache)
|
||||
|
||||
/* Returns true if this target can debug multiple processes
|
||||
simultaneously. */
|
||||
|
||||
#define target_supports_multi_process() \
|
||||
(*current_target.to_supports_multi_process) ()
|
||||
|
||||
extern DCACHE *target_dcache;
|
||||
|
||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||
|
Loading…
Reference in New Issue
Block a user