TUI disassembly window improvement, take 2

Message ID CANacp61dqXx3isAbsEh4Cq4SSCTj5zo1-d4+J+-Q5e1chrWzXg@mail.gmail.com
State New
Headers show
Series
  • TUI disassembly window improvement, take 2
Related show

Commit Message

Eli Zaretskii via Gdb-patches June 22, 2021, 1:56 p.m.
Hi,

I've got GDB copyright assignment RT:1731775, so, I'm resending my
patch - see attachment.

Previous discussion thread and exlanation what's changed is here:
https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and
here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

Changes in current patch:
- Added changelog entry
- Tom Tromey's comments are addressed.
- Disasm window title is kept intact. Reason - everything important is
already displayed in status line, so, no useful information for title
remains.

Thanks.
Vasili

Comments

Eli Zaretskii via Gdb-patches June 28, 2021, 2:45 p.m. | #1
Ping!

вт, 22 июн. 2021 г. в 16:56, Vasili Burdo <vasili.burdo@gmail.com>:
>

> Hi,

>

> I've got GDB copyright assignment RT:1731775, so, I'm resending my

> patch - see attachment.

>

> Previous discussion thread and exlanation what's changed is here:

> https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and

> here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

>

> Changes in current patch:

> - Added changelog entry

> - Tom Tromey's comments are addressed.

> - Disasm window title is kept intact. Reason - everything important is

> already displayed in status line, so, no useful information for title

> remains.

>

> Thanks.

> Vasili
Eli Zaretskii via Gdb-patches July 2, 2021, 11:43 a.m. | #2
Ping!
2 packets transmitted, 0 received, 100% packet loss, time 3 weeks

Thanks.
Vasili

пн, 28 июн. 2021 г. в 17:45, Vasili Burdo <vasili.burdo@gmail.com>:
>

> Ping!

>

> вт, 22 июн. 2021 г. в 16:56, Vasili Burdo <vasili.burdo@gmail.com>:

> >

> > Hi,

> >

> > I've got GDB copyright assignment RT:1731775, so, I'm resending my

> > patch - see attachment.

> >

> > Previous discussion thread and exlanation what's changed is here:

> > https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and

> > here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

> >

> > Changes in current patch:

> > - Added changelog entry

> > - Tom Tromey's comments are addressed.

> > - Disasm window title is kept intact. Reason - everything important is

> > already displayed in status line, so, no useful information for title

> > remains.

> >

> > Thanks.

> > Vasili
Eli Zaretskii via Gdb-patches July 6, 2021, 11:18 a.m. | #3
Ping!
3 packets transmitted, 0 received, 100% packet loss, time 3.5 weeks

Thanks.
Vasili

пт, 2 июл. 2021 г. в 14:43, Vasili Burdo <vasili.burdo@gmail.com>:
>

> Ping!

> 2 packets transmitted, 0 received, 100% packet loss, time 3 weeks

>

> Thanks.

> Vasili

>

> пн, 28 июн. 2021 г. в 17:45, Vasili Burdo <vasili.burdo@gmail.com>:

> >

> > Ping!

> >

> > вт, 22 июн. 2021 г. в 16:56, Vasili Burdo <vasili.burdo@gmail.com>:

> > >

> > > Hi,

> > >

> > > I've got GDB copyright assignment RT:1731775, so, I'm resending my

> > > patch - see attachment.

> > >

> > > Previous discussion thread and exlanation what's changed is here:

> > > https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and

> > > here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

> > >

> > > Changes in current patch:

> > > - Added changelog entry

> > > - Tom Tromey's comments are addressed.

> > > - Disasm window title is kept intact. Reason - everything important is

> > > already displayed in status line, so, no useful information for title

> > > remains.

> > >

> > > Thanks.

> > > Vasili
Eli Zaretskii via Gdb-patches July 12, 2021, 8:51 p.m. | #4
Ping!
4 packets transmitted, 0 received, 100% packet loss, time 4 weeks

Thanks.
Vasili

вт, 6 июл. 2021 г. в 14:18, Vasili Burdo <vasili.burdo@gmail.com>:
>

> Ping!

> 3 packets transmitted, 0 received, 100% packet loss, time 3.5 weeks

>

> Thanks.

> Vasili

>

> пт, 2 июл. 2021 г. в 14:43, Vasili Burdo <vasili.burdo@gmail.com>:

> >

> > Ping!

> > 2 packets transmitted, 0 received, 100% packet loss, time 3 weeks

> >

> > Thanks.

> > Vasili

> >

> > пн, 28 июн. 2021 г. в 17:45, Vasili Burdo <vasili.burdo@gmail.com>:

> > >

> > > Ping!

> > >

> > > вт, 22 июн. 2021 г. в 16:56, Vasili Burdo <vasili.burdo@gmail.com>:

> > > >

> > > > Hi,

> > > >

> > > > I've got GDB copyright assignment RT:1731775, so, I'm resending my

> > > > patch - see attachment.

