forked from Imagelibrary/binutils-gdb
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>
This commit is contained in:
@@ -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'. */
|
||||
|
||||
Reference in New Issue
Block a user