aboutsummaryrefslogtreecommitdiff
path: root/gdb/cli
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2024-11-18 10:58:26 +0000
committerAndrew Burgess <aburgess@redhat.com>2024-11-22 16:36:07 +0000
commit26522e34802f32406eb653d91a3bbb509f919b30 (patch)
tree0c974af46ea3ffbafbee4c8be864e125348c4025 /gdb/cli
parent8a7f13063a6d5314cfde5b4f1dc49afa2922cf8c (diff)
downloadbinutils-26522e34802f32406eb653d91a3bbb509f919b30.zip
binutils-26522e34802f32406eb653d91a3bbb509f919b30.tar.gz
binutils-26522e34802f32406eb653d91a3bbb509f919b30.tar.bz2
gdb/disasm: fix demangling when disassembling the current function
When disassembling function symbols in C++ code, if GDB is asked to disassemble a function by name then the function name in the header line can be demangled by turning on `set print asm-demangle on`, e.g.: (gdb) disassemble foo_type::some_function Dump of assembler code for function _ZN8foo_type13some_functionE7my_type: 0x0000000000401142 <+0>: push %rbp ... etc ... End of assembler dump. (gdb) set print asm-demangle on (gdb) disassemble foo_type::some_function Dump of assembler code for function foo_type::some_function(my_type): 0x0000000000401142 <+0>: push %rbp ... etc ... │ End of assembler dump. │ However, if GDB is disassembling the current function, then this demangling doesn't work, e.g.: (gdb) break foo_type::some_function Breakpoint 1 at 0x401152: file mangle.cc, line 16. (gdb) run Starting program: /tmp/mangle Breakpoint 1, foo_type::some_function (this=0x7fffffffa597, obj=...) at mangle.cc:16 16 obj.update (); (gdb) disassemble Dump of assembler code for function _ZN8foo_type13some_functionE7my_type: 0x0000000000401142 <+0>: push %rbp ... etc ... End of assembler dump. (gdb) set print asm-demangle on (gdb) disassemble Dump of assembler code for function _ZN8foo_type13some_functionE7my_type: 0x0000000000401142 <+0>: push %rbp ... etc ... End of assembler dump. This commit fixes this issue, and extends gdb.cp/disasm-func-name.exp, which was already testing the first case (disassemble by name) to also cover disassembling the current function. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/cli')
-rw-r--r--gdb/cli/cli-cmds.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 299064f..bc6cb58 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -1551,17 +1551,19 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
static void
disassemble_current_function (gdb_disassembly_flags flags)
{
- frame_info_ptr frame;
- struct gdbarch *gdbarch;
- CORE_ADDR low, high, pc;
- const char *name;
- const struct block *block;
+ frame_info_ptr frame = get_selected_frame (_("No frame selected."));
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ CORE_ADDR pc = get_frame_address_in_block (frame);
- frame = get_selected_frame (_("No frame selected."));
- gdbarch = get_frame_arch (frame);
- pc = get_frame_address_in_block (frame);
- if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
+ const general_symbol_info *gsi;
+ const struct block *block;
+ CORE_ADDR low, high;
+ if (find_pc_partial_function_sym (pc, &gsi, &low, &high, &block) == 0)
error (_("No function contains program counter for selected frame."));
+
+ gdb_assert (gsi != nullptr);
+ const char *name = asm_demangle ? gsi->print_name () : gsi->linkage_name ();
+
#if defined(TUI)
/* NOTE: cagney/2003-02-13 The `tui_active' was previously
`tui_version'. */