From 37563b8beb5df0a7358fa6780a63edf5d3c447a1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Darche?= Date: Mon, 20 Oct 2025 15:07:33 -0400 Subject: [PATCH] gdb: lookup minsym using section in find_sal_for_pc_sect The find_sal_for_pc_sect function attempts to find the line that is closest to a pc+section in the available symbols. One of the first thing the function does is search for a bound minimal symbol corresponding to that pc. In its original version, the lookup is performed by lookup_minimal_symbol_by_pc, discarding the section. This is misleading and may cause issues with overlay debugging if a second minsym with the same pc (but a different section) can be found -- although this is only in theory after inspecting the code, as I have no way to test this on a system supporting overlays. This should have no observable effects for the end user. One slight benefit is that we can avoid a section lookup inside lookup_minimal_symbol_by_pc_section if the caller does provide a section. Since the section is already passed as an argument to the function, the proposed change forwards this section to the minsym lookup section. Approved-By: Tom Tromey Change-Id: I86a16bf397ea7167d3e9c7db79b8d7901fad1a97 --- gdb/symtab.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index 2b54d245b86..0ddb25f2879 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2965,7 +2965,7 @@ find_sal_for_pc_sect (CORE_ADDR pc, struct obj_section *section, int notcurrent) * rather than the stub address. * * Assumptions being made about the minimal symbol table: - * 1. lookup_minimal_symbol_by_pc() will return a trampoline only + * 1. lookup_minimal_symbol_by_pc_section() will return a trampoline only * if we're really in the trampoline.s If we're beyond it (say * we're in "foo" in the above example), it'll have a closer * symbol (the "foo" text symbol for example) and will not @@ -2976,7 +2976,7 @@ find_sal_for_pc_sect (CORE_ADDR pc, struct obj_section *section, int notcurrent) * check for the address being the same, to avoid an * infinite recursion. */ - bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (pc); + bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc_section (pc, section); if (msymbol.minsym != NULL) if (msymbol.minsym->type () == mst_solib_trampoline) { -- 2.47.3