* arch-utils.c (default_prepare_to_proceed): Remove.

(generic_prepare_to_proceed): Remove.
	* arch-utils.h (default_prepare_to_proceed): Remove prototype.
	(generic_prepare_to_proceed): Remove prototype.
	* gdbarch.sh (PREPARE_TO_PROCEED): Remove.
	* gdbarch.c: Regenerate.
	* gdbarch.h: Regenerate.
	* hppa-tdep.c (hppa_prepare_to_proceed): Remove dangling prototype.
	* hppah-nat.c (hppa_switched_threads): Remove.
	* infrun.c (prepare_to_proceed): New static function, copied from
	generic_prepare_to_proceed.  Remove select_it argument.
	(proceed): Call prepare_to_proceed.
	* infttrace.c (old_gdb_pid, reported_pid, reported_bpt): Remove
	variables.
	(ptrace_wait): Don't set the removed variables.
	(hppa_switched_threads): Remove.
	* lin-lwp.c (lin_lwp_prepare_to_proceed): Remove.
	* config/nm-linux.h (PREPARE_TO_PROCEED): Don't define.
	(lin_lwp_prepare_to_proceed): Remove prototype.
	* config/i386/nm-x86-64linux.h (PREPARE_TO_PROCEED): Don't undefine.
	* config/pa/nm-hppah.h (PREPARE_TO_PROCEED): Don't define.
This commit is contained in:
Daniel Jacobowitz 2003-06-19 15:04:58 +00:00
parent 4ca6138816
commit ea67f13b68
14 changed files with 78 additions and 259 deletions

View File

@ -1,3 +1,27 @@
2003-06-19 Daniel Jacobowitz <drow@mvista.com>
* arch-utils.c (default_prepare_to_proceed): Remove.
(generic_prepare_to_proceed): Remove.
* arch-utils.h (default_prepare_to_proceed): Remove prototype.
(generic_prepare_to_proceed): Remove prototype.
* gdbarch.sh (PREPARE_TO_PROCEED): Remove.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* hppa-tdep.c (hppa_prepare_to_proceed): Remove dangling prototype.
* hppah-nat.c (hppa_switched_threads): Remove.
* infrun.c (prepare_to_proceed): New static function, copied from
generic_prepare_to_proceed. Remove select_it argument.
(proceed): Call prepare_to_proceed.
* infttrace.c (old_gdb_pid, reported_pid, reported_bpt): Remove
variables.
(ptrace_wait): Don't set the removed variables.
(hppa_switched_threads): Remove.
* lin-lwp.c (lin_lwp_prepare_to_proceed): Remove.
* config/nm-linux.h (PREPARE_TO_PROCEED): Don't define.
(lin_lwp_prepare_to_proceed): Remove prototype.
* config/i386/nm-x86-64linux.h (PREPARE_TO_PROCEED): Don't undefine.
* config/pa/nm-hppah.h (PREPARE_TO_PROCEED): Don't define.
2003-06-18 Theodore A. Roth <troth@openavr.org>
* avr-tdep.c: Include frame.h, frame-unwind.h, frame-base.h, and

View File

