Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Ruslan Kabatsayev <b7.10110111@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2] Align natural-format register values to the same column
Date: Wed, 26 Jul 2017 09:33:00 -0000	[thread overview]
Message-ID: <5bce7397bf829abb601f61f6e40877c8@polymtl.ca> (raw)
In-Reply-To: <1501055625-25029-1-git-send-email-b7.10110111@gmail.com>

Hi Ruslan,

Thanks for the update, I just have some minor comments, but otherwise 
the patch looks good to me.

On 2017-07-26 09:53, Ruslan Kabatsayev wrote:
> 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. Lots of tests in the test suite check for it, so this patch 
> retains
> the tab in the output after the second column. This allows these tests 
> to
> continue working unchanged. What is different is that now the tab may 
> be
> followed by several spaces, which complete the task of aligning the 
> third
> column when the sole tab doesn't work well.
> 
> gdb/ChangeLog:
> 
> 	* infcmd.c (default_print_one_register_info): Align natural-
> 	format column value consistently one after another.
> ---
>  gdb/infcmd.c |   35 ++++++++++++++++++++++++++---------
>  1 file changed, 26 insertions(+), 9 deletions(-)
> 
> diff --git a/gdb/infcmd.c b/gdb/infcmd.c
> index defa7b0..56cdee2 100644
> --- a/gdb/infcmd.c
> +++ b/gdb/infcmd.c
> @@ -2270,6 +2270,15 @@ path_command (char *dirname, int from_tty)
>  }
>  \f
> 

Please add a short comment to explain what this function does.

> +static void
> +pad_to_column_prepending_tab (string_file& stream, int col)

The & should go after the space.

> +{
> +  const int size_with_tab = stream.size () / 8 * 8 + 8;
> +  stream.putc ('\t');
> +  if (size_with_tab < col)
> +      stream.puts (n_spaces (col - size_with_tab));
> +}
> +
>  /* Print out the register NAME with value VAL, to FILE, in the default
>     fashion.  */
> 
> @@ -2280,9 +2289,15 @@ 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,
> +	value_column_2=32,

Perhaps those could have more explicit names, like "column_hex" and 
"column_natural"?

Formatting nit: indent those two lines with two columns less (so with 6 
spaces in total) and add spaces around the =.

> +    };
> 
> -  fputs_filtered (name, file);
> -  print_spaces_filtered (15 - strlen (name), file);
> +  format_stream.puts (name);
> +  format_stream.puts (n_spaces (value_column_1 - strlen (name)));
> 
>    print_raw_format = (value_entirely_available (val)
>  		      && !value_optimized_out (val));
> @@ -2301,14 +2316,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,
> +	  pad_to_column_prepending_tab (format_stream, value_column_2);
> +	  format_stream.puts ("(raw ");
> +	  print_hex_chars (&format_stream, valaddr, TYPE_LENGTH (regtype), 
> byte_order,
>  			   true);
> -	  fprintf_filtered (file, ")");
> +	  format_stream.puts (")");
>  	}
>      }
>    else
> @@ -2320,20 +2336,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_prepending_tab (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");
>  }

Thanks,

Simon


  reply	other threads:[~2017-07-26  9:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-26  7:54 Ruslan Kabatsayev
2017-07-26  9:33 ` Simon Marchi [this message]
2017-07-26 10:49   ` Ruslan Kabatsayev
2017-07-26 11:33     ` Simon Marchi

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=5bce7397bf829abb601f61f6e40877c8@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=b7.10110111@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