Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: "Maciej W. Rozycki" <macro@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [RFA 1/2] mips: Switch inferior function calls to ON_STACK method.
Date: Fri, 04 May 2012 20:58:00 -0000	[thread overview]
Message-ID: <20120504205818.GT15555@adacore.com> (raw)
In-Reply-To: <alpine.DEB.1.10.1205032325500.18334@tp.orcam.me.uk>

[-- Attachment #1: Type: text/plain, Size: 1348 bytes --]

Now I know why I was told you are a MIPS expert :-). I never really
had the chance or need to delve into the details of any specific
architecture. Even for the ia64-hpux port, I could do with just
a superficial knowledge of that CPU.

> * newly-added 48-bit instructions.

I am wondering if this addition is going to hurt in terms of our
support...  From what I could tell from my mips64 manual, even
on this CPU the instructions are still 32bit long... But I'm
digressing, sorry.

>  Coincidentally all-zeroes is a 32-bit NOP instruction both in the 
> standard MIPS and the microMIPS mode -- there's a 16-bit encoding of NOP 
> in the microMIPS mode naturally as well.

I'm wondering if you'd like me to rename "null_insn" into "nop_insn"
in my patch. I didn't do it, because I'd expect the instruction size
to depend on the mode. As of today, we know that the breakpoint we
are inserting is always going to be at an even address, so it's always
going to be 4 bytes. So maybe it does make sense to rename it. Let
me know.

>  Understood, but I'd be happier if the comment you're removing or a 
> similar stayed in place.  If by trap you mean SIGTRAP, then I think this 
> is not going to be the case.

I think you refer to the comment from Andrew Cagney? I've put it back
as is.

OK to commit, modulo the possible rename above?

Thanks,
-- 
Joel

[-- Attachment #2: mips-on-stack-v3.diff --]
[-- Type: text/x-diff, Size: 2744 bytes --]

commit b78a75e1442a349531a017036a02f43c4df71427
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Wed May 2 20:39:57 2012 -0400

    mips: Switch inferior function calls to ON_STACK method.
    
    This patch switches the mips code to use the ON_STACK method
    for function calls instead of AT_SYMBOL, which we want to remove.
    
    gdb/ChangeLog:
    
            * mips-tdep.c (mips_push_dummy_code): New function.
            (mips_gdbarch_init): Set the gdbarch call_dummy_location to
            ON_STACK and install mips_push_dummy_code as our gdbarch
            push_dummy_code routine.

diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index 9a3c7fb..5e9a6ed 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -3009,6 +3009,37 @@ mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
   return align_down (addr, 16);
 }
 
+/* Implement the push_dummy_code gdbarch method for mips targets.  */
+
+static CORE_ADDR
+mips_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
+		      CORE_ADDR funaddr, struct value **args,
+		      int nargs, struct type *value_type,
+		      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
+		      struct regcache *regcache)
+{
+  int bp_len;
+  gdb_byte null_insn[4] = { 0 };
+
+  *bp_addr = mips_frame_align (gdbarch, sp);
+  gdbarch_breakpoint_from_pc (gdbarch, bp_addr, &bp_len);
+
+  /* The breakpoint layer automatically adjusts the address of
+     breakpoints inserted in a branch delay slot.  With enough
+     bad luck, the 4 bytes located just before our breakpoint
+     instruction could look like a branch instruction, and thus
+     trigger the adjustement, and break the function call entirely.
+     So, we reserve those 4 bytes and write a null instruction
+     to prevent that from happening.  */
+  write_memory (*bp_addr - bp_len, null_insn, sizeof (null_insn));
+  sp = mips_frame_align (gdbarch, *bp_addr - 2 * bp_len);
+
+  /* Inferior resumes at the function entry point.  */
+  *real_pc = funaddr;
+
+  return sp;
+}
+
 static CORE_ADDR
 mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 			   struct regcache *regcache, CORE_ADDR bp_addr,
@@ -6909,7 +6940,8 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
      replaced by a command, and all targets will default to on stack
      (regardless of the stack's execute status).  */
-  set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
+  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+  set_gdbarch_push_dummy_code (gdbarch, mips_push_dummy_code);
   set_gdbarch_frame_align (gdbarch, mips_frame_align);
 
   set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);

  reply	other threads:[~2012-05-04 20:58 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 ` [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 [this message]
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
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
2012-05-03 19:03 ` [commit 2/2] Remove AT_SYMBOL Joel Brobecker
2012-05-09 14:37   ` 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=20120504205818.GT15555@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=macro@codesourcery.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