Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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