From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vk1-xa2d.google.com (mail-vk1-xa2d.google.com [IPv6:2607:f8b0:4864:20::a2d]) by sourceware.org (Postfix) with ESMTPS id 8ACDA395C828 for ; Tue, 8 Jun 2021 16:22:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8ACDA395C828 Received: by mail-vk1-xa2d.google.com with SMTP id h19so289801vkh.9 for ; Tue, 08 Jun 2021 09:22:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=X+GW1yvaXq3ZMR8RxnpUGbNB2wASrptAgehG+aTp3i0=; b=IBCPWUYIPZOdC4yWnnKCR0JlQihUjHmpsvPBEtrJ96V8Da4EMpie28rzskBcUFVDLx BNZPUR3KviJA+lz8Wj39mlDChnEYuZqJurZh9cpWM+fPSzmLtckNP73fJv6pziIWQLjB A8FV+/DAej+WEOpRl2QWUnoY5FzphW6FPvHThkqWA1QRjDg0D/z6sWn8MHVRwPMqbkSI OCcCGzQhrktS4wV+h90rRiIZtpf3o4MB+iVmeL+oS/Vhd5nzR7a7M570K5YFc/H9BQHc oaiiEp9DaCTHsDQYW9SpSwDjFJsKc9VhvraXn5Jki4GGhvS4jPCHmYsogln88z5Tcbdv SPgA== X-Gm-Message-State: AOAM530TveMUINidPZig9yDgehvVCQ/Sbo+WlBK2kFKbubOI0Yqt9iPA Kbpn9QVz0H6pvjKkPsf75vkmPcpi/g/qkfNawAru17JdMyCiLA== X-Google-Smtp-Source: ABdhPJyR7AF36Ep2m8mcsn8eWF0Rc1qa+cQkCo6Yiz74HCn8PgqU77dAOUhaO53VtHWdgN5TH7IUg+d5FtB0HcbuNOs= X-Received: by 2002:a05:6122:7d2:: with SMTP id l18mr819530vkr.20.1623169322825; Tue, 08 Jun 2021 09:22:02 -0700 (PDT) MIME-Version: 1.0 From: Vasili Burdo Date: Tue, 8 Jun 2021 19:21:51 +0300 Message-ID: Subject: [PATCH] TUI disassembly window improvement - patch inline To: gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jun 2021 16:22:05 -0000 Hi, I implemented a small update to TUI disassembly window - see attachment. This patch removes function name from disassembly listing leaving only offset from function start. The reason for it - disassembly TUI is almost unusable in case of C++ functions - their names (especially templated ones) are very long and thus litter disassembly view. Please, look at sample screenshots here: https://imgur.com/a/GlkVXGi Thanks, Vasili ------------------- diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 163552aede4..e6ddfcd90cc 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -27,6 +27,7 @@ #include "value.h" #include "source.h" #include "disasm.h" +#include "valprint.h" #include "tui/tui.h" #include "tui/tui-command.h" #include "tui/tui-data.h" @@ -48,6 +49,7 @@ struct tui_asm_line { CORE_ADDR addr; std::string addr_string; + std::string func_string; size_t addr_size; std::string insn; }; @@ -101,7 +103,8 @@ static CORE_ADDR tui_disassemble (struct gdbarch *gdbarch, std::vector &asm_lines, CORE_ADDR pc, int count, - size_t *addr_size = nullptr) + size_t *addr_size = nullptr, + bool for_ui = false) { bool term_out = source_styling && gdb_stdout->can_emit_style_escape (); string_file gdb_dis_out (term_out); @@ -110,7 +113,7 @@ tui_disassemble (struct gdbarch *gdbarch, asm_lines.clear (); /* Now construct each line. */ - for (int i = 0; i < count; ++i) + while (asm_lines.size() < count) { tui_asm_line tal; CORE_ADDR orig_pc = pc; @@ -135,8 +138,45 @@ tui_disassemble (struct gdbarch *gdbarch, /* And capture the address the instruction is at. */ tal.addr = orig_pc; - print_address (gdbarch, orig_pc, &gdb_dis_out); - tal.addr_string = std::move (gdb_dis_out.string ()); + if(for_ui) + { + std::string name, filename; + int unmapped = 0, offset = 0, line = 0; + + if (0 == build_address_symbolic (gdbarch, orig_pc, asm_demangle, false, + &name, &offset, &filename, &line, &unmapped)) + { + if (0 == offset) + { + tui_asm_line tal2 = tal; + fputs_styled (name.c_str (), function_name_style.style (), &gdb_dis_out); + fputs_filtered (":", &gdb_dis_out); + tal2.func_string = name; + tal2.addr_string = std::move (gdb_dis_out.string ()); + tal2.addr_size = 0; + tal2.insn.clear (); + gdb_dis_out.clear (); + + asm_lines.push_back (std::move (tal2)); + } + + fputs_styled (paddress (gdbarch, orig_pc), address_style.style (), &gdb_dis_out); + fputs_filtered (" <", &gdb_dis_out); + if (unmapped) + fputs_filtered ("*", &gdb_dis_out); + fprintf_styled (&gdb_dis_out, address_style.style(), "%+d", offset); + if (unmapped) + fputs_filtered ("*", &gdb_dis_out); + fputs_filtered (">", &gdb_dis_out); + tal.addr_string = std::move (gdb_dis_out.string ()); + tal.func_string = std::move (name); + } + } + else + { + print_address (gdbarch, orig_pc, &gdb_dis_out); + tal.addr_string = std::move (gdb_dis_out.string ()); + } gdb_dis_out.clear (); if (addr_size != nullptr) @@ -342,7 +382,12 @@ tui_disasm_window::set_contents (struct gdbarch *arch, /* Get temporary table that will hold all strings (addr & insn). */ std::vector asm_lines; size_t addr_size = 0; - tui_disassemble (m_gdbarch, asm_lines, pc, max_lines, &addr_size); + tui_disassemble (m_gdbarch, asm_lines, pc, max_lines, &addr_size, true); + + /* Set title to current function name */ + title.clear(); + if (asm_lines.size()) + title = asm_lines.front().func_string; /* Align instructions to the same column. */ insn_pos = (1 + (addr_size / tab_len)) * tab_len; -------------------