From: "Maciej W. Rozycki" <macro@codesourcery.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: Mark Kettenis <mark.kettenis@xs4all.nl>, <gdb-patches@sourceware.org>
Subject: Re: [RFA 1/2] mips: Switch inferior function calls to ON_STACK method.
Date: Mon, 14 May 2012 09:44:00 -0000 [thread overview]
Message-ID: <alpine.DEB.1.10.1205141013580.11227@tp.orcam.me.uk> (raw)
In-Reply-To: <20120509143537.GH15555@adacore.com>
On Wed, 9 May 2012, Joel Brobecker wrote:
> I have now checked this patch in.
Thanks. It looks like a typo has crept in in the review process and
nobody noticed. I have now fixed it with the change below.
Index: gdb-fsf-trunk-quilt/gdb/mips-tdep.c
===================================================================
--- gdb-fsf-trunk-quilt.orig/gdb/mips-tdep.c 2012-05-12 22:50:59.375649586 +0100
+++ gdb-fsf-trunk-quilt/gdb/mips-tdep.c 2012-05-12 22:51:22.565626048 +0100
@@ -3009,7 +3009,7 @@ mips_frame_align (struct gdbarch *gdbarc
return align_down (addr, 16);
}
-/* Implement the "push_dummy_call" gdbarch method. */
+/* Implement the "push_dummy_code" gdbarch method. */
static CORE_ADDR
mips_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
> > Not too long ago, Jan Kratochvil pointed out a problem with
> > AT_ENTRY_POINT.
>
> Yeah - I thought we had fixed that by switching the x86/amd64 targets
> to using ON_STACK. But then when I grep'ed around, I didn't find that.
> So I thought perhaps we went a different route, because I was sure we
> had checked a fix in. But in fact, reviewing the history, I think
> that this issue is still open, probably one of these low-priority
> issues that one looks at when there is free moment.
>
> In my opinion, the point about not being able to write the breakpoint
> if the program is executed from ROM, combined with the fact that entry
> points may have CFI info, clinches it.
I gave it yet more thinking and came to the conclusion that at least for
the MIPS target, where it is safe to use either way, but both have some
drawbacks, we should really apply both, switching dynamically. The reason
is the stack may be unwritable for whatever reason (e.g. not correctly set
up), so we should try ON_STACK first and if that fails (e.g. SP is NULL or
writing to the stack has faulted), then fall back to AT_ENTRY_POINT.
This is another corner case however and I don't feel compelled to
implement it right now. Let's leave it for another sunny day in
Cambridgeshire. ;)
> OK - now that this is out of the way, which comments did we want to add?
I've lost track, sorry, however here is the promised update I will
include with the microMIPS change. I used a local variable to hold the
address of the breakpoint slot after all lest the result be horrible. No
regressions on mips-sde-elf or mips-linux-gnu, checked the usual set of
standard MIPS, MIPS16 and microMIPS multilibs.
Since this is recent code and I was changing it anyway I have reordered
the local variables to follow the "reverse Christmas tree" style -- I find
the definitions easier to read this way (of course initialisers may
prevent this style to be fully applied in some cases). The style has been
used in the various places of the Linux kernel recently and I believe
there is nothing said about how local variable definitions are meant to be
ordered in the GNU Coding Style, so it should be fine to use it in GDB
(at least in places I am concerned about). I do not plan to specifically
revamp existing code though.
2012-05-14 Maciej W. Rozycki <macro@codesourcery.com>
gdb/
* mips-tdep.c (mips_push_dummy_code): Handle microMIPS code.
Maciej
gdb-micromips-on-stack.diff
Index: gdb-fsf-trunk-quilt/gdb/mips-tdep.c
===================================================================
--- gdb-fsf-trunk-quilt.orig/gdb/mips-tdep.c 2012-05-12 21:21:38.000000000 +0100
+++ gdb-fsf-trunk-quilt/gdb/mips-tdep.c 2012-05-12 22:45:37.355619042 +0100
@@ -4198,11 +4198,18 @@ mips_push_dummy_code (struct gdbarch *gd
CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
struct regcache *regcache)
{
- CORE_ADDR nop_addr;
static gdb_byte nop_insn[] = { 0, 0, 0, 0 };
+ CORE_ADDR nop_addr;
+ CORE_ADDR bp_slot;
/* Reserve enough room on the stack for our breakpoint instruction. */
- *bp_addr = sp - sizeof (nop_insn);
+ bp_slot = sp - sizeof (nop_insn);
+
+ /* Return to microMIPS mode if calling microMIPS code to avoid
+ triggering an address error exception on processors that only
+ support microMIPS execution. */
+ *bp_addr = (mips_pc_is_micromips (gdbarch, funaddr)
+ ? make_compact_addr (bp_slot) : bp_slot);
/* The breakpoint layer automatically adjusts the address of
breakpoints inserted in a branch delay slot. With enough
@@ -4211,7 +4218,7 @@ mips_push_dummy_code (struct gdbarch *gd
trigger the adjustement, and break the function call entirely.
So, we reserve those 4 bytes and write a nop instruction
to prevent that from happening. */
- nop_addr = *bp_addr - sizeof (nop_insn);
+ nop_addr = bp_slot - sizeof (nop_insn);
write_memory (nop_addr, nop_insn, sizeof (nop_insn));
sp = mips_frame_align (gdbarch, nop_addr);
next prev parent reply other threads:[~2012-05-14 9:44 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-03 19:03 Getting rid of AT_SYMBOL inferior call method Joel Brobecker
2012-05-03 19:03 ` [commit 2/2] Remove AT_SYMBOL Joel Brobecker
2012-05-09 14:37 ` Joel Brobecker
2012-05-03 19:03 ` [RFA 1/2] mips: Switch inferior function calls to ON_STACK method Joel Brobecker
2012-05-03 21:09 ` Maciej W. Rozycki
2012-05-03 21:50 ` Joel Brobecker
2012-05-03 23:29 ` Maciej W. Rozycki
2012-05-04 20:58 ` Joel Brobecker
2012-05-04 21:19 ` Mark Kettenis
2012-05-04 23:25 ` Maciej W. Rozycki
2012-05-05 11:45 ` Mark Kettenis
2012-05-08 15:08 ` Maciej W. Rozycki
2012-05-08 16:06 ` Joel Brobecker
2012-05-08 20:26 ` Maciej W. Rozycki
2012-05-08 20:43 ` Joel Brobecker
2012-05-08 22:08 ` Joel Brobecker
2012-05-09 7:32 ` Maciej W. Rozycki
2012-05-09 8:24 ` Mark Kettenis
2012-05-09 9:14 ` Maciej W. Rozycki
2012-05-09 16:08 ` Tom Tromey
2012-05-09 14:35 ` Joel Brobecker
2012-05-14 9:44 ` Maciej W. Rozycki [this message]
2012-05-14 15:01 ` Joel Brobecker
2012-05-14 16:48 ` Maciej W. Rozycki
2012-06-11 10:14 ` Maciej W. Rozycki
2012-05-09 6:21 ` Maciej W. Rozycki
2012-05-04 22:41 ` Maciej W. Rozycki
2012-05-04 21:34 ` Mark Kettenis
2012-05-05 1:31 ` Maciej W. Rozycki
2012-05-03 21:44 ` Mark Kettenis
2012-05-03 21:58 ` Joel Brobecker
2012-05-04 2:11 ` Yao Qi
2012-05-03 22:03 ` Joel Brobecker
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=alpine.DEB.1.10.1205141013580.11227@tp.orcam.me.uk \
--to=macro@codesourcery.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=mark.kettenis@xs4all.nl \
/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