From: James Bowman <james.bowman@ftdichip.com>
To: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
"kevinb@redhat.com" <kevinb@redhat.com>
Subject: RE: [PATCH, FT32] Correctly interpret function prologs
Date: Fri, 02 Oct 2015 18:36:00 -0000 [thread overview]
Message-ID: <CA9BBF0458F83C4F9051448B941B57D11AC5CEB4@glaexch1> (raw)
In-Reply-To: <CA9BBF0458F83C4F9051448B941B57D11A265D31@glaexch1>
Hi Kevin,
Thanks for the review, I have corrected as suggested, and added a comment
describing the action of the prolog subroutines.
OK to apply?
2015-10-02 James Bowman <james.bowman@ftdichip.com>
* ft32-tdep.c (ft32_analyze_prologue): Add function prolog
subroutine handling.
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 00cf847..e9da23e 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -164,33 +164,76 @@ ft32_analyze_prologue (CORE_ADDR start_addr, CORE_ADDR end_addr,
CORE_ADDR next_addr;
ULONGEST inst, inst2;
LONGEST offset;
- int regnum;
+ int regnum, pushreg;
+ struct bound_minimal_symbol msymbol;
+ const int first_saved_reg = 13; /* The first saved register. */
+ /* PROLOGS are addresses of the subroutine prologs, PROLOGS[n]
+ is the address of __prolog_$rN.
+ __prolog_$rN pushes registers from 13 through n inclusive.
+ So for example CALL __prolog_$r15 is equivalent to:
+ PUSH $r13
+ PUSH $r14
+ PUSH $r15
+ Note that PROLOGS[0] through PROLOGS[12] are unused. */
+ CORE_ADDR prologs[32];
cache->saved_regs[FT32_PC_REGNUM] = 0;
cache->framesize = 0;
+ for (regnum = first_saved_reg; regnum < 32; regnum++)
+ {
+ char prolog_symbol[32];
+
+ snprintf (prolog_symbol, sizeof (prolog_symbol), "__prolog_$r%02d",
+ regnum);
+ msymbol = lookup_minimal_symbol (prolog_symbol, NULL, NULL);
+ if (msymbol.minsym)
+ prologs[regnum] = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ else
+ prologs[regnum] = 0;
+ }
+
if (start_addr >= end_addr)
- return end_addr;
+ return end_addr;
cache->established = 0;
- for (next_addr = start_addr; next_addr < end_addr; )
+ for (next_addr = start_addr; next_addr < end_addr;)
{
inst = read_memory_unsigned_integer (next_addr, 4, byte_order);
if (FT32_IS_PUSH (inst))
{
- regnum = FT32_R0_REGNUM + FT32_PUSH_REG (inst);
+ pushreg = FT32_PUSH_REG (inst);
cache->framesize += 4;
- cache->saved_regs[regnum] = cache->framesize;
+ cache->saved_regs[FT32_R0_REGNUM + pushreg] = cache->framesize;
next_addr += 4;
}
+ else if (FT32_IS_CALL (inst))
+ {
+ for (regnum = first_saved_reg; regnum < 32; regnum++)
+ {
+ if ((4 * (inst & 0x3ffff)) == prologs[regnum])
+ {
+ for (pushreg = first_saved_reg; pushreg <= regnum;
+ pushreg++)
+ {
+ cache->framesize += 4;
+ cache->saved_regs[FT32_R0_REGNUM + pushreg] =
+ cache->framesize;
+ }
+ next_addr += 4;
+ }
+ }
+ break;
+ }
else
break;
}
for (regnum = FT32_R0_REGNUM; regnum < FT32_PC_REGNUM; regnum++)
{
if (cache->saved_regs[regnum] != REG_UNAVAIL)
- cache->saved_regs[regnum] = cache->framesize - cache->saved_regs[regnum];
+ cache->saved_regs[regnum] =
+ cache->framesize - cache->saved_regs[regnum];
}
cache->saved_regs[FT32_PC_REGNUM] = cache->framesize;
next prev parent reply other threads:[~2015-10-02 18:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-29 16:40 James Bowman
2015-10-01 0:35 ` Kevin Buettner
2015-10-02 18:36 ` James Bowman [this message]
2015-10-02 19:26 ` 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=CA9BBF0458F83C4F9051448B941B57D11AC5CEB4@glaexch1 \
--to=james.bowman@ftdichip.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