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>
|
2020-12-04 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
PR gdb/27003
|
PR gdb/27003
|
||||||
|
|
|
@ -1222,9 +1222,7 @@ follow_exec (ptid_t ptid, const char *exec_file_target)
|
||||||
registers. */
|
registers. */
|
||||||
target_find_description ();
|
target_find_description ();
|
||||||
|
|
||||||
solib_create_inferior_hook (0);
|
gdb::observers::inferior_execd.notify (inf);
|
||||||
|
|
||||||
jit_inferior_created_hook (inf);
|
|
||||||
|
|
||||||
breakpoint_re_set ();
|
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 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);
|
static void jit_inferior_exit_hook (struct inferior *inf);
|
||||||
|
|
||||||
/* An unwinder is registered for every gdbarch. This key is used to
|
/* 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_created_hook (inferior *inf)
|
||||||
{
|
{
|
||||||
jit_inferior_init (inf);
|
jit_inferior_init (inf);
|
||||||
|
@ -1337,6 +1341,7 @@ _initialize_jit ()
|
||||||
&setdebuglist, &showdebuglist);
|
&setdebuglist, &showdebuglist);
|
||||||
|
|
||||||
gdb::observers::inferior_created.attach (jit_inferior_created_hook);
|
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::inferior_exit.attach (jit_inferior_exit_hook);
|
||||||
gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
|
gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
|
||||||
|
|
||||||
|
|
|
@ -103,13 +103,6 @@ struct jited_objfile_data
|
||||||
CORE_ADDR addr;
|
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). */
|
/* Re-establish the jit breakpoint(s). */
|
||||||
|
|
||||||
extern void jit_breakpoint_re_set (void);
|
extern void jit_breakpoint_re_set (void);
|
||||||
|
|
|
@ -43,6 +43,7 @@ DEFINE_OBSERVABLE (command_error);
|
||||||
DEFINE_OBSERVABLE (target_changed);
|
DEFINE_OBSERVABLE (target_changed);
|
||||||
DEFINE_OBSERVABLE (executable_changed);
|
DEFINE_OBSERVABLE (executable_changed);
|
||||||
DEFINE_OBSERVABLE (inferior_created);
|
DEFINE_OBSERVABLE (inferior_created);
|
||||||
|
DEFINE_OBSERVABLE (inferior_execd);
|
||||||
DEFINE_OBSERVABLE (record_changed);
|
DEFINE_OBSERVABLE (record_changed);
|
||||||
DEFINE_OBSERVABLE (solib_loaded);
|
DEFINE_OBSERVABLE (solib_loaded);
|
||||||
DEFINE_OBSERVABLE (solib_unloaded);
|
DEFINE_OBSERVABLE (solib_unloaded);
|
||||||
|
|
|
@ -89,6 +89,9 @@ extern observable<> executable_changed;
|
||||||
information on the inferior has been printed. */
|
information on the inferior has been printed. */
|
||||||
extern observable<inferior */* inferior */> inferior_created;
|
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
|
/* The status of process record for inferior inferior in gdb has
|
||||||
changed. The process record is started if STARTED is true, and
|
changed. The process record is started if STARTED is true, and
|
||||||
the process record is stopped if STARTED is false.
|
the process record is stopped if STARTED is false.
|
||||||
|
|
|
@ -1557,6 +1557,10 @@ _initialize_solib ()
|
||||||
solib_data = gdbarch_data_register_pre_init (solib_init);
|
solib_data = gdbarch_data_register_pre_init (solib_init);
|
||||||
|
|
||||||
gdb::observers::free_objfile.attach (remove_user_added_objfile);
|
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,
|
add_com ("sharedlibrary", class_files, sharedlibrary_command,
|
||||||
_("Load shared object library symbols for files matching REGEXP."));
|
_("Load shared object library symbols for files matching REGEXP."));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue