diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index f9b20a7d62d..f378edf865e 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -8018,7 +8018,7 @@ disable_breakpoints_in_shlibs (void) disabled ones can just stay disabled. */ static void -disable_breakpoints_in_unloaded_shlib (struct so_list *solib) +disable_breakpoints_in_unloaded_shlib (program_space *pspace, so_list *solib) { bool disabled_shlib_breaks = false; @@ -8027,7 +8027,7 @@ disable_breakpoints_in_unloaded_shlib (struct so_list *solib) /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */ struct breakpoint *b = loc->owner; - if (solib->pspace == loc->pspace + if (pspace == loc->pspace && !loc->shlib_disabled && (((b->type == bp_breakpoint || b->type == bp_jit_event diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c index d5c6fdd3639..e27e88add86 100644 --- a/gdb/bsd-uthread.c +++ b/gdb/bsd-uthread.c @@ -294,7 +294,7 @@ bsd_uthread_solib_loaded (struct so_list *so) } static void -bsd_uthread_solib_unloaded (struct so_list *so) +bsd_uthread_solib_unloaded (program_space *pspace, so_list *so) { if (!bsd_uthread_solib_name) return; diff --git a/gdb/observable.h b/gdb/observable.h index 464d0b70f5b..62882acca4e 100644 --- a/gdb/observable.h +++ b/gdb/observable.h @@ -101,10 +101,11 @@ extern observable solib_loaded; -/* The shared library specified by SOLIB has been unloaded. Note - that when gdb calls this observer, the library's symbols have not +/* The shared library SOLIB has been unloaded from program space PSPACE. + Note when gdb calls this observer, the library's symbols have not been unloaded yet, and thus are still available. */ -extern observable solib_unloaded; +extern observable + solib_unloaded; /* The symbol file specified by OBJFILE has been loaded. Called with OBJFILE equal to NULL to indicate previously loaded symbol diff --git a/gdb/solib.c b/gdb/solib.c index e2636f06783..f914822d209 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -763,10 +763,10 @@ notify_solib_loaded (so_list *so) /* Notify interpreters and observers that solib SO has been unloaded. */ static void -notify_solib_unloaded (so_list *so) +notify_solib_unloaded (program_space *pspace, so_list *so) { interps_notify_solib_unloaded (so); - gdb::observers::solib_unloaded.notify (so); + gdb::observers::solib_unloaded.notify (pspace, so); } /* See solib.h. */ @@ -869,7 +869,7 @@ update_solib_list (int from_tty) { /* Notify any observer that the shared object has been unloaded before we remove it from GDB's tables. */ - notify_solib_unloaded (gdb); + notify_solib_unloaded (current_program_space, gdb); current_program_space->deleted_solibs.push_back (gdb->so_name); @@ -905,8 +905,6 @@ update_solib_list (int from_tty) /* Fill in the rest of each of the `struct so_list' nodes. */ for (i = inferior; i; i = i->next) { - - i->pspace = current_program_space; current_program_space->added_solibs.push_back (i); try @@ -1237,7 +1235,7 @@ clear_solib (void) struct so_list *so = current_program_space->so_list; current_program_space->so_list = so->next; - notify_solib_unloaded (so); + notify_solib_unloaded (current_program_space, so); current_program_space->remove_target_sections (so); free_so (so); } diff --git a/gdb/solist.h b/gdb/solist.h index 5275a79d811..0f764b264f7 100644 --- a/gdb/solist.h +++ b/gdb/solist.h @@ -55,9 +55,6 @@ struct so_list /* Shared object file name, expanded to something GDB can open. */ char so_name[SO_NAME_MAX_PATH_SIZE]; - /* Program space this shared library belongs to. */ - struct program_space *pspace; - /* The following fields of the structure are built from information gathered from the shared object file itself, and are set when we actually add it to our symbol tables.