This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit, spu] Do not use generic_push_dummy_code
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: mark dot kettenis at xs4all dot nl (Mark Kettenis)
- Cc: drow at false dot org, gdb-patches at sourceware dot org, pedro at codesourcery dot com
- Date: Fri, 5 Sep 2008 17:21:21 +0200 (CEST)
- Subject: [commit, spu] Do not use generic_push_dummy_code
Mark Kettenis wrote:
> Now you mention it, it would be nice if we could change the SPU code
> such that it doesn't use generic_push_dummy_code(). This function
> abuses frame_align(), and it would be nice if we could eliminate it.
>
> Something like i386_dicos_push_dummy_code() is needed. I can roll you
> a diff if you want, but I won't be able to test it.
No problem. The following patch adds a spu_push_dummy_code function.
If you want to eliminate generic_push_dummy_code now, that would
certainly be fine with me ...
Tested with no regressions on spu-elf.
Committed to mainline.
Bye,
Ulrich
ChangeLog:
* spu-tdep.c (spu_push_dummy_code): New function.
(spu_gdbarch_init): Install it.
Index: gdb/spu-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/spu-tdep.c,v
retrieving revision 1.39
diff -c -p -r1.39 spu-tdep.c
*** gdb/spu-tdep.c 5 Sep 2008 11:37:17 -0000 1.39
--- gdb/spu-tdep.c 5 Sep 2008 15:06:47 -0000
*************** spu_frame_align (struct gdbarch *gdbarch
*** 1032,1037 ****
--- 1032,1053 ----
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)
{
*************** spu_gdbarch_init (struct gdbarch_info in
*** 2108,2113 ****
--- 2124,2130 ----
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);
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com