@ -272,66 +272,6 @@ no_op_reg_to_regnum (int reg)
return reg;
}
/* Default prepare_to_procced(). */
int
default_prepare_to_proceed (int select_it)
{
return 0;
}
/* Generic prepare_to_proceed(). This one should be suitable for most
targets that support threads. */
int
generic_prepare_to_proceed (int select_it)
{
ptid_t wait_ptid;
struct target_waitstatus wait_status;
/* Get the last target status returned by target_wait(). */
get_last_target_status (&wait_ptid, &wait_status);
/* Make sure we were stopped either at a breakpoint, or because
of a Ctrl-C. */
if (wait_status.kind != TARGET_WAITKIND_STOPPED
|| (wait_status.value.sig != TARGET_SIGNAL_TRAP &&
wait_status.value.sig != TARGET_SIGNAL_INT))
{
return 0;
}
if (!ptid_equal (wait_ptid, minus_one_ptid)
&& !ptid_equal (inferior_ptid, wait_ptid))
{
/* Switched over from WAIT_PID. */
CORE_ADDR wait_pc = read_pc_pid (wait_ptid);
if (wait_pc != read_pc ())
{
if (select_it)
{
/* Switch back to WAIT_PID thread. */
inferior_ptid = wait_ptid;
/* FIXME: This stuff came from switch_to_thread() in
thread.c (which should probably be a public function). */
flush_cached_frames ();
registers_changed ();
stop_pc = wait_pc;
select_frame (get_current_frame ());
}
/* We return 1 to indicate that there is a breakpoint here,
so we need to step over it before continuing to avoid
hitting it straight away. */
if (breakpoint_here_p (wait_pc))
{
return 1;
}
}
}
return 0;
}
CORE_ADDR
init_frame_pc_noop (int fromleaf, struct frame_info *prev)
{

View File

@ -105,12 +105,6 @@ extern CORE_ADDR core_addr_identity (CORE_ADDR addr);
extern int no_op_reg_to_regnum (int reg);
/* Default prepare_to_procced. */
extern int default_prepare_to_proceed (int select_it);
extern int generic_prepare_to_proceed (int select_it);
/* Versions of init_frame_pc(). Do nothing; do the default. */
extern CORE_ADDR init_frame_pc_noop (int fromleaf, struct frame_info *prev);

View File

@ -60,9 +60,5 @@ extern unsigned long x86_64_linux_dr_get_status (void);
/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */
#define FETCH_INFERIOR_REGISTERS
/* FIXME: kettenis/20030416: Why? */
#undef PREPARE_TO_PROCEED
#endif /* NM_X86_64_LINUX_H */

View File

@ -51,9 +51,6 @@ struct target_waitstatus;
extern ptid_t child_wait (ptid_t ptid, struct target_waitstatus *ourstatus);
#define CHILD_WAIT
extern int lin_lwp_prepare_to_proceed (void);
#define PREPARE_TO_PROCEED(select_it) lin_lwp_prepare_to_proceed ()
extern void lin_lwp_attach_lwp (ptid_t ptid, int verbose);
#define ATTACH_LWP(ptid, verbose) lin_lwp_attach_lwp ((ptid), (verbose))

View File

@ -53,11 +53,6 @@
#define CHILD_XFER_MEMORY
#define CHILD_FOLLOW_FORK
/* While this is for use by threaded programs, it doesn't appear
* to hurt non-threaded ones. This is used in infrun.c: */
#define PREPARE_TO_PROCEED(select_it) generic_prepare_to_proceed(select_it)
extern int generic_prepare_to_proceed (int select_it);
/* In infptrace.c or infttrace.c: */
#define CHILD_PID_TO_EXEC_FILE
#define CHILD_POST_STARTUP_INFERIOR

View File

@ -237,7 +237,6 @@ struct gdbarch
gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint;
gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint;
CORE_ADDR decr_pc_after_break;
gdbarch_prepare_to_proceed_ftype *prepare_to_proceed;
CORE_ADDR function_start_offset;
gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address;
CORE_ADDR frame_args_skip;
@ -405,7 +404,6 @@ struct gdbarch startup_gdbarch =
0, /* memory_insert_breakpoint */
0, /* memory_remove_breakpoint */
0, /* decr_pc_after_break */
0, /* prepare_to_proceed */
0, /* function_start_offset */
generic_remote_translate_xfer_address, /* remote_translate_xfer_address */
0, /* frame_args_skip */
@ -545,7 +543,6 @@ gdbarch_alloc (const struct gdbarch_info *info,
current_gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
current_gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
current_gdbarch->decr_pc_after_break = -1;
current_gdbarch->prepare_to_proceed = default_prepare_to_proceed;
current_gdbarch->function_start_offset = -1;
current_gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address;
current_gdbarch->frame_args_skip = -1;
@ -713,7 +710,6 @@ verify_gdbarch (struct gdbarch *gdbarch)
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
&& (gdbarch->decr_pc_after_break == -1))
fprintf_unfiltered (log, "\n\tdecr_pc_after_break");
/* Skip verify of prepare_to_proceed, invalid_p == 0 */
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
&& (gdbarch->function_start_offset == -1))
fprintf_unfiltered (log, "\n\tfunction_start_offset");
@ -2026,17 +2022,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
"gdbarch_dump: POINTER_TO_ADDRESS = <0x%08lx>\n",
(long) current_gdbarch->pointer_to_address
/*POINTER_TO_ADDRESS ()*/);
#endif
#ifdef PREPARE_TO_PROCEED
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
"PREPARE_TO_PROCEED(select_it)",
XSTRING (PREPARE_TO_PROCEED (select_it)));
if (GDB_MULTI_ARCH)
fprintf_unfiltered (file,
"gdbarch_dump: PREPARE_TO_PROCEED = <0x%08lx>\n",
(long) current_gdbarch->prepare_to_proceed
/*PREPARE_TO_PROCEED ()*/);
#endif
if (GDB_MULTI_ARCH)
fprintf_unfiltered (file,
@ -4858,25 +4843,6 @@ set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch,
gdbarch->decr_pc_after_break = decr_pc_after_break;
}
int
gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, int select_it)
{
gdb_assert (gdbarch != NULL);
if (gdbarch->prepare_to_proceed == 0)
internal_error (__FILE__, __LINE__,
"gdbarch: gdbarch_prepare_to_proceed invalid");
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_prepare_to_proceed called\n");
return gdbarch->prepare_to_proceed (select_it);
}
void
set_gdbarch_prepare_to_proceed (struct gdbarch *gdbarch,
gdbarch_prepare_to_proceed_ftype prepare_to_proceed)
{
gdbarch->prepare_to_proceed = prepare_to_proceed;
}
CORE_ADDR
gdbarch_function_start_offset (struct gdbarch *gdbarch)
{

View File

@ -2172,21 +2172,6 @@ extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR
#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
#endif
/* Default (function) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (PREPARE_TO_PROCEED)
#define PREPARE_TO_PROCEED(select_it) (default_prepare_to_proceed (select_it))
#endif
typedef int (gdbarch_prepare_to_proceed_ftype) (int select_it);
extern int gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, int select_it);
extern void set_gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, gdbarch_prepare_to_proceed_ftype *prepare_to_proceed);
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PREPARE_TO_PROCEED)
#error "Non multi-arch definition of PREPARE_TO_PROCEED"
#endif
#if !defined (PREPARE_TO_PROCEED)
#define PREPARE_TO_PROCEED(select_it) (gdbarch_prepare_to_proceed (current_gdbarch, select_it))
#endif
extern CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch);
extern void set_gdbarch_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR function_start_offset);
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FUNCTION_START_OFFSET)

View File

@ -617,7 +617,6 @@ f::BREAKPOINT_FROM_PC:const unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr,
f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint::0
f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint::0
v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
f:2:PREPARE_TO_PROCEED:int:prepare_to_proceed:int select_it:select_it::0:default_prepare_to_proceed::0
v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
#
m::REMOTE_TRANSLATE_XFER_ADDRESS:void:remote_translate_xfer_address:struct regcache *regcache, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len:regcache, gdb_addr, gdb_len, rem_addr, rem_len:::generic_remote_translate_xfer_address::0

View File

@ -129,9 +129,6 @@ static int restore_pc_queue (CORE_ADDR *);
static int hppa_alignof (struct type *);
/* To support multi-threading and stepping. */
int hppa_prepare_to_proceed ();
static int prologue_inst_adjust_sp (unsigned long);
static int is_branch (unsigned long);

View File

@ -930,16 +930,6 @@ hppa_pid_or_tid_to_str (ptid_t id)
return child_pid_to_str (id);
}
/* This function has no meaning in a non-threaded world. Thus, we
return 0 (FALSE). See the use of "hppa_prepare_to_proceed" in
hppa-tdep.c. */
pid_t
hppa_switched_threads (pid_t pid)
{
return (pid_t) 0;
}
void
hppa_ensure_vforking_parent_remains_stopped (int pid)
{

View File

@ -79,6 +79,8 @@ static int currently_stepping (struct execution_control_state *ecs);
static void xdb_handle_command (char *args, int from_tty);
static int prepare_to_proceed (void);
void _initialize_infrun (void);
int inferior_ignoring_startup_exec_events = 0;
@ -667,6 +669,55 @@ clear_proceed_status (void)
bpstat_clear (&stop_bpstat);
}
/* This should be suitable for any targets that support threads. */
static int
prepare_to_proceed (void)
{
ptid_t wait_ptid;
struct target_waitstatus wait_status;
/* Get the last target status returned by target_wait(). */
get_last_target_status (&wait_ptid, &wait_status);
/* Make sure we were stopped either at a breakpoint, or because
of a Ctrl-C. */
if (wait_status.kind != TARGET_WAITKIND_STOPPED
|| (wait_status.value.sig != TARGET_SIGNAL_TRAP &&
wait_status.value.sig != TARGET_SIGNAL_INT))
{
return 0;
}
if (!ptid_equal (wait_ptid, minus_one_ptid)
&& !ptid_equal (inferior_ptid, wait_ptid))
{
/* Switched over from WAIT_PID. */
CORE_ADDR wait_pc = read_pc_pid (wait_ptid);
if (wait_pc != read_pc ())
{
/* Switch back to WAIT_PID thread. */
inferior_ptid = wait_ptid;
/* FIXME: This stuff came from switch_to_thread() in
thread.c (which should probably be a public function). */
flush_cached_frames ();
registers_changed ();
stop_pc = wait_pc;
select_frame (get_current_frame ());
}
/* We return 1 to indicate that there is a breakpoint here,
so we need to step over it before continuing to avoid
hitting it straight away. */
if (breakpoint_here_p (wait_pc))
return 1;
}
return 0;
}
/* Record the pc of the program the last time it stopped. This is
just used internally by wait_for_inferior, but need to be preserved
@ -722,7 +773,6 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
write_pc (addr);
}
#ifdef PREPARE_TO_PROCEED
/* In a multi-threaded task we may select another thread
and then continue or step.
@ -731,15 +781,11 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
any execution (i.e. it will report a breakpoint hit
incorrectly). So we must step over it first.
PREPARE_TO_PROCEED checks the current thread against the thread
prepare_to_proceed checks the current thread against the thread
that reported the most recent event. If a step-over is required
it returns TRUE and sets the current thread to the old thread. */
if (PREPARE_TO_PROCEED (1) && breakpoint_here_p (read_pc ()))
{
oneproc = 1;
}
#endif /* PREPARE_TO_PROCEED */
if (prepare_to_proceed () && breakpoint_here_p (read_pc ()))
oneproc = 1;
#ifdef HP_OS_BUG
if (trap_expected_after_continue)

