From 9e76f914f15b51ba5a7fa6e15eed51984ce35a81 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Darche?= Date: Fri, 3 Oct 2025 08:47:55 -0400 Subject: [PATCH] gdb: make find_sal_for_pc_sect attempt to fill sal section The find_sal_for_pc_section function inconsistently fills the section field from its output symtab_and_line, depending on whether a symtab is present or not. In the case that we cannot find a symtab for the pc and section, the function would construct a sal with a pc but no section, even though it could be either forwarded from the arguments, or computed from the pc. With the proposed changes, the function attempts to set the section in all code paths and performs a section lookup when it is not provided as an argument. This change is part of a patch series to fix inconsistencies in symtab_and_line constructions, making it the responsibility of the sal creator to fill out the section field (when possible). This section may be passed from a minsym in an unmapped overlay section. Leaving the section field empty would mean in most cases losing some important context (e.g. which overlay section this pc corresponds to). Approved-By: Tom Tromey Change-Id: I818a08c4f61803b6d2cadd32ec106fe416af4c66 --- gdb/symtab.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gdb/symtab.c b/gdb/symtab.c index 0ddb25f2879..bd3d55eecb0 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2905,6 +2905,13 @@ find_sal_for_pc_sect (CORE_ADDR pc, struct obj_section *section, int notcurrent) CORE_ADDR best_end = 0; struct symtab *best_symtab = 0; + if (section == nullptr) + { + section = find_pc_overlay (pc); + if (section == nullptr) + section = find_pc_section (pc); + } + /* Store here the first line number of a file which contains the line at the smallest pc after PC. If we don't find a line whose range contains PC, @@ -3030,6 +3037,7 @@ find_sal_for_pc_sect (CORE_ADDR pc, struct obj_section *section, int notcurrent) if (notcurrent) pc++; val.pc = pc; + val.section = section; return val; } -- 2.47.3