This is the mail archive of the gdb-patches@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]

[PING][PATCH v3] Align natural-format register values to the same column


Hello all,

Could someone please have a look at this patch?

Regards,
Ruslan

On 19 January 2018 at 10:22, Ruslan Kabatsayev <b7.10110111@gmail.com> 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. 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.
> ---
>  gdb/infcmd.c |   37 ++++++++++++++++++++++++++++---------
>  1 file changed, 28 insertions(+), 9 deletions(-)
>
> diff --git a/gdb/infcmd.c b/gdb/infcmd.c
> index 976276b..c59a8f8 100644
> --- a/gdb/infcmd.c
> +++ b/gdb/infcmd.c
> @@ -2283,6 +2283,15 @@ path_command (const char *dirname, int from_tty)
>  }
>
>
> +static void
> +pad_to_column (string_file& stream, int col)
> +{
> +  stream.putc (' '); /* at least one space must be printed to separate columns */
> +  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 +2302,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);
> +  format_stream.puts (n_spaces (value_column_1 - strlen (name)));
>
>    print_raw_format = (value_entirely_available (val)
>                       && !value_optimized_out (val));
> @@ -2314,14 +2331,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 (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
> @@ -2333,20 +2351,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");
>  }
>
> --
> 1.7.10.2
>


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