mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
Replace deprecated_target_wait_hook by observers
Commit b60cea7
(Make target_wait options use enum flags) broke
deprecated_target_wait_hook usage: there's a commit comment telling
this hook has not been converted.
Rather than trying to mend it, this patch replaces the hook by two
target_wait observers:
target_pre_wait (ptid_t ptid)
target_post_wait (ptid_t event_ptid)
Upon target_wait entry, target_pre_wait is notified with the ptid
passed to target_wait. Upon exit, target_post_wait is notified with
the event ptid returned by target_wait. Should an exception occur,
event_ptid is null_ptid.
This change benefits to Insight (out-of-tree): there's no real use of the
late hook in gdb itself.
This commit is contained in:
parent
79a0742380
commit
fb85cece22
15
gdb/infrun.c
15
gdb/infrun.c
@ -367,7 +367,7 @@ show_stop_on_solib_events (struct ui_file *file, int from_tty,
|
|||||||
static bool stop_print_frame;
|
static bool stop_print_frame;
|
||||||
|
|
||||||
/* This is a cached copy of the target/ptid/waitstatus of the last
|
/* This is a cached copy of the target/ptid/waitstatus of the last
|
||||||
event returned by target_wait()/deprecated_target_wait_hook().
|
event returned by target_wait().
|
||||||
This information is returned by get_last_target_status(). */
|
This information is returned by get_last_target_status(). */
|
||||||
static process_stratum_target *target_last_proc_target;
|
static process_stratum_target *target_last_proc_target;
|
||||||
static ptid_t target_last_wait_ptid;
|
static ptid_t target_last_wait_ptid;
|
||||||
@ -3515,7 +3515,6 @@ static ptid_t
|
|||||||
do_target_wait_1 (inferior *inf, ptid_t ptid,
|
do_target_wait_1 (inferior *inf, ptid_t ptid,
|
||||||
target_waitstatus *status, target_wait_flags options)
|
target_waitstatus *status, target_wait_flags options)
|
||||||
{
|
{
|
||||||
ptid_t event_ptid;
|
|
||||||
struct thread_info *tp;
|
struct thread_info *tp;
|
||||||
|
|
||||||
/* We know that we are looking for an event in the target of inferior
|
/* We know that we are looking for an event in the target of inferior
|
||||||
@ -3630,12 +3629,7 @@ do_target_wait_1 (inferior *inf, ptid_t ptid,
|
|||||||
if (!target_can_async_p ())
|
if (!target_can_async_p ())
|
||||||
options &= ~TARGET_WNOHANG;
|
options &= ~TARGET_WNOHANG;
|
||||||
|
|
||||||
if (deprecated_target_wait_hook)
|
return target_wait (ptid, status, options);
|
||||||
event_ptid = deprecated_target_wait_hook (ptid, status, options);
|
|
||||||
else
|
|
||||||
event_ptid = target_wait (ptid, status, options);
|
|
||||||
|
|
||||||
return event_ptid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wrapper for target_wait that first checks whether threads have
|
/* Wrapper for target_wait that first checks whether threads have
|
||||||
@ -4591,10 +4585,7 @@ poll_one_curr_target (struct target_waitstatus *ws)
|
|||||||
don't get any event. */
|
don't get any event. */
|
||||||
target_dcache_invalidate ();
|
target_dcache_invalidate ();
|
||||||
|
|
||||||
if (deprecated_target_wait_hook)
|
event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG);
|
||||||
event_ptid = deprecated_target_wait_hook (minus_one_ptid, ws, TARGET_WNOHANG);
|
|
||||||
else
|
|
||||||
event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG);
|
|
||||||
|
|
||||||
if (debug_infrun)
|
if (debug_infrun)
|
||||||
print_target_wait_results (minus_one_ptid, event_ptid, *ws);
|
print_target_wait_results (minus_one_ptid, event_ptid, *ws);
|
||||||
|
@ -124,9 +124,8 @@ extern process_stratum_target *user_visible_resume_target (ptid_t resume_ptid);
|
|||||||
extern int normal_stop (void);
|
extern int normal_stop (void);
|
||||||
|
|
||||||
/* Return the cached copy of the last target/ptid/waitstatus returned
|
/* Return the cached copy of the last target/ptid/waitstatus returned
|
||||||
by target_wait()/deprecated_target_wait_hook(). The data is
|
by target_wait(). The data is actually cached by handle_inferior_event(),
|
||||||
actually cached by handle_inferior_event(), which gets called
|
which gets called immediately after target_wait(). */
|
||||||
immediately after target_wait()/deprecated_target_wait_hook(). */
|
|
||||||
extern void get_last_target_status (process_stratum_target **target,
|
extern void get_last_target_status (process_stratum_target **target,
|
||||||
ptid_t *ptid,
|
ptid_t *ptid,
|
||||||
struct target_waitstatus *status);
|
struct target_waitstatus *status);
|
||||||
|
@ -357,7 +357,6 @@ clear_interpreter_hooks (void)
|
|||||||
deprecated_readline_hook = 0;
|
deprecated_readline_hook = 0;
|
||||||
deprecated_readline_end_hook = 0;
|
deprecated_readline_end_hook = 0;
|
||||||
deprecated_context_hook = 0;
|
deprecated_context_hook = 0;
|
||||||
deprecated_target_wait_hook = 0;
|
|
||||||
deprecated_call_command_hook = 0;
|
deprecated_call_command_hook = 0;
|
||||||
deprecated_error_begin_hook = 0;
|
deprecated_error_begin_hook = 0;
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,8 @@ DEFINE_OBSERVABLE (styling_changed);
|
|||||||
DEFINE_OBSERVABLE (current_source_symtab_and_line_changed);
|
DEFINE_OBSERVABLE (current_source_symtab_and_line_changed);
|
||||||
DEFINE_OBSERVABLE (gdb_exiting);
|
DEFINE_OBSERVABLE (gdb_exiting);
|
||||||
DEFINE_OBSERVABLE (connection_removed);
|
DEFINE_OBSERVABLE (connection_removed);
|
||||||
|
DEFINE_OBSERVABLE (target_pre_wait);
|
||||||
|
DEFINE_OBSERVABLE (target_post_wait);
|
||||||
|
|
||||||
} /* namespace observers */
|
} /* namespace observers */
|
||||||
} /* namespace gdb */
|
} /* namespace gdb */
|
||||||
|
@ -256,6 +256,12 @@ extern observable<int> gdb_exiting;
|
|||||||
/* When a connection is removed. */
|
/* When a connection is removed. */
|
||||||
extern observable<process_stratum_target */* target */> connection_removed;
|
extern observable<process_stratum_target */* target */> connection_removed;
|
||||||
|
|
||||||
|
/* About to enter target_wait (). */
|
||||||
|
extern observable <ptid_t /* ptid */> target_pre_wait;
|
||||||
|
|
||||||
|
/* About to leave target_wait (). */
|
||||||
|
extern observable <ptid_t /* event_ptid */> target_post_wait;
|
||||||
|
|
||||||
} /* namespace observers */
|
} /* namespace observers */
|
||||||
|
|
||||||
} /* namespace gdb */
|
} /* namespace gdb */
|
||||||
|
14
gdb/target.c
14
gdb/target.c
@ -26,6 +26,7 @@
|
|||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
#include "infrun.h"
|
#include "infrun.h"
|
||||||
|
#include "observable.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
#include "objfiles.h"
|
#include "objfiles.h"
|
||||||
@ -2609,7 +2610,18 @@ target_wait (ptid_t ptid, struct target_waitstatus *status,
|
|||||||
if (!target_can_async_p (target))
|
if (!target_can_async_p (target))
|
||||||
gdb_assert ((options & TARGET_WNOHANG) == 0);
|
gdb_assert ((options & TARGET_WNOHANG) == 0);
|
||||||
|
|
||||||
return target->wait (ptid, status, options);
|
try
|
||||||
|
{
|
||||||
|
gdb::observers::target_pre_wait.notify (ptid);
|
||||||
|
ptid_t event_ptid = target->wait (ptid, status, options);
|
||||||
|
gdb::observers::target_post_wait.notify (event_ptid);
|
||||||
|
return event_ptid;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
gdb::observers::target_post_wait.notify (null_ptid);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See target.h. */
|
/* See target.h. */
|
||||||
|
@ -247,13 +247,6 @@ void (*deprecated_readline_end_hook) (void);
|
|||||||
void (*deprecated_attach_hook) (void);
|
void (*deprecated_attach_hook) (void);
|
||||||
void (*deprecated_detach_hook) (void);
|
void (*deprecated_detach_hook) (void);
|
||||||
|
|
||||||
/* Called when going to wait for the target. Usually allows the GUI
|
|
||||||
to run while waiting for target events. */
|
|
||||||
|
|
||||||
ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
|
|
||||||
struct target_waitstatus *status,
|
|
||||||
int options);
|
|
||||||
|
|
||||||
/* Used by UI as a wrapper around command execution. May do various
|
/* Used by UI as a wrapper around command execution. May do various
|
||||||
things like enabling/disabling buttons, etc... */
|
things like enabling/disabling buttons, etc... */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user