* spu-tdep.c (spu_push_dummy_code): New function.
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 5 Sep 2008 15:19:59 +0000 (15:19 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 5 Sep 2008 15:19:59 +0000 (15:19 +0000)
(spu_gdbarch_init): Install it.

gdb/ChangeLog
gdb/spu-tdep.c

index 9a12c36caf27b4e2b0741bf976327a7b22e30b74..2fc0895b40374de6fe599419014cba36c55e8377 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-05  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * spu-tdep.c (spu_push_dummy_code): New function.
+       (spu_gdbarch_init): Install it.
+
 2008-09-05  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * gdbarch.sh (gdbarch_dump): Use core_addr_to_string_nz
index 614bfdc61aedb8ffb17522543f4c264c4e1364ac..e68b228fb0eaf443138481287f5dce66282b122e 100644 (file)
@@ -1032,6 +1032,22 @@ spu_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
   return sp & ~15;
 }
 
+static CORE_ADDR
+spu_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)
+{
+  /* Allocate space sufficient for a breakpoint, keeping the stack aligned.  */
+  sp = (sp - 4) & ~15;
+  /* Store the address of that breakpoint */
+  *bp_addr = sp;
+  /* The call starts at the callee's entry point.  */
+  *real_pc = funaddr;
+
+  return sp;
+}
+
 static int
 spu_scalar_value_p (struct type *type)
 {
@@ -2108,6 +2124,7 @@ spu_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
   set_gdbarch_frame_align (gdbarch, spu_frame_align);
   set_gdbarch_frame_red_zone_size (gdbarch, 2000);
+  set_gdbarch_push_dummy_code (gdbarch, spu_push_dummy_code);
   set_gdbarch_push_dummy_call (gdbarch, spu_push_dummy_call);
   set_gdbarch_dummy_id (gdbarch, spu_dummy_id);
   set_gdbarch_return_value (gdbarch, spu_return_value);