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:
Simon Marchi 2020-12-04 16:43:51 -05:00
parent aafdfb4edd
commit 42a4fec513
7 changed files with 26 additions and 12 deletions

View file

@ -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

View file

@ -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 ();

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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.

View file

@ -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."));