diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 299064f5802..bc6cb5813f9 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'. */ diff --git a/gdb/testsuite/gdb.cp/disasm-func-name.exp b/gdb/testsuite/gdb.cp/disasm-func-name.exp index 0d37fbd200a..0b5dd15115f 100644 --- a/gdb/testsuite/gdb.cp/disasm-func-name.exp +++ b/gdb/testsuite/gdb.cp/disasm-func-name.exp @@ -43,3 +43,26 @@ check_disassembly_header "process" "process\\(A\\*, int\\)" check_disassembly_header "A::A" "A::A\\(int\\)" check_disassembly_header "A::get_i" "A::get_i\\(\\) const" check_disassembly_header "A::set_i" "A::set_i\\(int\\)" + +# Place a breakpoint at STOP_LOC and then continue until a breakpoint +# is hit (we assume this is the breakpoint we just created. +# +# Then disassemble the current function, EXPECT should appear in the +# disassembly header as the name of the current function. +proc continue_and_check { stop_loc expected } { + gdb_breakpoint $stop_loc + gdb_continue_to_breakpoint "continue to $stop_loc" + + with_test_prefix "at $stop_loc" { + check_disassembly_header "" $expected + } +} + +# Initially we are already in main. +check_disassembly_header "" "main\\(\\)" + +# Now move forward and check the disassembly at various locations. +continue_and_check "A::A" "A::A\\(int\\)" +continue_and_check "process" "process\\(A\\*, int\\)" +continue_and_check "A::set_i" "A::set_i\\(int\\)" +continue_and_check "A::get_i" "A::get_i\\(\\) const"