gdb: add inferior_execd observable
I want to add another action (clearing displaced stepping state) that happens when an inferior execs. I think it would be cleaner to have an observer for this event, rather than have infrun know about each other sub-component. Replace the calls to solib_create_inferior_hook and jit_inferior_created_hook in follow_exec by observers. gdb/ChangeLog: * observable.h (inferior_execd): Declare new observable. * observable.c (inferior_execd): Declare new observable. * infrun.c (follow_exec): Notify inferior_execd observer. * jit.c (jit_inferior_created_hook): Make static. (_initialize_jit): Register inferior_execd observer. * jit.h (jit_inferior_created_hook): Remove declaration. * solib.c (_initialize_solib): Register inferior_execd observer. Change-Id: I000cce00094e23baa67df693d912646b6ae38e44
This commit is contained in:
parent
aafdfb4edd
commit
42a4fec513
7 changed files with 26 additions and 12 deletions
|
@ -1,3 +1,13 @@
|
|||
2020-12-04 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* observable.h (inferior_execd): Declare new observable.
|
||||
* observable.c (inferior_execd): Declare new observable.
|
||||
* infrun.c (follow_exec): Notify inferior_execd observer.
|
||||
* jit.c (jit_inferior_created_hook): Make static.
|
||||
(_initialize_jit): Register inferior_execd observer.
|
||||
* jit.h (jit_inferior_created_hook): Remove declaration.
|
||||
* solib.c (_initialize_solib): Register inferior_execd observer.
|
||||
|
||||
2020-12-04 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR gdb/27003
|
||||
|
|
|
@ -1222,9 +1222,7 @@ follow_exec (ptid_t ptid, const char *exec_file_target)
|
|||
registers. */
|
||||
target_find_description ();
|
||||
|
||||
solib_create_inferior_hook (0);
|
||||
|
||||
jit_inferior_created_hook (inf);
|
||||
gdb::observers::inferior_execd.notify (inf);
|
||||
|
||||
breakpoint_re_set ();
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ static const char jit_break_name[] = "__jit_debug_register_code";
|
|||
|
||||
static const char jit_descriptor_name[] = "__jit_debug_descriptor";
|
||||
|
||||
static void jit_inferior_created_hook (inferior *inf);
|
||||
static void jit_inferior_exit_hook (struct inferior *inf);
|
||||
|
||||
/* An unwinder is registered for every gdbarch. This key is used to
|
||||
|
@ -1230,9 +1231,12 @@ jit_inferior_init (inferior *inf)
|
|||
}
|
||||
}
|
||||
|
||||
/* See jit.h. */
|
||||
/* Looks for the descriptor and registration symbols and breakpoints
|
||||
the registration function. If it finds both, it registers all the
|
||||
already JITed code. If it has already found the symbols, then it
|
||||
doesn't try again. */
|
||||
|
||||
void
|
||||
static void
|
||||
jit_inferior_created_hook (inferior *inf)
|
||||
{
|
||||
jit_inferior_init (inf);
|
||||
|
@ -1337,6 +1341,7 @@ _initialize_jit ()
|
|||
&setdebuglist, &showdebuglist);
|
||||
|
||||
gdb::observers::inferior_created.attach (jit_inferior_created_hook);
|
||||
gdb::observers::inferior_execd.attach (jit_inferior_created_hook);
|
||||
gdb::observers::inferior_exit.attach (jit_inferior_exit_hook);
|
||||
gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
|
||||
|
||||
|
|
|
@ -103,13 +103,6 @@ struct jited_objfile_data
|
|||
CORE_ADDR addr;
|
||||
};
|
||||
|
||||
/* Looks for the descriptor and registration symbols and breakpoints
|
||||
the registration function. If it finds both, it registers all the
|
||||
already JITed code. If it has already found the symbols, then it
|
||||
doesn't try again. */
|
||||
|
||||
extern void jit_inferior_created_hook (inferior *inf);
|
||||
|
||||
/* Re-establish the jit breakpoint(s). */
|
||||
|
||||
extern void jit_breakpoint_re_set (void);
|
||||
|
|
|
@ -43,6 +43,7 @@ DEFINE_OBSERVABLE (command_error);
|
|||
DEFINE_OBSERVABLE (target_changed);
|
||||
DEFINE_OBSERVABLE (executable_changed);
|
||||
DEFINE_OBSERVABLE (inferior_created);
|
||||
DEFINE_OBSERVABLE (inferior_execd);
|
||||
DEFINE_OBSERVABLE (record_changed);
|
||||
DEFINE_OBSERVABLE (solib_loaded);
|
||||
DEFINE_OBSERVABLE (solib_unloaded);
|
||||
|
|
|
@ -89,6 +89,9 @@ extern observable<> executable_changed;
|
|||
information on the inferior has been printed. */
|
||||
extern observable<inferior */* inferior */> inferior_created;
|
||||
|
||||
/* The inferior INF has exec'ed a new executable file. */
|
||||
extern observable<struct inferior */* inf */> inferior_execd;
|
||||
|
||||
/* The status of process record for inferior inferior in gdb has
|
||||
changed. The process record is started if STARTED is true, and
|
||||
the process record is stopped if STARTED is false.
|
||||
|
|
|
@ -1557,6 +1557,10 @@ _initialize_solib ()
|
|||
solib_data = gdbarch_data_register_pre_init (solib_init);
|
||||
|
||||
gdb::observers::free_objfile.attach (remove_user_added_objfile);
|
||||
gdb::observers::inferior_execd.attach ([] (inferior *inf)
|
||||
{
|
||||
solib_create_inferior_hook (0);
|
||||
});
|
||||
|
||||
add_com ("sharedlibrary", class_files, sharedlibrary_command,
|
||||
_("Load shared object library symbols for files matching REGEXP."));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue