* [PATCH 0/5] Random cleanup patches
@ 2024-02-06 17:14 Simon Marchi
2024-02-06 17:14 ` [PATCH 1/5] gdb: add program_space parameter to mark_breakpoints_out Simon Marchi
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Here are some more preparatory patches that are in the series I'm
currently working on. I think they make sense on their own, so here
they are.
Simon Marchi (5):
gdb: add program_space parameter to mark_breakpoints_out
gdb: add inferior parameter to breakpoint_init_inferior
gdb: add program_space parameter to disable_breakpoints_in_shlibs
gdb: add program_space parameter to clear_solib
gdb: remove unnecessary nullptr check in remove_user_added_objfile
gdb/breakpoint.c | 35 +++++++++++------------------------
gdb/breakpoint.h | 22 ++++++++++++++++++----
gdb/corelow.c | 2 +-
gdb/infcmd.c | 10 +++++-----
gdb/infrun.c | 6 +++---
gdb/solib.c | 23 +++++++++++++----------
gdb/solib.h | 6 +++---
gdb/symtab.h | 4 ----
gdb/target.c | 4 ++--
gdb/windows-nat.c | 2 +-
10 files changed, 57 insertions(+), 57 deletions(-)
base-commit: 6fdf95ae532c61263e19e2036cfe3057bb928385
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/5] gdb: add program_space parameter to mark_breakpoints_out
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
@ 2024-02-06 17:14 ` Simon Marchi
2024-02-06 17:14 ` [PATCH 2/5] gdb: add inferior parameter to breakpoint_init_inferior Simon Marchi
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Make the current_program_space reference bubble up one level.
Change-Id: Idc8ed78d23bf3bb2969f6963d8cc049f26901c29
---
gdb/breakpoint.c | 8 ++++----
gdb/breakpoint.h | 5 +++--
gdb/infrun.c | 2 +-
gdb/target.c | 2 +-
4 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 7d1171ec35eb..d844ef7baf25 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4216,13 +4216,13 @@ remove_breakpoint (struct bp_location *bl)
return remove_breakpoint_1 (bl, REMOVE_BREAKPOINT);
}
-/* Clear the "inserted" flag in all breakpoints. */
+/* See breakpoint.h. */
void
-mark_breakpoints_out (void)
+mark_breakpoints_out (program_space *pspace)
{
for (bp_location *bl : all_bp_locations ())
- if (bl->pspace == current_program_space)
+ if (bl->pspace == pspace)
bl->inserted = 0;
}
@@ -4248,7 +4248,7 @@ breakpoint_init_inferior (enum inf_context context)
if (gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
return;
- mark_breakpoints_out ();
+ mark_breakpoints_out (pspace);
for (breakpoint &b : all_breakpoints_safe ())
{
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 93c49520e8ce..e7bebed2725d 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1764,8 +1764,9 @@ extern void breakpoint_set_inferior (struct breakpoint *b, int inferior);
extern void breakpoint_set_task (struct breakpoint *b, int task);
-/* Clear the "inserted" flag in all breakpoints. */
-extern void mark_breakpoints_out (void);
+/* Clear the "inserted" flag in all breakpoints locations in PSPACE. */
+
+extern void mark_breakpoints_out (program_space *pspace);
extern struct breakpoint *create_jit_event_breakpoint (struct gdbarch *,
CORE_ADDR);
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 87965fb12742..d00a98906d71 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1247,7 +1247,7 @@ follow_exec (ptid_t ptid, const char *exec_file_target)
value that was overwritten with a TRAP instruction). Since
we now have a new a.out, those shadow contents aren't valid. */
- mark_breakpoints_out ();
+ mark_breakpoints_out (current_program_space);
/* The target reports the exec event to the main thread, even if
some other thread does the exec, and even if the main thread was
diff --git a/gdb/target.c b/gdb/target.c
index ec75f952ea20..e72e22da69a3 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3628,7 +3628,7 @@ generic_mourn_inferior (void)
/* Mark breakpoints uninserted in case something tries to delete a
breakpoint while we delete the inferior's threads (which would
fail, since the inferior is long gone). */
- mark_breakpoints_out ();
+ mark_breakpoints_out (inf->pspace);
if (inf->pid != 0)
exit_inferior (inf);
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/5] gdb: add inferior parameter to breakpoint_init_inferior
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
2024-02-06 17:14 ` [PATCH 1/5] gdb: add program_space parameter to mark_breakpoints_out Simon Marchi
@ 2024-02-06 17:14 ` Simon Marchi
2024-02-06 17:14 ` [PATCH 3/5] gdb: add program_space parameter to disable_breakpoints_in_shlibs Simon Marchi
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
By inspection, I believe that breakpoint_init_inferior doesn't call
anything that relies on the current program space or inferior. So,
add an inferior parameter, to make the current inferior / program space
references bubble up one level.
Change-Id: Ib07b7a6d360e324f6ae1aa502dd314b8cce421b7
---
gdb/breakpoint.c | 22 +++++-----------------
gdb/breakpoint.h | 12 +++++++++++-
gdb/infcmd.c | 10 +++++-----
gdb/infrun.c | 4 ++--
gdb/target.c | 2 +-
5 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index d844ef7baf25..8d8e97400e37 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4226,33 +4226,21 @@ mark_breakpoints_out (program_space *pspace)
bl->inserted = 0;
}
-/* Clear the "inserted" flag in all breakpoints and delete any
- breakpoints which should go away between runs of the program.
-
- Plus other such housekeeping that has to be done for breakpoints
- between runs.
-
- Note: this function gets called at the end of a run (by
- generic_mourn_inferior) and when a run begins (by
- init_wait_for_inferior). */
-
-
+/* See breakpoint.h. */
void
-breakpoint_init_inferior (enum inf_context context)
+breakpoint_init_inferior (inferior *inf, inf_context context)
{
- struct program_space *pspace = current_program_space;
-
/* If breakpoint locations are shared across processes, then there's
nothing to do. */
- if (gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
+ if (gdbarch_has_global_breakpoints (inf->arch ()))
return;
- mark_breakpoints_out (pspace);
+ mark_breakpoints_out (inf->pspace);
for (breakpoint &b : all_breakpoints_safe ())
{
- if (b.has_locations () && b.first_loc ().pspace != pspace)
+ if (b.has_locations () && b.first_loc ().pspace != inf->pspace)
continue;
switch (b.type)
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index e7bebed2725d..8530a7127945 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1515,7 +1515,17 @@ extern struct breakpoint *clone_momentary_breakpoint (struct breakpoint *bpkt);
extern void set_ignore_count (int, int, int);
-extern void breakpoint_init_inferior (enum inf_context);
+/* Clear the "inserted" flag in all breakpoint locations of INF's program space
+ and delete any breakpoints which should go away between runs of the program.
+
+ Plus other such housekeeping that has to be done for breakpoints
+ between runs.
+
+ Note: this function gets called at the end of a run (by
+ generic_mourn_inferior) and when a run begins (by
+ init_wait_for_inferior). */
+
+extern void breakpoint_init_inferior (inferior *inf, inf_context context);
extern void breakpoint_auto_delete (bpstat *);
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 54063b37beb8..4e17a6b06295 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2824,14 +2824,14 @@ detach_command (const char *args, int from_tty)
/* Hold a strong reference to the target while (maybe)
detaching the parent. Otherwise detaching could close the
target. */
- auto target_ref
- = target_ops_ref::new_reference (current_inferior ()->process_target ());
+ inferior *inf = current_inferior ();
+ auto target_ref = target_ops_ref::new_reference (inf->process_target ());
/* Save this before detaching, since detaching may unpush the
process_stratum target. */
bool was_non_stop_p = target_is_non_stop_p ();
- target_detach (current_inferior (), from_tty);
+ target_detach (inf, from_tty);
update_previous_thread ();
@@ -2840,11 +2840,11 @@ detach_command (const char *args, int from_tty)
this within target_detach because that is also used when
following child forks, and in that case we will want to transfer
breakpoints to the child, not delete them. */
- breakpoint_init_inferior (inf_exited);
+ breakpoint_init_inferior (inf, inf_exited);
/* If the solist is global across inferiors, don't clear it when we
detach from a single inferior. */
- if (!gdbarch_has_global_solist (current_inferior ()->arch ()))
+ if (!gdbarch_has_global_solist (inf->arch ()))
no_shared_libraries (nullptr, from_tty);
if (deprecated_detach_hook)
diff --git a/gdb/infrun.c b/gdb/infrun.c
index d00a98906d71..fa68ab8296e9 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1297,7 +1297,7 @@ follow_exec (ptid_t ptid, const char *exec_file_target)
/* We've followed the inferior through an exec. Therefore, the
inferior has essentially been killed & reborn. */
- breakpoint_init_inferior (inf_execd);
+ breakpoint_init_inferior (current_inferior (), inf_execd);
gdb::unique_xmalloc_ptr<char> exec_file_host
= exec_file_find (exec_file_target, nullptr);
@@ -3819,7 +3819,7 @@ init_wait_for_inferior (void)
{
/* These are meaningless until the first time through wait_for_inferior. */
- breakpoint_init_inferior (inf_starting);
+ breakpoint_init_inferior (current_inferior (), inf_starting);
clear_proceed_status (0);
diff --git a/gdb/target.c b/gdb/target.c
index e72e22da69a3..bbc1badc9e19 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3636,7 +3636,7 @@ generic_mourn_inferior (void)
/* Note this wipes step-resume breakpoints, so needs to be done
after exit_inferior, which ends up referencing the step-resume
breakpoints through clear_thread_inferior_resources. */
- breakpoint_init_inferior (inf_exited);
+ breakpoint_init_inferior (inf, inf_exited);
registers_changed ();
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/5] gdb: add program_space parameter to disable_breakpoints_in_shlibs
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
2024-02-06 17:14 ` [PATCH 1/5] gdb: add program_space parameter to mark_breakpoints_out Simon Marchi
2024-02-06 17:14 ` [PATCH 2/5] gdb: add inferior parameter to breakpoint_init_inferior Simon Marchi
@ 2024-02-06 17:14 ` Simon Marchi
2024-02-06 17:14 ` [PATCH 4/5] gdb: add program_space parameter to clear_solib Simon Marchi
2024-02-06 17:14 ` [PATCH 5/5] gdb: remove unnecessary nullptr check in remove_user_added_objfile Simon Marchi
4 siblings, 0 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Make the current_program_space reference bubble up one level.
Change-Id: Ide917aa306bff1872d961244901d79f65d2da62e
---
gdb/breakpoint.c | 7 +++----
gdb/breakpoint.h | 5 ++++-
gdb/solib.c | 2 +-
gdb/windows-nat.c | 2 +-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 8d8e97400e37..5f05657a8b3e 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -7972,11 +7972,10 @@ create_and_insert_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR add
return b;
}
-/* Disable any breakpoints that are on code in shared libraries. Only
- apply to enabled breakpoints, disabled ones can just stay disabled. */
+/* See breakpoint.h. */
void
-disable_breakpoints_in_shlibs (void)
+disable_breakpoints_in_shlibs (program_space *pspace)
{
for (bp_location *loc : all_bp_locations ())
{
@@ -7992,7 +7991,7 @@ disable_breakpoints_in_shlibs (void)
|| (b->type == bp_jit_event)
|| (b->type == bp_hardware_breakpoint)
|| (is_tracepoint (b)))
- && loc->pspace == current_program_space
+ && loc->pspace == pspace
&& !loc->shlib_disabled
&& solib_name_from_address (loc->pspace, loc->address)
)
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 8530a7127945..226e4d06993e 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1802,7 +1802,10 @@ extern void remove_solib_event_breakpoints (void);
delete at next stop disposition. */
extern void remove_solib_event_breakpoints_at_next_stop (void);
-extern void disable_breakpoints_in_shlibs (void);
+/* Disable any breakpoints that are on code in shared libraries in PSPACE.
+ Only apply to enabled breakpoints, disabled ones can just stay disabled. */
+
+extern void disable_breakpoints_in_shlibs (program_space *pspace);
/* This function returns true if B is a catchpoint. */
diff --git a/gdb/solib.c b/gdb/solib.c
index 0a888430cf9b..98cda039a833 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -1187,7 +1187,7 @@ clear_solib (void)
{
const solib_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
- disable_breakpoints_in_shlibs ();
+ disable_breakpoints_in_shlibs (current_program_space);
current_program_space->so_list.clear_and_dispose ([] (solib *so) {
notify_solib_unloaded (current_program_space, *so);
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 48b0d10d24c7..7f3044fc61de 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -1906,7 +1906,7 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
inf = current_inferior ();
if (!inf->target_is_pushed (this))
inf->push_target (this);
- disable_breakpoints_in_shlibs ();
+ disable_breakpoints_in_shlibs (current_program_space);
windows_clear_solib ();
clear_proceed_status (0);
init_wait_for_inferior ();
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 4/5] gdb: add program_space parameter to clear_solib
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
` (2 preceding siblings ...)
2024-02-06 17:14 ` [PATCH 3/5] gdb: add program_space parameter to disable_breakpoints_in_shlibs Simon Marchi
@ 2024-02-06 17:14 ` Simon Marchi
2024-02-07 3:37 ` Simon Marchi
2024-02-06 17:14 ` [PATCH 5/5] gdb: remove unnecessary nullptr check in remove_user_added_objfile Simon Marchi
4 siblings, 1 reply; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Make the current_program_space reference bubble up one level.
Remove one unnecessary declaration of clear_solib.
Change-Id: I234e2c8c0b71713364fc7b76cee2bee2b026bd6d
---
gdb/corelow.c | 2 +-
gdb/solib.c | 21 ++++++++++++---------
gdb/solib.h | 6 +++---
gdb/symtab.h | 4 ----
4 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/gdb/corelow.c b/gdb/corelow.c
index 43c1f69b1317..f291b2aba191 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -335,7 +335,7 @@ core_target::clear_core ()
/* Clear out solib state while the bfd is still open. See
comments in clear_solib in solib.c. */
- clear_solib ();
+ clear_solib (current_program_space);
current_program_space->cbfd.reset (nullptr);
}
diff --git a/gdb/solib.c b/gdb/solib.c
index 98cda039a833..bd69c549b8e8 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -1180,23 +1180,26 @@ solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
return false;
}
-/* Called by free_all_symtabs */
+/* See solib.h. */
void
-clear_solib (void)
+clear_solib (program_space *pspace)
{
- const solib_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
+ inferior *inf = find_inferior_for_program_space (pspace);
+ gdb_assert (inf != nullptr);
+
+ const solib_ops *ops = gdbarch_so_ops (inf->arch ());
- disable_breakpoints_in_shlibs (current_program_space);
+ disable_breakpoints_in_shlibs (pspace);
- current_program_space->so_list.clear_and_dispose ([] (solib *so) {
- notify_solib_unloaded (current_program_space, *so);
- current_program_space->remove_target_sections (so);
+ pspace->so_list.clear_and_dispose ([pspace] (solib *so) {
+ notify_solib_unloaded (pspace, *so);
+ pspace->remove_target_sections (so);
delete so;
});
if (ops->clear_solib != nullptr)
- ops->clear_solib (current_program_space);
+ ops->clear_solib (pspace);
}
/* Shared library startup support. When GDB starts up the inferior,
@@ -1244,7 +1247,7 @@ no_shared_libraries (const char *ignored, int from_tty)
access to their associated objfiles. Therefore, we can not purge the
solibs' objfiles before clear_solib has been called. */
- clear_solib ();
+ clear_solib (current_program_space);
objfile_purge_solibs ();
}
diff --git a/gdb/solib.h b/gdb/solib.h
index 69183278318b..f7a93c0718f0 100644
--- a/gdb/solib.h
+++ b/gdb/solib.h
@@ -42,10 +42,10 @@ extern bool debug_solib;
#define SOLIB_SCOPED_DEBUG_START_END(fmt, ...) \
scoped_debug_start_end (debug_solib, "solib", fmt, ##__VA_ARGS__)
-/* Called when we free all symtabs, to free the shared library information
- as well. */
+/* Called when we free all symtabs of PSPACE, to free the shared library
+ information as well. */
-extern void clear_solib (void);
+extern void clear_solib (program_space *pspace);
/* Called to add symbols from a shared library to gdb's symbol table. */
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 3b067a77b3c8..ca5a5b0f7fde 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -2423,10 +2423,6 @@ extern bool find_line_pc_range (struct symtab_and_line, CORE_ADDR *,
extern void resolve_sal_pc (struct symtab_and_line *);
-/* solib.c */
-
-extern void clear_solib (void);
-
/* The reason we're calling into a completion match list collector
function. */
enum class complete_symbol_mode
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 5/5] gdb: remove unnecessary nullptr check in remove_user_added_objfile
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
` (3 preceding siblings ...)
2024-02-06 17:14 ` [PATCH 4/5] gdb: add program_space parameter to clear_solib Simon Marchi
@ 2024-02-06 17:14 ` Simon Marchi
4 siblings, 0 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-06 17:14 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Since commit 74daa597e74 ("gdb: add all_objfiles_removed observer"), the
objfile passed to the free_objfile observable can't be nullptr.
Change-Id: If215aa051ab43c068b11746938022c7efca09caa
---
gdb/solib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gdb/solib.c b/gdb/solib.c
index bd69c549b8e8..3eb84d814a20 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -1698,7 +1698,7 @@ gdb_bfd_lookup_symbol (bfd *abfd,
static void
remove_user_added_objfile (struct objfile *objfile)
{
- if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
+ if (objfile->flags & OBJF_USERLOADED)
{
for (solib &so : objfile->pspace->solibs ())
if (so.objfile == objfile)
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 4/5] gdb: add program_space parameter to clear_solib
2024-02-06 17:14 ` [PATCH 4/5] gdb: add program_space parameter to clear_solib Simon Marchi
@ 2024-02-07 3:37 ` Simon Marchi
0 siblings, 0 replies; 7+ messages in thread
From: Simon Marchi @ 2024-02-07 3:37 UTC (permalink / raw)
To: Simon Marchi; +Cc: gdb-patches
On 2/6/24 12:14, Simon Marchi wrote:
> Make the current_program_space reference bubble up one level.
>
> Remove one unnecessary declaration of clear_solib.
>
> Change-Id: I234e2c8c0b71713364fc7b76cee2bee2b026bd6d
> ---
> gdb/corelow.c | 2 +-
> gdb/solib.c | 21 ++++++++++++---------
> gdb/solib.h | 6 +++---
> gdb/symtab.h | 4 ----
> 4 files changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/gdb/corelow.c b/gdb/corelow.c
> index 43c1f69b1317..f291b2aba191 100644
> --- a/gdb/corelow.c
> +++ b/gdb/corelow.c
> @@ -335,7 +335,7 @@ core_target::clear_core ()
>
> /* Clear out solib state while the bfd is still open. See
> comments in clear_solib in solib.c. */
> - clear_solib ();
> + clear_solib (current_program_space);
>
> current_program_space->cbfd.reset (nullptr);
> }
> diff --git a/gdb/solib.c b/gdb/solib.c
> index 98cda039a833..bd69c549b8e8 100644
> --- a/gdb/solib.c
> +++ b/gdb/solib.c
> @@ -1180,23 +1180,26 @@ solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
> return false;
> }
>
> -/* Called by free_all_symtabs */
> +/* See solib.h. */
>
> void
> -clear_solib (void)
> +clear_solib (program_space *pspace)
> {
> - const solib_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
> + inferior *inf = find_inferior_for_program_space (pspace);
> + gdb_assert (inf != nullptr);
Thanks to the Linaro CI for pointing it out, this particular change
causes some regressions, for instance in gdb.base/catch-fork-kill.exp.
The assertion fails because inf is nullptr.
We're here:
#0 internal_error_loc (file=0x55adc73f51c0 "/home/smarchi/src/binutils-gdb/gdb/solib.c", line=1189,
fmt=0x55adc73f4b00 "%s: Assertion `%s' failed.") at /home/smarchi/src/binutils-gdb/gdbsupport/errors.cc:57
#1 0x000055adcb297e6d in clear_solib (pspace=0x613000011d80) at /home/smarchi/src/binutils-gdb/gdb/solib.c:1189
#2 0x000055adcb29822e in no_shared_libraries (ignored=0x0, from_tty=0) at /home/smarchi/src/binutils-gdb/gdb/solib.c:1250
#3 0x000055adca9f26d4 in program_space::~program_space (this=0x613000011d80, __in_chrg=<optimized out>)
at /home/smarchi/src/binutils-gdb/gdb/progspace.c:120
#4 0x000055adca0c570c in delete_inferior (inf=0x618000225480) at /home/smarchi/src/binutils-gdb/gdb/inferior.c:302
#5 0x000055adca0c801d in prune_inferiors () at /home/smarchi/src/binutils-gdb/gdb/inferior.c:492
What I observe is that the current inferior is #1, bound to pspace #1,
and we're deleting inferior #2, bound to pspace #2. My change doesn't
work, because at this point inferior #2 has been removed from the
inferior list, so find_inferior_for_program_space returns nullptr.
However, the current code seems wrong too, because we're using inferior
#1's arch to get hold of an solib_ops to call ops->clear_solib on,
despite deleting program space #2, which was bound to inferior #2. It
works here, because both inferiors have the same gdbarch with the same
solib_ops. But it would be possible for the two inferiors to have
different gdbarches and solib_ops.
My upcoming solib series should improve the situation, by having a
backlink from program_space to solib_ops. So we won't need an inferior
here in order to get the solib_ops. In the mean time, I'll try to
revert using current_inferior to get the arch and solib_ops, even though
I know it's wrong.
Simon
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-02-07 3:37 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-06 17:14 [PATCH 0/5] Random cleanup patches Simon Marchi
2024-02-06 17:14 ` [PATCH 1/5] gdb: add program_space parameter to mark_breakpoints_out Simon Marchi
2024-02-06 17:14 ` [PATCH 2/5] gdb: add inferior parameter to breakpoint_init_inferior Simon Marchi
2024-02-06 17:14 ` [PATCH 3/5] gdb: add program_space parameter to disable_breakpoints_in_shlibs Simon Marchi
2024-02-06 17:14 ` [PATCH 4/5] gdb: add program_space parameter to clear_solib Simon Marchi
2024-02-07 3:37 ` Simon Marchi
2024-02-06 17:14 ` [PATCH 5/5] gdb: remove unnecessary nullptr check in remove_user_added_objfile Simon Marchi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).