> > > >

> > > > Previous discussion thread and exlanation what's changed is here:

> > > > https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and

> > > > here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

> > > >

> > > > Changes in current patch:

> > > > - Added changelog entry

> > > > - Tom Tromey's comments are addressed.

> > > > - Disasm window title is kept intact. Reason - everything important is

> > > > already displayed in status line, so, no useful information for title

> > > > remains.

> > > >

> > > > Thanks.

> > > > Vasili
Eli Zaretskii via Gdb-patches July 16, 2021, 11:25 a.m. | #5
Ping!
5 packets transmitted, 0 received, 100% packet loss, time 4.5 weeks

Thanks.
Vasili

пн, 12 июл. 2021 г. в 23:51, Vasili Burdo <vasili.burdo@gmail.com>:
>

> Ping!

> 4 packets transmitted, 0 received, 100% packet loss, time 4 weeks

>

> Thanks.

> Vasili

>

> вт, 6 июл. 2021 г. в 14:18, Vasili Burdo <vasili.burdo@gmail.com>:

> >

> > Ping!

> > 3 packets transmitted, 0 received, 100% packet loss, time 3.5 weeks

> >

> > Thanks.

> > Vasili

> >

> > пт, 2 июл. 2021 г. в 14:43, Vasili Burdo <vasili.burdo@gmail.com>:

> > >

> > > Ping!

> > > 2 packets transmitted, 0 received, 100% packet loss, time 3 weeks

> > >

> > > Thanks.

> > > Vasili

> > >

> > > пн, 28 июн. 2021 г. в 17:45, Vasili Burdo <vasili.burdo@gmail.com>:

> > > >

> > > > Ping!

> > > >

> > > > вт, 22 июн. 2021 г. в 16:56, Vasili Burdo <vasili.burdo@gmail.com>:

> > > > >

> > > > > Hi,

> > > > >

> > > > > I've got GDB copyright assignment RT:1731775, so, I'm resending my

> > > > > patch - see attachment.

> > > > >

> > > > > Previous discussion thread and exlanation what's changed is here:

> > > > > https://sourceware.org/pipermail/gdb-patches/2021-June/179693.html and

> > > > > here: https://sourceware.org/pipermail/gdb-patches/2021-June/179695.html

> > > > >

> > > > > Changes in current patch:

> > > > > - Added changelog entry

> > > > > - Tom Tromey's comments are addressed.

> > > > > - Disasm window title is kept intact. Reason - everything important is

> > > > > already displayed in status line, so, no useful information for title

> > > > > remains.

> > > > >

> > > > > Thanks.

> > > > > Vasili

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2b04c3c6d73..dda83efed46 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@ 
+2021-06-22  Vasili Burdo <vasili.burdo@gmail.com>
+
+	PR tui/25347
+	* tui/tui-disasm.c (tui_disassemble,tui_disasm_window::set_content): Hide
+	the function names in TUI disassembly view. Instead, display them like
+	assembly language labels.
+
 2021-06-22  Andrew Burgess  <andrew.burgess@embecosm.com>

 	* breakpoint.c (insert_bp_location): If we catch a
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index 163552aede4..b003c11f7ee 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"
@@ -50,6 +51,7 @@  struct tui_asm_line
   std::string addr_string;
   size_t addr_size;
   std::string insn;
+  std::string func_string;
 };

 /* Helper function to find the number of characters in STR, skipping
@@ -92,6 +94,9 @@  len_without_escapes (const std::string &str)
    label into the value pointed to by ADDR_SIZE, and set the addr_size
    field on each item in ASM_LINES, otherwise the addr_size fields within
    ASM_LINES are undefined.
+   FOR_UI boolean flag shows the purpose this function is called for. TRUE
+   means we're going to show ASM_LINES on screen, FALSE means ASM_LINES are
+   used to figure out current scroll position or any other purpose.

    It is worth noting that ASM_LINES might not have COUNT entries when this
    function returns.  If the disassembly is truncated for some other
@@ -101,7 +106,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 +116,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 +141,52 @@  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)
+        { /* If we're rendering 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 || asm_lines.empty ())
+                {/* "offset == 0" means function start,
+                    "asm_lines.empty ()" means top line of output.
+                    For these cases, insert "function header" on top of
+                    "real" disassembly line. */
+                  tui_asm_line tal2 = tal;
+                  fputs_styled (name.c_str (), function_name_style.style (),
+                                &gdb_dis_out);
+                  fputs_filtered (":", &gdb_dis_out);
+                  tal2.addr_string = std::move (gdb_dis_out.string ());
+                  tal2.addr_size = 0;
+                  tal2.insn.clear ();
+                  tal2.func_string = name;
+                  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
+        { /* If we're rendering for some other purpose than UI...
+             Fall back to legacy disassembly line style. */
+          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 +392,7 @@  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);

   /* Align instructions to the same column.  */
   insn_pos = (1 + (addr_size / tab_len)) * tab_len;