From: Tom de Vries Date: Tue, 14 Apr 2026 20:45:23 +0000 (+0200) Subject: [gdb/symtab] Add find_symbol_for_pc_maybe_inline X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3f78b91d1d71df19cb9621268ed3400689d5cf6;p=thirdparty%2Fbinutils-gdb.git [gdb/symtab] Add find_symbol_for_pc_maybe_inline We have function find_symbol_for_pc: ... find_symbol_for_pc (CORE_ADDR pc) { return find_symbol_for_pc_sect (pc, find_pc_mapped_section (pc)); } ... which uses some standard way of getting the section for the given pc. Add a similar function find_symbol_for_pc_maybe_inline that calls find_symbol_for_pc_sect_maybe_inline, and use it in jump_command. Tested on x86_64-linux. Approved-By: Tom Tromey --- diff --git a/gdb/blockframe.c b/gdb/blockframe.c index 59efa391604..ce28d99c7e4 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -152,6 +152,14 @@ find_symbol_for_pc (CORE_ADDR pc) /* See symtab.h. */ +struct symbol * +find_symbol_for_pc_maybe_inline (CORE_ADDR pc) +{ + return find_symbol_for_pc_sect_maybe_inline (pc, find_pc_mapped_section (pc)); +} + +/* See symtab.h. */ + struct symbol * find_symbol_for_pc_sect_maybe_inline (CORE_ADDR pc, struct obj_section *section) { diff --git a/gdb/infcmd.c b/gdb/infcmd.c index c0d12be6e4a..c6519b71abc 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -1249,8 +1249,7 @@ jump_command (const char *arg, int from_tty) /* See if we are trying to jump to another function. */ fn = get_frame_function (get_current_frame ()); - sfn = find_symbol_for_pc_sect_maybe_inline (sal.pc, - find_pc_mapped_section (sal.pc)); + sfn = find_symbol_for_pc_maybe_inline (sal.pc); if (fn != nullptr && sfn != fn) { if (!query (_("Line %ps is not in `%ps'. Jump anyway? "), diff --git a/gdb/symtab.h b/gdb/symtab.h index 6e155192873..0db85bcf5ba 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -2201,6 +2201,12 @@ extern struct type *lookup_enum (const char *, const struct block *); extern struct symbol *find_symbol_for_pc (CORE_ADDR); +/* Lookup the function symbol corresponding to the address. The return value + will be the closest enclosing function, which might be an inline + function. */ + +extern struct symbol *find_symbol_for_pc_maybe_inline (CORE_ADDR pc); + /* lookup the function corresponding to the address and section. The return value will not be an inlined function; the containing function will be returned instead. */