From: Simon Marchi <simon.marchi@ericsson.com>
To: Kevin Buettner <kevinb@redhat.com>, <gdb-patches@sourceware.org>
Subject: Re: [PATCH 4/8] Disassemble blocks with non-contiguous ranges
Date: Wed, 01 Aug 2018 02:08:00 -0000 [thread overview]
Message-ID: <207c61c2-4116-7721-11ad-1a648bb16ec4@ericsson.com> (raw)
In-Reply-To: <20180625234911.6096446e@pinnacle.lan>
On 2018-06-26 02:49 AM, Kevin Buettner wrote:
> This patch adds support for disassembly of blocks with non-contiguous
> ranges. These blocks are printed as follows:
>
> (gdb) disassemble foo
> Dump of assembler code for function foo:
> Address range 0x401136 to 0x401151:
> 0x0000000000401136 <+0>: push %rbp
> 0x0000000000401137 <+1>: mov %rsp,%rbp
> 0x000000000040113a <+4>: callq 0x401134 <bar>
> 0x000000000040113f <+9>: mov 0x2eef(%rip),%eax # 0x404034 <e>
> 0x0000000000401145 <+15>: test %eax,%eax
> 0x0000000000401147 <+17>: je 0x40114e <foo+24>
> 0x0000000000401149 <+19>: callq 0x401128 <foo+4294967282>
> 0x000000000040114e <+24>: nop
> 0x000000000040114f <+25>: pop %rbp
> 0x0000000000401150 <+26>: retq
> Address range 0x401128 to 0x401134:
> 0x0000000000401128 <+-14>: push %rbp
> 0x0000000000401129 <+-13>: mov %rsp,%rbp
> 0x000000000040112c <+-10>: callq 0x401126 <baz>
> 0x0000000000401131 <+-5>: nop
> 0x0000000000401132 <+-4>: pop %rbp
> 0x0000000000401133 <+-3>: retq
> End of assembler dump.
>
> This is an actual dump from the test case that I constructed for
> this work. The ranges are printed in the order encountered in the
> debug info. For the above example, note that the second range occupies
> lower addresses than the first range.
>
> Functions with contiguous ranges are still printed as follows:
>
> (gdb) disassemble main
> Dump of assembler code for function main:
> 0x0000000000401151 <+0>: push %rbp
> 0x0000000000401152 <+1>: mov %rsp,%rbp
> 0x0000000000401155 <+4>: callq 0x401136 <foo>
> 0x000000000040115a <+9>: mov $0x0,%eax
> 0x000000000040115f <+14>: pop %rbp
> 0x0000000000401160 <+15>: retq
> End of assembler dump.
>
> gdb/ChangeLog:
>
> * cli/cli-cmds.c (block.h): Include.
> (print_disassembly): Handle printing of non-contiguous blocks.
> (disassemble_current_function): Likewise.
> (disassemble_command): Likewise.
> ---
> gdb/cli/cli-cmds.c | 40 +++++++++++++++++++++++++++++-----------
> 1 file changed, 29 insertions(+), 11 deletions(-)
>
> diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
> index 5c5d6dc..171936c 100644
> --- a/gdb/cli/cli-cmds.c
> +++ b/gdb/cli/cli-cmds.c
> @@ -38,6 +38,7 @@
> #include "tracepoint.h"
> #include "filestuff.h"
> #include "location.h"
> +#include "block.h"
>
> #include "ui-out.h"
>
> @@ -1096,6 +1097,7 @@ list_command (const char *arg, int from_tty)
> static void
> print_disassembly (struct gdbarch *gdbarch, const char *name,
> CORE_ADDR low, CORE_ADDR high,
> + const struct block *b,
> gdb_disassembly_flags flags)
Could you document the new parameter?
> {
> #if defined(TUI)
> @@ -1104,14 +1106,28 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
> {
> printf_filtered ("Dump of assembler code ");
> if (name != NULL)
> - printf_filtered ("for function %s:\n", name);
> - else
> - printf_filtered ("from %s to %s:\n",
> - paddress (gdbarch, low), paddress (gdbarch, high));
> -
> - /* Dump the specified range. */
> - gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
> + printf_filtered ("for function %s:\n", name);
> + if (!b || BLOCK_CONTIGUOUS_P (b))
b == nullptr
> + {
> + if (name == NULL)
> + printf_filtered ("from %s to %s:\n",
> + paddress (gdbarch, low), paddress (gdbarch, high));
>
> + /* Dump the specified range. */
> + gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
> + }
> + else
> + {
> + for (int i = 0; i < BLOCK_NRANGES (b); i++)
> + {
> + CORE_ADDR low = BLOCK_RANGE_START (b, i);
> + CORE_ADDR high = BLOCK_RANGE_END (b, i);
> + printf_filtered ("Address range %s to %s:\n",
> + paddress (gdbarch, low),
> + paddress (gdbarch, high));
Use _() for user-visible strings. You can add it to pre-existing printfs that
your patch touches, if you want.
Otherwise, LGTM.
Simon
next prev parent reply other threads:[~2018-08-01 2:08 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-26 6:32 [PATCH 0/8] Non-contiguous address range support Kevin Buettner
2018-06-26 6:42 ` [PATCH 1/8] Add block range data structure for blocks with non-contiguous address ranges Kevin Buettner
2018-08-01 1:36 ` Simon Marchi
2018-08-01 23:57 ` Kevin Buettner
2018-08-01 1:40 ` Simon Marchi
2018-06-26 6:44 ` [PATCH 2/8] Record explicit block ranges from dwarf2read.c Kevin Buettner
2018-08-01 1:41 ` Simon Marchi
2018-06-26 6:47 ` [PATCH 3/8] Add support for non-contiguous blocks to find_pc_partial_function Kevin Buettner
2018-07-19 18:52 ` Kevin Buettner
2018-08-01 2:01 ` Simon Marchi
2018-08-01 23:40 ` Kevin Buettner
2018-06-26 6:49 ` [PATCH 4/8] Disassemble blocks with non-contiguous ranges Kevin Buettner
2018-08-01 2:08 ` Simon Marchi [this message]
2018-06-26 6:51 ` [PATCH 5/8] Use BLOCK_ENTRY_PC in place of most uses of BLOCK_START Kevin Buettner
2018-08-01 2:22 ` Simon Marchi
2018-08-02 0:07 ` Kevin Buettner
2018-06-26 6:53 ` [PATCH 6/8] Use BLOCK_ENTRY_PC to find function entry pc in infrun.c Kevin Buettner
2018-08-01 2:28 ` Simon Marchi
2018-06-26 6:55 ` [PATCH 7/8] Relocate block range start and end addresses Kevin Buettner
2018-08-01 2:30 ` Simon Marchi
2018-06-26 6:57 ` [PATCH 8/8] Test case for functions with non-contiguous ranges Kevin Buettner
2018-08-01 2:56 ` Simon Marchi
2018-07-11 15:27 ` [PATCH 0/8] Non-contiguous address range support Kevin Buettner
2018-07-11 15:32 ` Keith Seitz
2018-07-12 19:12 ` Simon Marchi
2018-07-17 2:00 ` Kevin Buettner
2018-07-19 15:55 ` Simon Marchi
2018-07-19 19:07 ` Kevin Buettner
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=207c61c2-4116-7721-11ad-1a648bb16ec4@ericsson.com \
--to=simon.marchi@ericsson.com \
--cc=gdb-patches@sourceware.org \
--cc=kevinb@redhat.com \
/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