Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: Victor Collod <vcollod@nvidia.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH v3 3/7] amd64_analyze_prologue: merge op and buf
Date: Thu, 6 Aug 2020 10:55:31 -0400	[thread overview]
Message-ID: <2585517f-5149-2325-1aa9-959e5068d1d2@simark.ca> (raw)
In-Reply-To: <20200624012857.31849-4-vcollod@nvidia.com>

On 2020-06-23 9:28 p.m., Victor Collod via Gdb-patches wrote:
> Both variables were used to store function code.

I expressed concerns earlier that the code might be written in this way on purpose,
to make sure we don't read too much, in case we are close to the end of a readable
region.  I don't know if this is something that can actually happen in pracptice,
but still tt makes sense to me that we read a single byte, check what it is, and
read more if needed.  Any performance concerns should be taken care of by some cache
at the lower level (each call to read_code won't necessarily cause a target read to
happen).


> 2020-06-23  Victor Collod  <vcollod@nvidia.com>
> 
> 	* amd64-tdep.c (amd64_analyze_prologue): Merge op and buf.
> ---
>  gdb/amd64-tdep.c | 28 +++++++++++-----------------
>  1 file changed, 11 insertions(+), 17 deletions(-)
> 
> diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
> index ff12cb874b8..c1a9b553e20 100644
> --- a/gdb/amd64-tdep.c
> +++ b/gdb/amd64-tdep.c
> @@ -2374,7 +2374,6 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
>  			CORE_ADDR pc, CORE_ADDR current_pc,
>  			struct amd64_frame_cache *cache)
>  {
> -  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
>    /* The `endbr64` instruction.  */
>    static const gdb_byte endbr64[4] = { 0xf3, 0x0f, 0x1e, 0xfa };
>    /* There are two variations of movq %rsp, %rbp.  */
> @@ -2384,8 +2383,7 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
>    static const gdb_byte mov_esp_ebp_1[2] = { 0x89, 0xe5 };
>    static const gdb_byte mov_esp_ebp_2[2] = { 0x8b, 0xec };
>  
> -  gdb_byte buf[3];
> -  gdb_byte op;
> +  gdb_byte buf[4];
>  
>    /* Analysis must not go past current_pc.  */
>    if (pc >= current_pc)
> @@ -2396,24 +2394,20 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
>    else
>      pc = amd64_analyze_stack_align (pc, current_pc, cache);
>  
> -  op = read_code_unsigned_integer (pc, 1, byte_order);
> -
> -  /* Check for the `endbr64` instruction, skip it if found.  */
> -  if (op == endbr64[0])
> +  read_code (pc, buf, 4);
> +  /* Check for the `endbr64' instruction and skip it if found.  */
> +  if (memcmp (buf, endbr64, sizeof (endbr64)) == 0)
>      {
> -      read_code (pc + 1, buf, 3);
> -
> -      if (memcmp (buf, &endbr64[1], 3) == 0)
> -	pc += 4;
> +      pc += sizeof (endbr64);
> +      /* If we went past the allowed bound, stop.  */
> +      if (pc >= current_pc)
> +	return current_pc;
>  
> -      op = read_code_unsigned_integer (pc, 1, byte_order);
> +      /* Update the code buffer, as pc changed.  */
> +      read_code (pc, buf, 1);
>      }
>  
> -  /* If we went past the allowed bound, stop.  */
> -  if (pc >= current_pc)
> -    return current_pc;
> -
> -  if (op == 0x55)		/* pushq %rbp */
> +  if (buf[0] == 0x55)           /* pushq %rbp */
>      {
>        /* Take into account that we've executed the `pushq %rbp' that
>           starts this instruction sequence.  */

If it's ok to read 4 bytes from the start, then why not merge remove the
following read (not shown in the snippet):

    read_code (pc + 1, buf, 3);

and make the read above (which happens if the endbr64 instruction is found) read
4 bytes directly?

Simon


  reply	other threads:[~2020-08-06 14:55 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-05 23:23 [PATCH] Improve intel IBT support Victor Collod
2020-06-05 23:55 ` Victor Collod
2020-06-11  3:18 ` Simon Marchi
2020-06-11 22:54   ` [PATCH v2 0/2] " Victor Collod
2020-06-11 22:54     ` [PATCH v2 1/2] Add i386 support for endbr skipping Victor Collod
2020-06-21 11:27       ` Simon Marchi
2020-06-11 22:54     ` [PATCH v2 2/2] Refactor amd64_analyze_prologue Victor Collod
2020-06-21 11:38       ` Simon Marchi
2020-06-24  1:28         ` [PATCH v3 0/7] Improve intel IBT support Victor Collod
2020-06-24  1:28           ` [PATCH v3 1/7] Add i386 support for endbr skipping Victor Collod
2020-08-06 13:57             ` Simon Marchi
2020-09-19  0:29               ` [PATCH] gdb: Update i386_analyze_prologue to skip endbr32 H.J. Lu
2020-09-19  0:38                 ` Simon Marchi
2020-06-24  1:28           ` [PATCH v3 2/7] amd64_analyze_prologue: swap upper bound check condition operands Victor Collod
2020-08-06 14:41             ` Simon Marchi
2020-06-24  1:28           ` [PATCH v3 3/7] amd64_analyze_prologue: merge op and buf Victor Collod
2020-08-06 14:55             ` Simon Marchi [this message]
2020-06-24  1:28           ` [PATCH v3 4/7] amd64_analyze_prologue: invert a condition for readability Victor Collod
2020-08-06 14:57             ` Simon Marchi
2020-06-24  1:28           ` [PATCH v3 5/7] amd64_analyze_prologue: gradually update pc Victor Collod
2020-08-06 14:59             ` Simon Marchi
2020-06-24  1:28           ` [PATCH v3 6/7] amd64_analyze_prologue: fix incorrect comment Victor Collod
2020-08-06 15:05             ` Simon Marchi
2020-06-24  1:28           ` [PATCH v3 7/7] amd64_analyze_prologue: use target_read_code instead of read_code Victor Collod
2020-08-06 15:01             ` Simon Marchi
2020-08-05 21:44           ` [PATCH v3 0/7] Improve intel IBT support Victor Collod

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=2585517f-5149-2325-1aa9-959e5068d1d2@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=vcollod@nvidia.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