This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]