From patchwork Wed Jul 26 07:53:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruslan Kabatsayev X-Patchwork-Id: 21788 Received: (qmail 59573 invoked by alias); 26 Jul 2017 07:54:44 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 59513 invoked by uid 89); 26 Jul 2017 07:54:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL, BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=H*r:TLS1 X-HELO: mail-lf0-f66.google.com Received: from mail-lf0-f66.google.com (HELO mail-lf0-f66.google.com) (209.85.215.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 26 Jul 2017 07:54:40 +0000 Received: by mail-lf0-f66.google.com with SMTP id w199so3911186lff.2 for ; Wed, 26 Jul 2017 00:54:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=EyKCQ5kBcev1SG+7grBUpJs9J4Ye//Q3IKpL1fLQ9KE=; b=Ey5RkA5y9YqTmwC7Jarn9/4hqTbB6RnzLESIk6tfj1ibFMYaPQZ5TPrg/fk9BcvThu IKds5eKyVCMqKJ7329rLhz8TM+rKnmZ3gmC/vOMG0Qwhyh1OjZ1VyRDU5NNdUXnCAlo8 31DpWNfzrdYPrObx5ETEv6nDQ+NhWSbVvOxuiEEGZctO8u3AVTuxsY6hEpg/p4CoeU9e bti4pZMELAIjDE+p2RaH0hDNXskNswnWP2NiRXRGGoE9D+IoOzLVpqVRRzgamjDsbcMM 8AJR5L5ZNC5KWRLyPNMyy3z187HhsE6iKrtBY0pi0H9o+JbRMYdqb3DVJRFfexPRLlUw 0vRQ== X-Gm-Message-State: AIVw111gk9gK/1S1nSSHY/zLbzjQC7bcRn4M/HHj7hQL4bJ9XfEJEk4b DUQi4kCobKpfATqm X-Received: by 10.25.31.143 with SMTP id f137mr37067lff.43.1501055678241; Wed, 26 Jul 2017 00:54:38 -0700 (PDT) Received: from localhost.localdomain ([91.215.122.25]) by smtp.gmail.com with ESMTPSA id h21sm2364680lfh.33.2017.07.26.00.54.37 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 26 Jul 2017 00:54:37 -0700 (PDT) From: Ruslan Kabatsayev To: gdb-patches@sourceware.org Cc: Ruslan Kabatsayev Subject: [PATCH v2] Align natural-format register values to the same column Date: Wed, 26 Jul 2017 10:53:45 +0300 Message-Id: <1501055625-25029-1-git-send-email-b7.10110111@gmail.com> X-IsSubscribed: yes 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 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) } +static void +pad_to_column_prepending_tab (string_file& stream, int col) +{ + 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, + }; - 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"); }