View File

@ -142,12 +142,6 @@ static startup_semaphore_t startup_semaphore;
static int vforking_child_pid = 0;
static int vfork_in_flight = 0;
/* To support PREPARE_TO_PROCEED (hppa_prepare_to_proceed).
*/
static pid_t old_gdb_pid = 0;
static pid_t reported_pid = 0;
static int reported_bpt = 0;
/* 1 if ok as results of a ttrace or ttrace_wait call, 0 otherwise.
*/
#define TT_OK( _status, _errno ) \
@ -2912,12 +2906,6 @@ ptrace_wait (ptid_t ptid, int *status)
*/
return_pid = map_to_gdb_tid (real_tid);
/* Remember this for later use in "hppa_prepare_to_proceed".
*/
old_gdb_pid = PIDGET (inferior_ptid);
reported_pid = return_pid;
reported_bpt = ((tsp.tts_event & TTEVT_SIGNAL) && (5 == tsp.tts_u.tts_signal.tts_signo));
if (real_tid == 0 || return_pid == 0)
{
warning ("Internal error: process-wait failed.");
@ -5536,64 +5524,6 @@ hppa_pid_or_tid_to_str (ptid_t ptid)
}
/* If the current pid is not the pid this module reported
* from "ptrace_wait" with the most recent event, then the
* user has switched threads.
*
* If the last reported event was a breakpoint, then return
* the old thread id, else return 0.
*/
pid_t
hppa_switched_threads (pid_t gdb_pid)
{
if (gdb_pid == old_gdb_pid)
{
/*
* Core gdb is working with the same pid that it
* was before we reported the last event. This
* is ok: e.g. we reported hitting a thread-specific
* breakpoint, but we were reporting the wrong
* thread, so the core just ignored the event.
*
* No thread switch has happened.
*/
return (pid_t) 0;
}
else if (gdb_pid == reported_pid)
{
/*
* Core gdb is working with the pid we reported, so
* any continue or step will be able to figure out
* that it needs to step over any hit breakpoints
* without our (i.e. PREPARE_TO_PROCEED's) help.
*/
return (pid_t) 0;
}
else if (!reported_bpt)
{
/*
* The core switched, but we didn't just report a
* breakpoint, so there's no just-hit breakpoint
* instruction at "reported_pid"'s PC, and thus there
* is no need to step over it.
*/
return (pid_t) 0;
}
else
{
/* There's been a real switch, and we reported
* a hit breakpoint. Let "hppa_prepare_to_proceed"
* know, so it can see whether the breakpoint is
* still active.
*/
return reported_pid;
}
/* Keep compiler happy with an obvious return at the end.
*/
return (pid_t) 0;
}
void
hppa_ensure_vforking_parent_remains_stopped (int pid)
{

View File

@ -298,46 +298,6 @@ iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
}
/* Implementation of the PREPARE_TO_PROCEED hook for the GNU/Linux LWP
layer.
Note that this implementation is potentially redundant now that
default_prepare_to_proceed() has been added.
FIXME This may not support switching threads after Ctrl-C
correctly. The default implementation does support this. */
int
lin_lwp_prepare_to_proceed (void)
{
if (!ptid_equal (trap_ptid, null_ptid)
&& !ptid_equal (inferior_ptid, trap_ptid))
{
/* Switched over from TRAP_PID. */
CORE_ADDR stop_pc = read_pc ();
CORE_ADDR trap_pc;
/* Avoid switching where it wouldn't do any good, i.e. if both
threads are at the same breakpoint. */
trap_pc = read_pc_pid (trap_ptid);
if (trap_pc != stop_pc && breakpoint_here_p (trap_pc))
{
/* User hasn't deleted the breakpoint. Return non-zero, and
switch back to TRAP_PID. */
inferior_ptid = trap_ptid;
/* FIXME: Is this stuff really necessary? */
flush_cached_frames ();
registers_changed ();
return 1;
}
}
return 0;
}
#if 0
static void
lin_lwp_open (char *args, int from_tty)