From: Vasili Burdo <vasili.burdo@gmail.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] TUI disassembly window improvemenmt
Date: Tue, 8 Jun 2021 19:16:20 +0300 [thread overview]
Message-ID: <CANacp63m7cPtnWOgRduPgk0U4Wj3UnvpXR1H+x=pThh19V4iGw@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 434 bytes --]
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
[-- Attachment #2: vburdo-tui-asm.patch --]
[-- Type: text/x-patch, Size: 3638 bytes --]
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<tui_asm_line> &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<tui_asm_line> 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;
next reply other threads:[~2021-06-08 16:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-08 16:16 Vasili Burdo [this message]
2021-06-08 16:21 ` Simon Marchi
2021-06-09 12:33 ` Eli Zaretskii
2021-06-09 12:56 ` Vasili Burdo
2021-06-09 13:05 ` Eli Zaretskii
2021-06-09 13:16 ` Vasili Burdo
2021-06-09 13:43 ` Eli Zaretskii
[not found] ` <CANacp62RQ4eTK+YYcukgxh=MzmAAdvK5AYTPe6RZubhejMePeg@mail.gmail.com>
2021-06-09 16:02 ` Fwd: " Vasili Burdo
2021-06-09 17:14 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CANacp63m7cPtnWOgRduPgk0U4Wj3UnvpXR1H+x=pThh19V4iGw@mail.gmail.com' \
--to=vasili.burdo@gmail.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).