From: Daniel Jacobowitz <drow@false.org>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: gdb-patches@sourceware.org, brobecker@adacore.com
Subject: Re: [PATCH] Fix PPC non-CFI + CFI unwinding (incomplete in HEAD)
Date: Sat, 20 Jan 2007 19:57:00 -0000 [thread overview]
Message-ID: <20070120195722.GA25573@nevyn.them.org> (raw)
In-Reply-To: <20070114213414.GA5184@host0.dyn.jankratochvil.net>
On Sun, Jan 14, 2007 at 10:34:14PM +0100, Jan Kratochvil wrote:
> On Sat, 13 Jan 2007 17:40:28 +0100, Daniel Jacobowitz wrote:
> ...
> > I was thinking of this:
> > http://sourceware.org/ml/gdb-patches/2004-12/msg00249.html
> > http://sourceware.org/ml/gdb-patches/2005-06/msg00242.html
> >
> > I think someone needs to combine Joel's and Jan's patches. Joel's is
> > nicer in that it uses branch_dest and the right mask for blrl; Jan's
> > is nicer in that it checks whether lr was saved or is now lost.
>
> Attached for:
> http://sourceware.org/ml/gdb-patches/2004-12/msg00249.html
> and it does not handle in any way
> http://sourceware.org/ml/gdb-patches/2005-06/msg00242.html
> as it would be IMO more appropriate to base it on the called code content but
> "I do not have that Darwin code".
I tried combining them myself. Could you let me know if this patch
still fixes your bug?
--
Daniel Jacobowitz
CodeSourcery
2007-01-14 Joel Brobecker <brobecker@gnat.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
Daniel Jacobowitz <dan@codesourcery.com>
* rs6000-tdep.c (bl_to_blrl_insn_p): New function.
(skip_prologue): Allow bl->blrl used by PIC code.
Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.260
diff -u -p -r1.260 rs6000-tdep.c
--- rs6000-tdep.c 9 Jan 2007 17:58:57 -0000 1.260
+++ rs6000-tdep.c 20 Jan 2007 19:55:58 -0000
@@ -902,6 +902,30 @@ store_param_on_stack_p (unsigned long op
return 0;
}
+/* Assuming that INSN is a "bl" instruction located at PC, return
+ nonzero if the destination of the branch is a "blrl" instruction.
+
+ This sequence is sometimes found in certain function prologues.
+ It allows the function to load the LR register with a value that
+ they can use to access PIC data using PC-relative offsets. */
+
+static int
+bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
+{
+ const int opcode = 18;
+ const CORE_ADDR dest = branch_dest (opcode, insn, pc, -1);
+ int dest_insn;
+
+ if (dest == -1)
+ return 0; /* Should never happen, but just return zero to be safe. */
+
+ dest_insn = read_memory_integer (dest, 4);
+ if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
+ return 1;
+
+ return 0;
+}
+
static CORE_ADDR
skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
{
@@ -1133,6 +1157,12 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR l
to save fprs??? */
fdata->frameless = 0;
+
+ /* If the return address has already been saved, we can skip
+ calls to blrl (for PIC). */
+ if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op))
+ continue;
+
/* Don't skip over the subroutine call if it is not within
the first three instructions of the prologue and either
we have no line table information or the line info tells
next prev parent reply other threads:[~2007-01-20 19:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-13 9:31 Jan Kratochvil
2007-01-13 16:04 ` Daniel Jacobowitz
2007-01-13 16:32 ` Mark Kettenis
2007-01-13 16:40 ` Daniel Jacobowitz
2007-01-14 21:34 ` Jan Kratochvil
2007-01-20 19:57 ` Daniel Jacobowitz [this message]
2007-01-21 10:41 ` Mark Kettenis
2007-01-21 21:47 ` Jan Kratochvil
2007-02-08 14:24 ` Daniel Jacobowitz
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=20070120195722.GA25573@nevyn.them.org \
--to=drow@false.org \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@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