Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Tristan Gingold <gingold@adacore.com>
To: "Petr Hluzín" <petr.hluzin@gmail.com>
Cc: gdb@sourceware.org
Subject: Re: a review and questions on avr_scan_prologue()
Date: Wed, 17 Feb 2010 09:02:00 -0000	[thread overview]
Message-ID: <919F238C-4ED8-4507-8510-E5479E94B32D@adacore.com> (raw)
In-Reply-To: <6a6f635a1002131556sc428adfu6033489930eca7b6@mail.gmail.com>


On Feb 14, 2010, at 12:56 AM, Petr Hluzín wrote:

> Hello

Hi,

> I took a look at avr-tdep.c [1] and I found some places which are
> either bug or are not clear to me. Here it goes:

Thanks for doing reviews!

>      else if (len >= sizeof (img) - 2
> 	       && memcmp (img + 2, prologue, sizeof (img) - 2) == 0)
> 	{
>          info->prologue_type = AVR_PROLOGUE_SIG;
>          vpc += sizeof (img) - 2;
>          info->saved_regs[AVR_SREG_REGNUM].addr = 3;
>          info->saved_regs[0].addr = 2;
>          info->saved_regs[1].addr = 1;
> -          info->size += 3;
> +          info->size += 2;
> 	}
> 
> Since the "img + 2" skips "push r1" I believe the scan should record
> smaller size.

Yes, you're right.  I will fix that.

>  if (vpc >= AVR_MAX_PROLOGUE_SIZE)
>     fprintf_unfiltered (gdb_stderr,
>                         _("Hit end of prologue while scanning pushes\n"));
> 
> This condition is never true due to a way `len' is calculated and
> `vpc' always being less than `len'. (This is not a bug but per se but
> the author might expected something what is not true.)

I will change that to an assert.

>      else if (insn == 0x920f)  /* push r0 */
>        {
>          info->size += 1;
>          vpc += 2;
>        }
> 
> The condition is never true because of the preceding "Scan pushes
> (saved registers)" loop's exit condition.

I don't think so.  You can have:
  rcall .+0
  push r0


> Also:
> The avr_scan_prologue()'s recognizes several well-known prologues. Is
> there a reason why it does not use the general prologue analysis
> algorithm as described in the documentation [2]?

Historical reason: it was written before the general prologue analysis.
Then, when AdaCore did its AVR port, I fixed all issues I found, but didn't rewrite it from scratch.

> I think universal prologue analysis is quite easy with AVR arch. The
> code might be shorter (though less clear).
> I might try to write the code if you are interested.
> (The current prologue scan code chokes on hand-crafted assembly.)

Feel free to work on that.  Improvements are always welcome!

Tristan.


  parent reply	other threads:[~2010-02-17  9:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-13 23:56 Petr Hluzín
2010-02-16  5:13 ` Weddington, Eric
2010-02-17  9:02 ` Tristan Gingold [this message]
2010-02-20 23:20   ` Petr Hluzín

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=919F238C-4ED8-4507-8510-E5479E94B32D@adacore.com \
    --to=gingold@adacore.com \
    --cc=gdb@sourceware.org \
    --cc=petr.hluzin@gmail.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