This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Align natural-format register values to the same column


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e813d34aaabee0ca034fa5ddd50e76ade80318bc

commit e813d34aaabee0ca034fa5ddd50e76ade80318bc
Author: Ruslan Kabatsayev <b7.10110111@gmail.com>
Date:   Fri Jan 19 09:15:39 2018 +0300

    Align natural-format register values to the same column
    
    Currently, commands such as "info reg", "info all-reg", as well as register
    window in the TUI print badly aligned columns, like here:
    
    eax            0x1      1
    ecx            0xffffd3e0       -11296
    edx            0xffffd404       -11260
    ebx            0xf7fa5ff4       -134586380
    esp            0xffffd390       0xffffd390
    ebp            0xffffd3c8       0xffffd3c8
    esi            0x0      0
    edi            0x0      0
    eip            0x8048b60        0x8048b60 <main+16>
    eflags         0x286    [ PF SF IF ]
    cs             0x23     35
    ss             0x2b     43
    ds             0x2b     43
    es             0x2b     43
    fs             0x0      0
    gs             0x63     99
    
    After this patch, these commands print the third column values consistently
    aligned one under another, provided the second column is not too long.
    Originally, the third column was (attempted to be) aligned using a simple tab
    character. This patch changes the alignment to spaces only. The tests checking
    the output and expecting the single tab have been fixed in a previous patch, so
    this change doesn't break any.
    
    gdb/ChangeLog:
    
    	* infcmd.c (default_print_one_register_info): Align natural-format
    	column values consistently one under another.
    	(pad_to_column): New function.

Diff:
---
 gdb/ChangeLog |  6 ++++++
 gdb/infcmd.c  | 40 ++++++++++++++++++++++++++++++----------
 2 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7850982..2880cb9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-05  Ruslan Kabatsayev <b7.10110111@gmail.com>
+
+	* infcmd.c (default_print_one_register_info): Align natural-format
+	column values consistently one under another.
+	(pad_to_column): New function.
+
 2018-02-05  Joel Brobecker  <brobecker@adacore.com>
 
 	* dwarf2read.c (dwarf2_physname): Move commment.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index ccf08bd..3879df3 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2283,6 +2283,16 @@ path_command (const char *dirname, int from_tty)
 }
 
 
+static void
+pad_to_column (string_file &stream, int col)
+{
+  /* At least one space must be printed to separate columns.  */
+  stream.putc (' ');
+  const int size = stream.size ();
+  if (size < col)
+    stream.puts (n_spaces (col - size));
+}
+
 /* Print out the register NAME with value VAL, to FILE, in the default
    fashion.  */
 
@@ -2293,9 +2303,17 @@ default_print_one_register_info (struct ui_file *file,
 {
   struct type *regtype = value_type (val);
   int print_raw_format;
+  string_file format_stream;
+  enum tab_stops
+    {
+      value_column_1 = 15,
+      /* Give enough room for "0x", 16 hex digits and two spaces in
+         preceding column.  */
+      value_column_2 = value_column_1 + 2 + 16 + 2,
+    };
 
-  fputs_filtered (name, file);
-  print_spaces_filtered (15 - strlen (name), file);
+  format_stream.puts (name);
+  pad_to_column (format_stream, value_column_1);
 
   print_raw_format = (value_entirely_available (val)
 		      && !value_optimized_out (val));
@@ -2314,14 +2332,15 @@ default_print_one_register_info (struct ui_file *file,
 
       val_print (regtype,
 		 value_embedded_offset (val), 0,
-		 file, 0, val, &opts, current_language);
+		 &format_stream, 0, val, &opts, current_language);
 
       if (print_raw_format)
 	{
-	  fprintf_filtered (file, "\t(raw ");
-	  print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order,
-			   true);
-	  fprintf_filtered (file, ")");
+	  pad_to_column (format_stream, value_column_2);
+	  format_stream.puts ("(raw ");
+	  print_hex_chars (&format_stream, valaddr, TYPE_LENGTH (regtype),
+			   byte_order, true);
+	  format_stream.putc (')');
 	}
     }
   else
@@ -2333,20 +2352,21 @@ default_print_one_register_info (struct ui_file *file,
       opts.deref_ref = 1;
       val_print (regtype,
 		 value_embedded_offset (val), 0,
-		 file, 0, val, &opts, current_language);
+		 &format_stream, 0, val, &opts, current_language);
       /* If not a vector register, print it also according to its
 	 natural format.  */
       if (print_raw_format && TYPE_VECTOR (regtype) == 0)
 	{
+	  pad_to_column (format_stream, value_column_2);
 	  get_user_print_options (&opts);
 	  opts.deref_ref = 1;
-	  fprintf_filtered (file, "\t");
 	  val_print (regtype,
 		     value_embedded_offset (val), 0,
-		     file, 0, val, &opts, current_language);
+		     &format_stream, 0, val, &opts, current_language);
 	}
     }
 
+  fputs_filtered (format_stream.c_str (), file);
   fprintf_filtered (file, "\n");
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]