* config/i386/nm-cygwin.h (ATTACH_NO_WAIT): Delete.
* config/i386/nm-i386gnu.h (ATTACH_NO_WAIT): Delete. * target.h (struct target_ops): Add to_attach_no_wait member. (target_attach_no_wait): New. * target.c (update_current_target): Inherit to_attach_no_wait. * infcmd.c: Replace ATTACH_NO_WAIT compile time check by target_attach_no_wait runtime check. * gnu-nat.c (init_gnu_ops): Set to_attach_no_wait in gnu_ops. * win32-nat.c (init_win32_ops): Set to_attach_no_wait in win32_ops.
This commit is contained in:
parent
caac88966e
commit
dc177b7a51
@ -1,3 +1,19 @@
|
|||||||
|
2008-07-03 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* config/i386/nm-cygwin.h (ATTACH_NO_WAIT): Delete.
|
||||||
|
* config/i386/nm-i386gnu.h (ATTACH_NO_WAIT): Delete.
|
||||||
|
|
||||||
|
* target.h (struct target_ops): Add to_attach_no_wait member.
|
||||||
|
(target_attach_no_wait): New.
|
||||||
|
* target.c (update_current_target): Inherit to_attach_no_wait.
|
||||||
|
|
||||||
|
* infcmd.c: Replace ATTACH_NO_WAIT compile time check by
|
||||||
|
target_attach_no_wait runtime check.
|
||||||
|
|
||||||
|
* gnu-nat.c (init_gnu_ops): Set to_attach_no_wait in gnu_ops.
|
||||||
|
* win32-nat.c (init_win32_ops): Set to_attach_no_wait in
|
||||||
|
win32_ops.
|
||||||
|
|
||||||
2008-07-03 Pedro Alves <pedro@codesourcery.com>
|
2008-07-03 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* i386-tdep.c (i386_displaced_step_fixup): Condition log printing
|
* i386-tdep.c (i386_displaced_step_fixup): Condition log printing
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#define ATTACH_NO_WAIT
|
|
||||||
#define ADD_SHARED_SYMBOL_FILES dll_symbol_command
|
#define ADD_SHARED_SYMBOL_FILES dll_symbol_command
|
||||||
void dll_symbol_command (char *, int);
|
void dll_symbol_command (char *, int);
|
||||||
|
|
||||||
|
@ -26,9 +26,6 @@
|
|||||||
|
|
||||||
extern char *gnu_target_pid_to_str (int pid);
|
extern char *gnu_target_pid_to_str (int pid);
|
||||||
|
|
||||||
/* Don't do wait_for_inferior on attach. */
|
|
||||||
#define ATTACH_NO_WAIT
|
|
||||||
|
|
||||||
/* Thread flavors used in re-setting the T bit. */
|
/* Thread flavors used in re-setting the T bit. */
|
||||||
#define THREAD_STATE_FLAVOR i386_REGS_SEGS_STATE
|
#define THREAD_STATE_FLAVOR i386_REGS_SEGS_STATE
|
||||||
#define THREAD_STATE_SIZE i386_THREAD_STATE_COUNT
|
#define THREAD_STATE_SIZE i386_THREAD_STATE_COUNT
|
||||||
|
@ -2592,6 +2592,7 @@ init_gnu_ops (void)
|
|||||||
gnu_ops.to_doc = "GNU Hurd process"; /* to_doc */
|
gnu_ops.to_doc = "GNU Hurd process"; /* to_doc */
|
||||||
gnu_ops.to_open = gnu_open; /* to_open */
|
gnu_ops.to_open = gnu_open; /* to_open */
|
||||||
gnu_ops.to_attach = gnu_attach; /* to_attach */
|
gnu_ops.to_attach = gnu_attach; /* to_attach */
|
||||||
|
gnu_ops.to_attach_no_wait = 1; /* to_attach_no_wait */
|
||||||
gnu_ops.to_detach = gnu_detach; /* to_detach */
|
gnu_ops.to_detach = gnu_detach; /* to_detach */
|
||||||
gnu_ops.to_resume = gnu_resume; /* to_resume */
|
gnu_ops.to_resume = gnu_resume; /* to_resume */
|
||||||
gnu_ops.to_wait = gnu_wait; /* to_wait */
|
gnu_ops.to_wait = gnu_wait; /* to_wait */
|
||||||
|
60
gdb/infcmd.c
60
gdb/infcmd.c
@ -2015,39 +2015,41 @@ attach_command (char *args, int from_tty)
|
|||||||
init_wait_for_inferior ();
|
init_wait_for_inferior ();
|
||||||
clear_proceed_status ();
|
clear_proceed_status ();
|
||||||
|
|
||||||
/* No traps are generated when attaching to inferior under Mach 3
|
/* Some system don't generate traps when attaching to inferior.
|
||||||
or GNU hurd. */
|
E.g. Mach 3 or GNU hurd. */
|
||||||
#ifndef ATTACH_NO_WAIT
|
if (!target_attach_no_wait)
|
||||||
/* Careful here. See comments in inferior.h. Basically some OSes
|
|
||||||
don't ignore SIGSTOPs on continue requests anymore. We need a
|
|
||||||
way for handle_inferior_event to reset the stop_signal variable
|
|
||||||
after an attach, and this is what STOP_QUIETLY_NO_SIGSTOP is for. */
|
|
||||||
stop_soon = STOP_QUIETLY_NO_SIGSTOP;
|
|
||||||
|
|
||||||
if (target_can_async_p ())
|
|
||||||
{
|
{
|
||||||
/* sync_execution mode. Wait for stop. */
|
/* Careful here. See comments in inferior.h. Basically some
|
||||||
struct continuation_arg *arg1, *arg2, *arg3;
|
OSes don't ignore SIGSTOPs on continue requests anymore. We
|
||||||
|
need a way for handle_inferior_event to reset the stop_signal
|
||||||
|
variable after an attach, and this is what
|
||||||
|
STOP_QUIETLY_NO_SIGSTOP is for. */
|
||||||
|
stop_soon = STOP_QUIETLY_NO_SIGSTOP;
|
||||||
|
|
||||||
arg1 =
|
if (target_can_async_p ())
|
||||||
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
{
|
||||||
arg2 =
|
/* sync_execution mode. Wait for stop. */
|
||||||
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
struct continuation_arg *arg1, *arg2, *arg3;
|
||||||
arg3 =
|
|
||||||
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
arg1 =
|
||||||
arg1->next = arg2;
|
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
||||||
arg2->next = arg3;
|
arg2 =
|
||||||
arg3->next = NULL;
|
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
||||||
arg1->data.pointer = args;
|
arg3 =
|
||||||
arg2->data.integer = from_tty;
|
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
|
||||||
arg3->data.integer = async_exec;
|
arg1->next = arg2;
|
||||||
add_continuation (attach_command_continuation, arg1);
|
arg2->next = arg3;
|
||||||
return;
|
arg3->next = NULL;
|
||||||
|
arg1->data.pointer = args;
|
||||||
|
arg2->data.integer = from_tty;
|
||||||
|
arg3->data.integer = async_exec;
|
||||||
|
add_continuation (attach_command_continuation, arg1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_for_inferior (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_inferior (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
attach_command_post_wait (args, from_tty, async_exec);
|
attach_command_post_wait (args, from_tty, async_exec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,6 +405,7 @@ update_current_target (void)
|
|||||||
INHERIT (to_close, t);
|
INHERIT (to_close, t);
|
||||||
INHERIT (to_attach, t);
|
INHERIT (to_attach, t);
|
||||||
INHERIT (to_post_attach, t);
|
INHERIT (to_post_attach, t);
|
||||||
|
INHERIT (to_attach_no_wait, t);
|
||||||
INHERIT (to_detach, t);
|
INHERIT (to_detach, t);
|
||||||
/* Do not inherit to_disconnect. */
|
/* Do not inherit to_disconnect. */
|
||||||
INHERIT (to_resume, t);
|
INHERIT (to_resume, t);
|
||||||
|
@ -412,6 +412,7 @@ struct target_ops
|
|||||||
int to_has_registers;
|
int to_has_registers;
|
||||||
int to_has_execution;
|
int to_has_execution;
|
||||||
int to_has_thread_control; /* control thread execution */
|
int to_has_thread_control; /* control thread execution */
|
||||||
|
int to_attach_no_wait;
|
||||||
struct section_table
|
struct section_table
|
||||||
*to_sections;
|
*to_sections;
|
||||||
struct section_table
|
struct section_table
|
||||||
@ -564,6 +565,13 @@ void target_close (struct target_ops *targ, int quitting);
|
|||||||
#define target_attach(args, from_tty) \
|
#define target_attach(args, from_tty) \
|
||||||
(*current_target.to_attach) (args, from_tty)
|
(*current_target.to_attach) (args, from_tty)
|
||||||
|
|
||||||
|
/* Some targets don't generate traps when attaching to the inferior,
|
||||||
|
or their target_attach implementation takes care of the waiting.
|
||||||
|
These targets must set to_attach_no_wait. */
|
||||||
|
|
||||||
|
#define target_attach_no_wait \
|
||||||
|
(current_target.to_attach_no_wait)
|
||||||
|
|
||||||
/* The target_attach operation places a process under debugger control,
|
/* The target_attach operation places a process under debugger control,
|
||||||
and stops the process.
|
and stops the process.
|
||||||
|
|
||||||
|
@ -2085,6 +2085,7 @@ init_win32_ops (void)
|
|||||||
win32_ops.to_open = win32_open;
|
win32_ops.to_open = win32_open;
|
||||||
win32_ops.to_close = win32_close;
|
win32_ops.to_close = win32_close;
|
||||||
win32_ops.to_attach = win32_attach;
|
win32_ops.to_attach = win32_attach;
|
||||||
|
win32_ops.to_attach_no_wait = 1;
|
||||||
win32_ops.to_detach = win32_detach;
|
win32_ops.to_detach = win32_detach;
|
||||||
win32_ops.to_resume = win32_resume;
|
win32_ops.to_resume = win32_resume;
|
||||||
win32_ops.to_wait = win32_wait;
|
win32_ops.to_wait = win32_wait;
|
||||||
|
@ -2085,6 +2085,7 @@ init_win32_ops (void)
|
|||||||
win32_ops.to_open = win32_open;
|
win32_ops.to_open = win32_open;
|
||||||
win32_ops.to_close = win32_close;
|
win32_ops.to_close = win32_close;
|
||||||
win32_ops.to_attach = win32_attach;
|
win32_ops.to_attach = win32_attach;
|
||||||
|
win32_ops.to_attach_no_wait = 1;
|
||||||
win32_ops.to_detach = win32_detach;
|
win32_ops.to_detach = win32_detach;
|
||||||
win32_ops.to_resume = win32_resume;
|
win32_ops.to_resume = win32_resume;
|
||||||
win32_ops.to_wait = win32_wait;
|
win32_ops.to_wait = win32_wait;
|
||||||
|
Loading…
Reference in New Issue
Block a user