This is the mail archive of the gdb-patches@sources.redhat.com 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]

[patch rfc] PUSH_ARGUMENTS() -> push_dummy_call()


Hello,

The attached patch addes the architecture method push_dummy_call() as a successor for the deprecated PUSH_ARGUMENTS(). PUSH_ARGUMENTS() is usedn when doing an inferior function call. The new method takes two additional parameters:

regcache:
An explict destination for all those register stores.

dummy_addr:
The address of the call dummy (which contains the return breakpoint) allowing the function to set the return address.


In addition to pushing the arguments, this new method is expected set both the struct return and return addresses, and return the final aligned top-of-stack address.

By requiring this, much of the convoluted and largely sparc centric logic that sits between the old PUSH_ARGUMENTS() and SAVE_DUMMY_FRAME_TOS() calls can be eliminated. This opening the possability of eliminating the methods:
PUSH_RETURN_ADDRESS()
CALL_DUMMY_STACK_ADJUST
STORE_STRUCT_RETURN
write_sp
(expect more deprecating patches).


I'll look to commit this in a few days (it could take a bit to digest this one).

Andrew

PS: Looking at the comments, this one has been on the cards for ~7 years.
2003-03-23  Andrew Cagney  <cagney at redhat dot com>

	* gdbarch.sh (DEPRECATED_PUSH_ARGUMENTS): Rename PUSH_ARGUMENTS.
	(push_dummy_call): New pure multi-arch replacement with gdbarch,
	regcache and dummy_addr parameters.
	* gdbarch.h, gdbarch.c: Re-generate.
	* valops.c (hand_function_call): Use gdbarch_push_dummy_call when
	available; assume it will handle stack alignment and return
	address issues.  Fall back to DEPRECATED_PUSH_ARGUMENTS and
	legacy_push_arguments.
	(legacy_push_arguments): Rename default_push_arguments.
	* value.h (legacy_push_arguments): Rename default_push_arguments.
	* i386-tdep.c (i386_push_arguments): Call legacy_push_arguments.
	* config/sparc/tm-sparc.h (DEPRECATED_PUSH_ARGUMENTS): Update.
	* config/sparc/tm-sp64.h (DEPRECATED_PUSH_ARGUMENTS): Update.
	* config/pa/tm-hppa.h (DEPRECATED_PUSH_ARGUMENTS): Update.
	* config/i386/tm-symmetry.h: Update.
	* xstormy16-tdep.c (xstormy16_gdbarch_init): Update.
	* x86-64-tdep.c (x86_64_init_abi): Update.
	* v850-tdep.c (v850_gdbarch_init): Update.
	* sparc-tdep.c (sparc_gdbarch_init): Update.
	* sh-tdep.c (sh_gdbarch_init): Update.
	* s390-tdep.c (s390_gdbarch_init): Update.
	* rs6000-tdep.c (rs6000_gdbarch_init): Update.
	* mn10300-tdep.c (mn10300_gdbarch_init): Update.
	* mips-tdep.c (mips_gdbarch_init): Update.
	* mcore-tdep.c (mcore_gdbarch_init): Update.
	* m68hc11-tdep.c (m68hc11_gdbarch_init): Update.
	* ia64-tdep.c (ia64_gdbarch_init): Update.
	* i386-tdep.c (i386_gdbarch_init): Update.
	* hppa-tdep.c (hppa_gdbarch_init): Update.
	* h8300-tdep.c (h8300_gdbarch_init): Update.
	* frv-tdep.c (frv_gdbarch_init): Update.
	* d10v-tdep.c (d10v_gdbarch_init): Update.
	* cris-tdep.c (cris_gdbarch_init): Update.
	* avr-tdep.c (avr_gdbarch_init): Update.
	* arm-tdep.c (arm_gdbarch_init): Update.
	* arm-linux-tdep.c (arm_linux_init_abi): Update.
	* alpha-tdep.c (alpha_gdbarch_init): Update.

Index: doc/ChangeLog
2003-03-23  Andrew Cagney  <cagney at redhat dot com>

	* gdbint.texinfo (Target Architecture Definition): Replace
	PUSH_ARGUMENTS with push_dummy_call, add gdbarch, regcache and
	dummy_addr parameters.

Index: valops.c
===================================================================
RCS file: /cvs/src/src/gdb/valops.c,v
retrieving revision 1.95
diff -u -r1.95 valops.c
--- valops.c	24 Mar 2003 03:54:50 -0000	1.95
+++ valops.c	24 Mar 2003 04:32:05 -0000
@@ -1079,8 +1079,8 @@
 }
 
 CORE_ADDR
-default_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
-			int struct_return, CORE_ADDR struct_addr)
+legacy_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
+		       int struct_return, CORE_ADDR struct_addr)
 {
   /* ASSERT ( !struct_return); */
   int i;
@@ -1264,6 +1264,7 @@
   static ULONGEST *dummy;
   int sizeof_dummy1;
   char *dummy1;
+  CORE_ADDR dummy_addr;
   CORE_ADDR old_sp;
   struct type *value_type;
   unsigned char struct_return;
@@ -1428,21 +1429,25 @@
   real_pc = start_sp;
 #endif
 
-  if (CALL_DUMMY_LOCATION == ON_STACK)
+  switch (CALL_DUMMY_LOCATION)
     {
+    case ON_STACK:
+      dummy_addr = start_sp;
       write_memory (start_sp, (char *) dummy1, sizeof_dummy1);
       if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES)
 	generic_save_call_dummy_addr (start_sp, start_sp + sizeof_dummy1);
-    }
-
-  if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
-    {
+      break;
+    case AT_ENTRY_POINT:
       real_pc = funaddr;
+      dummy_addr = CALL_DUMMY_ADDRESS ();
       if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES)
 	/* NOTE: cagney/2002-04-13: The entry point is going to be
            modified with a single breakpoint.  */
 	generic_save_call_dummy_addr (CALL_DUMMY_ADDRESS (),
 				      CALL_DUMMY_ADDRESS () + 1);
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "bad switch");
     }
 
 #ifdef lint
@@ -1569,9 +1574,8 @@
     {
       int len = TYPE_LENGTH (value_type);
       if (STACK_ALIGN_P ())
-	/* MVS 11/22/96: I think at least some of this stack_align
-	   code is really broken.  Better to let PUSH_ARGUMENTS adjust
-	   the stack in a target-defined manner.  */
+	/* NOTE: cagney/2003-03-22: Should rely on frame align, rather
+           than stack align to force the alignment of the stack.  */
 	len = STACK_ALIGN (len);
       if (INNER_THAN (1, 2))
 	{
@@ -1617,9 +1621,29 @@
 	}
     }
 
-  sp = PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr);
+  /* Create the dummy stack frame.  Pass in the call dummy address as,
+     presumably, the ABI code knows where, in the call dummy, the
+     return address should be pointed.  */
+  if (gdbarch_push_dummy_call_p (current_gdbarch))
+    /* When there is no push_dummy_call method, should this code
+       simply error out.  That would the implementation of this method
+       for all ABIs (which is probably a good thing).  */
+    sp = gdbarch_push_dummy_call (current_gdbarch, current_regcache,
+				  dummy_addr, nargs, args, sp, struct_return,
+				  struct_addr);
+  else  if (DEPRECATED_PUSH_ARGUMENTS_P ())
+    /* Keep old targets working.  */
+    sp = DEPRECATED_PUSH_ARGUMENTS (nargs, args, sp, struct_return,
+				    struct_addr);
+  else
+    sp = legacy_push_arguments (nargs, args, sp, struct_return, struct_addr);
 
-  if (PUSH_RETURN_ADDRESS_P ())
+  /* NOTE: cagney/2003-03-23: Disable this code when there is a
+     push_dummy_call() method.  That method, which is responsible for
+     constructing a complete call frame, will have already stored the
+     return address.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch)
+      && PUSH_RETURN_ADDRESS_P ())
     /* for targets that use no CALL_DUMMY */
     /* There are a number of targets now which actually don't write
        any CALL_DUMMY instructions into the target, but instead just
@@ -1630,9 +1654,18 @@
        return-address register as appropriate.  Formerly this has been
        done in PUSH_ARGUMENTS, but that's overloading its
        functionality a bit, so I'm making it explicit to do it here.  */
+    /* NOTE: cagney/2003-03-23: The REAL_PC parameter, below, is
+       misleading.  It contains the address of the function being
+       called, and not the return address (in the call dummy that
+       contains the breakpoint).  */
     sp = PUSH_RETURN_ADDRESS (real_pc, sp);
 
-  if (STACK_ALIGN_P () && !INNER_THAN (1, 2))
+  /* NOTE: cagney/2003-03-23: Diable this code when there is a
+     push_dummy_call() method.  Since that method will have already
+     handled any alignment issues, the code below is entirely
+     redundant.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch)
+      && STACK_ALIGN_P () && !INNER_THAN (1, 2))
     {
       /* If stack grows up, we must leave a hole at the bottom, note
          that sp already has been advanced for the arguments!  */
@@ -1641,12 +1674,17 @@
       sp = STACK_ALIGN (sp);
     }
 
-/* XXX This seems wrong.  For stacks that grow down we shouldn't do
-   anything here!  */
+  /* XXX This seems wrong.  For stacks that grow down we shouldn't do
+     anything here!  */
   /* MVS 11/22/96: I think at least some of this stack_align code is
      really broken.  Better to let PUSH_ARGUMENTS adjust the stack in
      a target-defined manner.  */
-  if (CALL_DUMMY_STACK_ADJUST_P)
+  /* NOTE: cagney/2003-03-23: Diable this code when there is a
+     push_dummy_call() method.  Since that method will have already
+     handled any alignment issues, the code below is entirely
+     redundant.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch)
+      && CALL_DUMMY_STACK_ADJUST_P)
     if (INNER_THAN (1, 2))
       {
 	/* stack grows downward */
@@ -1662,14 +1700,25 @@
      Also note that on some machines (like the sparc) pcc uses a
      convention like gcc's.  */
 
-  if (struct_return)
+  /* NOTE: cagney/2003-03-23: Diable this code when there is a
+     push_dummy_call() method.  Since that method will have already
+     stored the struct return address, the below call is entirely
+     redundant.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch)
+      && struct_return)
     STORE_STRUCT_RETURN (struct_addr, sp);
 
   /* Write the stack pointer.  This is here because the statements above
      might fool with it.  On SPARC, this write also stores the register
      window into the right place in the new stack frame, which otherwise
      wouldn't happen.  (See store_inferior_registers in sparc-nat.c.)  */
-  write_sp (sp);
+  /* NOTE: cagney/2003-03-23: Disable this code when there is a
+     push_dummy_call() method.  Since that method will have already
+     stored the stack pointer (as part of creating the fake call
+     frame), and none of the code following that code adjusts the
+     stack-pointer value, the below call is entirely redundant.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch))
+    write_sp (sp);
 
   if (SAVE_DUMMY_FRAME_TOS_P ())
     SAVE_DUMMY_FRAME_TOS (sp);
Index: alpha-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-tdep.c,v
retrieving revision 1.68
diff -u -r1.68 alpha-tdep.c
--- alpha-tdep.c	24 Mar 2003 03:54:46 -0000	1.68
+++ alpha-tdep.c	24 Mar 2003 04:29:13 -0000
@@ -68,7 +68,6 @@
 static gdbarch_skip_prologue_ftype alpha_skip_prologue;
 static gdbarch_saved_pc_after_call_ftype alpha_saved_pc_after_call;
 
-static gdbarch_push_arguments_ftype alpha_push_arguments;
 static gdbarch_fix_call_dummy_ftype alpha_fix_call_dummy;
 
 static gdbarch_get_longjmp_target_ftype alpha_get_longjmp_target;
@@ -1854,7 +1853,7 @@
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_deprecated_use_generic_dummy_frames (gdbarch, 0);
   set_gdbarch_call_dummy_length (gdbarch, 0);
-  set_gdbarch_push_arguments (gdbarch, alpha_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, alpha_push_arguments);
   set_gdbarch_deprecated_pop_frame (gdbarch, alpha_pop_frame);
 
   /* On the Alpha, the call dummy code is never copied to user space,
Index: arm-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-tdep.c,v
retrieving revision 1.27
diff -u -r1.27 arm-linux-tdep.c
--- arm-linux-tdep.c	22 Mar 2003 20:39:20 -0000	1.27
+++ arm-linux-tdep.c	24 Mar 2003 04:29:15 -0000
@@ -536,7 +536,7 @@
 
   /* The following two overrides shouldn't be needed.  */
   set_gdbarch_deprecated_extract_return_value (gdbarch, arm_linux_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, arm_linux_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, arm_linux_push_arguments);
 
   /* Shared library handling.  */
   set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.112
diff -u -r1.112 arm-tdep.c
--- arm-tdep.c	24 Mar 2003 03:54:47 -0000	1.112
+++ arm-tdep.c	24 Mar 2003 04:29:33 -0000
@@ -2931,7 +2931,7 @@
   set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
   set_gdbarch_push_return_address (gdbarch, arm_push_return_address);
 
-  set_gdbarch_push_arguments (gdbarch, arm_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, arm_push_arguments);
 
   /* Frame handling.  */
   set_gdbarch_deprecated_frame_chain_valid (gdbarch, arm_frame_chain_valid);
Index: avr-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/avr-tdep.c,v
retrieving revision 1.32
diff -u -r1.32 avr-tdep.c
--- avr-tdep.c	24 Mar 2003 03:54:47 -0000	1.32
+++ avr-tdep.c	24 Mar 2003 04:29:36 -0000
@@ -1181,7 +1181,7 @@
 
   set_gdbarch_address_to_pointer (gdbarch, avr_address_to_pointer);
   set_gdbarch_pointer_to_address (gdbarch, avr_pointer_to_address);
-  set_gdbarch_push_arguments (gdbarch, avr_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, avr_push_arguments);
   set_gdbarch_push_return_address (gdbarch, avr_push_return_address);
   set_gdbarch_deprecated_pop_frame (gdbarch, avr_pop_frame);
 
Index: cris-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/cris-tdep.c,v
retrieving revision 1.54
diff -u -r1.54 cris-tdep.c
--- cris-tdep.c	24 Mar 2003 03:54:47 -0000	1.54
+++ cris-tdep.c	24 Mar 2003 04:29:41 -0000
@@ -4154,7 +4154,7 @@
   if (tdep->cris_abi == CRIS_ABI_ORIGINAL)
     {
       set_gdbarch_double_bit (gdbarch, 32);
-      set_gdbarch_push_arguments (gdbarch, cris_abi_original_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, cris_abi_original_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, 
                                       cris_abi_original_store_return_value);
       set_gdbarch_deprecated_extract_return_value 
@@ -4165,7 +4165,7 @@
   else if (tdep->cris_abi == CRIS_ABI_V2)
     {
       set_gdbarch_double_bit (gdbarch, 64);
-      set_gdbarch_push_arguments (gdbarch, cris_abi_v2_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, cris_abi_v2_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, cris_abi_v2_store_return_value);
       set_gdbarch_deprecated_extract_return_value
 	(gdbarch, cris_abi_v2_extract_return_value);
Index: d10v-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/d10v-tdep.c,v
retrieving revision 1.87
diff -u -r1.87 d10v-tdep.c
--- d10v-tdep.c	17 Mar 2003 14:23:49 -0000	1.87
+++ d10v-tdep.c	24 Mar 2003 04:29:52 -0000
@@ -1704,7 +1704,7 @@
   set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
 
   set_gdbarch_extract_return_value (gdbarch, d10v_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, d10v_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, d10v_push_arguments);
   set_gdbarch_push_return_address (gdbarch, d10v_push_return_address);
 
   set_gdbarch_store_struct_return (gdbarch, d10v_store_struct_return);
Index: frv-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/frv-tdep.c,v
retrieving revision 1.21
diff -u -r1.21 frv-tdep.c
--- frv-tdep.c	24 Mar 2003 03:54:47 -0000	1.21
+++ frv-tdep.c	24 Mar 2003 04:29:54 -0000
@@ -1091,7 +1091,7 @@
 
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_call_dummy_length (gdbarch, 0);
-  set_gdbarch_push_arguments (gdbarch, frv_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, frv_push_arguments);
   set_gdbarch_push_return_address (gdbarch, frv_push_return_address);
   set_gdbarch_deprecated_pop_frame (gdbarch, frv_pop_frame);
 
Index: gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.207
diff -u -r1.207 gdbarch.sh
--- gdbarch.sh	24 Mar 2003 03:54:48 -0000	1.207
+++ gdbarch.sh	24 Mar 2003 04:30:02 -0000
@@ -556,7 +556,9 @@
 F:2:INTEGER_TO_ADDRESS:CORE_ADDR:integer_to_address:struct type *type, void *buf:type, buf
 #
 f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not::0
-f:2:PUSH_ARGUMENTS:CORE_ADDR:push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr:::default_push_arguments::0
+# Replaced by PUSH_DUMMY_CALL
+F:2:DEPRECATED_PUSH_ARGUMENTS:CORE_ADDR:deprecated_push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr
+M::PUSH_DUMMY_CALL:CORE_ADDR:push_dummy_call:struct regcache *regcache, CORE_ADDR dummy_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:regcache, dummy_addr, nargs, args, sp, struct_return, struct_addr
 F:2:DEPRECATED_PUSH_DUMMY_FRAME:void:deprecated_push_dummy_frame:void:-:::0
 F:2:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
 F:2:DEPRECATED_POP_FRAME:void:deprecated_pop_frame:void:-:::0
Index: h8300-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/h8300-tdep.c,v
retrieving revision 1.43
diff -u -r1.43 h8300-tdep.c
--- h8300-tdep.c	24 Mar 2003 03:54:48 -0000	1.43
+++ h8300-tdep.c	24 Mar 2003 04:30:06 -0000
@@ -1150,7 +1150,7 @@
    * These values and methods are used when gdb calls a target function.  */
   set_gdbarch_push_return_address (gdbarch, h8300_push_return_address);
   set_gdbarch_deprecated_extract_return_value (gdbarch, h8300_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, h8300_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, h8300_push_arguments);
   set_gdbarch_deprecated_pop_frame (gdbarch, h8300_pop_frame);
   set_gdbarch_store_struct_return (gdbarch, h8300_store_struct_return);
   set_gdbarch_deprecated_store_return_value (gdbarch, h8300_store_return_value);
Index: hppa-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/hppa-tdep.c,v
retrieving revision 1.60
diff -u -r1.60 hppa-tdep.c
--- hppa-tdep.c	24 Mar 2003 03:54:48 -0000	1.60
+++ hppa-tdep.c	24 Mar 2003 04:30:13 -0000
@@ -5006,7 +5006,7 @@
   set_gdbarch_call_dummy_length (gdbarch, INSTRUCTION_SIZE * 28);
   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
   /* set_gdbarch_fix_call_dummy (gdbarch, hppa_fix_call_dummy); */
-  set_gdbarch_push_arguments (gdbarch, hppa_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, hppa_push_arguments);
   set_gdbarch_smash_text_address (gdbarch, hppa_smash_text_address);
   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
   set_gdbarch_read_pc (gdbarch, hppa_target_read_pc);
Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.120
diff -u -r1.120 i386-tdep.c
--- i386-tdep.c	24 Mar 2003 03:54:48 -0000	1.120
+++ i386-tdep.c	24 Mar 2003 04:30:14 -0000
@@ -925,7 +925,7 @@
 i386_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
 		     int struct_return, CORE_ADDR struct_addr)
 {
-  sp = default_push_arguments (nargs, args, sp, struct_return, struct_addr);
+  sp = legacy_push_arguments (nargs, args, sp, struct_return, struct_addr);
   
   if (struct_return)
     {
@@ -1587,7 +1587,7 @@
   set_gdbarch_parm_boundary (gdbarch, 32);
 
   set_gdbarch_extract_return_value (gdbarch, i386_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, i386_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, i386_push_arguments);
   set_gdbarch_push_return_address (gdbarch, i386_push_return_address);
   set_gdbarch_deprecated_pop_frame (gdbarch, i386_pop_frame);
   set_gdbarch_store_struct_return (gdbarch, i386_store_struct_return);
Index: ia64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ia64-tdep.c,v
retrieving revision 1.56
diff -u -r1.56 ia64-tdep.c
--- ia64-tdep.c	24 Mar 2003 03:54:48 -0000	1.56
+++ ia64-tdep.c	24 Mar 2003 04:30:20 -0000
@@ -97,7 +97,6 @@
 static gdbarch_use_struct_convention_ftype ia64_use_struct_convention;
 static gdbarch_frameless_function_invocation_ftype ia64_frameless_function_invocation;
 static gdbarch_store_struct_return_ftype ia64_store_struct_return;
-static gdbarch_push_arguments_ftype ia64_push_arguments;
 static gdbarch_push_return_address_ftype ia64_push_return_address;
 static gdbarch_saved_pc_after_call_ftype ia64_saved_pc_after_call;
 static void ia64_pop_frame_regular (struct frame_info *frame);
@@ -2217,7 +2216,7 @@
 
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_call_dummy_length (gdbarch, 0);
-  set_gdbarch_push_arguments (gdbarch, ia64_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, ia64_push_arguments);
   set_gdbarch_push_return_address (gdbarch, ia64_push_return_address);
   set_gdbarch_deprecated_pop_frame (gdbarch, ia64_pop_frame);
 
Index: m68hc11-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/m68hc11-tdep.c,v
retrieving revision 1.53
diff -u -r1.53 m68hc11-tdep.c
--- m68hc11-tdep.c	24 Mar 2003 03:54:48 -0000	1.53
+++ m68hc11-tdep.c	24 Mar 2003 04:30:29 -0000
@@ -1393,7 +1393,7 @@
   set_gdbarch_deprecated_get_saved_register (gdbarch, deprecated_generic_get_saved_register);
   set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
   set_gdbarch_deprecated_extract_return_value (gdbarch, m68hc11_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, m68hc11_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, m68hc11_push_arguments);
   set_gdbarch_push_return_address (gdbarch, m68hc11_push_return_address);
   set_gdbarch_return_value_on_stack (gdbarch, m68hc11_return_value_on_stack);
 
Index: mcore-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mcore-tdep.c,v
retrieving revision 1.45
diff -u -r1.45 mcore-tdep.c
--- mcore-tdep.c	24 Mar 2003 03:54:48 -0000	1.45
+++ mcore-tdep.c	24 Mar 2003 04:30:29 -0000
@@ -1131,7 +1131,7 @@
   set_gdbarch_decr_pc_after_break (gdbarch, 0);
   set_gdbarch_breakpoint_from_pc (gdbarch, mcore_breakpoint_from_pc);
   set_gdbarch_push_return_address (gdbarch, mcore_push_return_address);
-  set_gdbarch_push_arguments (gdbarch, mcore_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, mcore_push_arguments);
   set_gdbarch_call_dummy_length (gdbarch, 0);
 
   /* Frames:  */
Index: mips-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-tdep.c,v
retrieving revision 1.175
diff -u -r1.175 mips-tdep.c
--- mips-tdep.c	24 Mar 2003 03:54:48 -0000	1.175
+++ mips-tdep.c	24 Mar 2003 04:30:41 -0000
@@ -5806,7 +5806,7 @@
   switch (mips_abi)
     {
     case MIPS_ABI_O32:
-      set_gdbarch_push_arguments (gdbarch, mips_o32_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_o32_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_o32_store_return_value);
       set_gdbarch_extract_return_value (gdbarch, mips_o32_extract_return_value);
       tdep->mips_default_saved_regsize = 4;
@@ -5825,7 +5825,7 @@
 					 mips_o32_use_struct_convention);
       break;
     case MIPS_ABI_O64:
-      set_gdbarch_push_arguments (gdbarch, mips_o64_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_o64_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_o64_store_return_value);
       set_gdbarch_deprecated_extract_return_value (gdbarch, mips_o64_extract_return_value);
       tdep->mips_default_saved_regsize = 8;
@@ -5844,7 +5844,7 @@
 					 mips_o32_use_struct_convention);
       break;
     case MIPS_ABI_EABI32:
-      set_gdbarch_push_arguments (gdbarch, mips_eabi_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_eabi_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_eabi_store_return_value);
       set_gdbarch_deprecated_extract_return_value (gdbarch, mips_eabi_extract_return_value);
       tdep->mips_default_saved_regsize = 4;
@@ -5863,7 +5863,7 @@
 					 mips_eabi_use_struct_convention);
       break;
     case MIPS_ABI_EABI64:
-      set_gdbarch_push_arguments (gdbarch, mips_eabi_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_eabi_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_eabi_store_return_value);
       set_gdbarch_deprecated_extract_return_value (gdbarch, mips_eabi_extract_return_value);
       tdep->mips_default_saved_regsize = 8;
@@ -5882,7 +5882,7 @@
 					 mips_eabi_use_struct_convention);
       break;
     case MIPS_ABI_N32:
-      set_gdbarch_push_arguments (gdbarch, mips_n32n64_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_n32n64_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_n32n64_store_return_value);
       set_gdbarch_extract_return_value (gdbarch, mips_n32n64_extract_return_value);
       tdep->mips_default_saved_regsize = 8;
@@ -5913,7 +5913,7 @@
 				       mips_n32n64_reg_struct_has_addr);
       break;
     case MIPS_ABI_N64:
-      set_gdbarch_push_arguments (gdbarch, mips_n32n64_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, mips_n32n64_push_arguments);
       set_gdbarch_deprecated_store_return_value (gdbarch, mips_n32n64_store_return_value);
       set_gdbarch_extract_return_value (gdbarch, mips_n32n64_extract_return_value);
       tdep->mips_default_saved_regsize = 8;
Index: mn10300-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mn10300-tdep.c,v
retrieving revision 1.60
diff -u -r1.60 mn10300-tdep.c
--- mn10300-tdep.c	24 Mar 2003 03:54:48 -0000	1.60
+++ mn10300-tdep.c	24 Mar 2003 04:30:41 -0000
@@ -1197,7 +1197,7 @@
   set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
   set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
-  set_gdbarch_push_arguments (gdbarch, mn10300_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, mn10300_push_arguments);
   set_gdbarch_reg_struct_has_addr (gdbarch, mn10300_reg_struct_has_addr);
   set_gdbarch_push_return_address (gdbarch, mn10300_push_return_address);
   set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.113
diff -u -r1.113 rs6000-tdep.c
--- rs6000-tdep.c	24 Mar 2003 03:54:48 -0000	1.113
+++ rs6000-tdep.c	24 Mar 2003 04:30:59 -0000
@@ -2925,9 +2925,9 @@
      64-bit code.  At some point in the future, this matter needs to be
      revisited.  */
   if (sysv_abi && wordsize == 4)
-    set_gdbarch_push_arguments (gdbarch, ppc_sysv_abi_push_arguments);
+    set_gdbarch_deprecated_push_arguments (gdbarch, ppc_sysv_abi_push_arguments);
   else
-    set_gdbarch_push_arguments (gdbarch, rs6000_push_arguments);
+    set_gdbarch_deprecated_push_arguments (gdbarch, rs6000_push_arguments);
 
   set_gdbarch_store_struct_return (gdbarch, rs6000_store_struct_return);
   set_gdbarch_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
Index: s390-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/s390-tdep.c,v
retrieving revision 1.78
diff -u -r1.78 s390-tdep.c
--- s390-tdep.c	24 Mar 2003 03:54:48 -0000	1.78
+++ s390-tdep.c	24 Mar 2003 04:31:01 -0000
@@ -1866,7 +1866,7 @@
   set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
   set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
-  set_gdbarch_push_arguments (gdbarch, s390_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, s390_push_arguments);
   set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
   set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
   set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
Index: sh-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sh-tdep.c,v
retrieving revision 1.104
diff -u -r1.104 sh-tdep.c
--- sh-tdep.c	24 Mar 2003 03:54:48 -0000	1.104
+++ sh-tdep.c	24 Mar 2003 04:31:04 -0000
@@ -4375,7 +4375,7 @@
   set_gdbarch_deprecated_get_saved_register (gdbarch, deprecated_generic_get_saved_register);
   set_gdbarch_deprecated_init_extra_frame_info (gdbarch, sh_init_extra_frame_info);
   set_gdbarch_deprecated_extract_return_value (gdbarch, sh_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, sh_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, sh_push_arguments);
   set_gdbarch_store_struct_return (gdbarch, sh_store_struct_return);
   set_gdbarch_use_struct_convention (gdbarch, sh_use_struct_convention);
   set_gdbarch_deprecated_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
@@ -4617,7 +4617,7 @@
       set_gdbarch_deprecated_frame_chain (gdbarch, sh64_frame_chain);
       set_gdbarch_deprecated_get_saved_register (gdbarch, sh64_get_saved_register);
       set_gdbarch_deprecated_extract_return_value (gdbarch, sh64_extract_return_value);
-      set_gdbarch_push_arguments (gdbarch, sh64_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, sh64_push_arguments);
       /*set_gdbarch_store_struct_return (gdbarch, sh64_store_struct_return);*/
       set_gdbarch_deprecated_extract_struct_value_address (gdbarch, sh64_extract_struct_value_address);
       set_gdbarch_use_struct_convention (gdbarch, sh64_use_struct_convention);
Index: sparc-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc-tdep.c,v
retrieving revision 1.74
diff -u -r1.74 sparc-tdep.c
--- sparc-tdep.c	24 Mar 2003 03:54:49 -0000	1.74
+++ sparc-tdep.c	24 Mar 2003 04:31:31 -0000
@@ -3260,7 +3260,7 @@
       set_gdbarch_npc_regnum (gdbarch, SPARC32_NPC_REGNUM);
       set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM);
       set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
-      set_gdbarch_push_arguments (gdbarch, sparc32_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, sparc32_push_arguments);
       set_gdbarch_read_fp (gdbarch, generic_target_read_fp);
       set_gdbarch_read_sp (gdbarch, generic_target_read_sp);
 
@@ -3315,7 +3315,7 @@
       set_gdbarch_npc_regnum (gdbarch, SPARC64_NPC_REGNUM);
       set_gdbarch_pc_regnum (gdbarch, SPARC64_PC_REGNUM);
       set_gdbarch_ptr_bit (gdbarch, 8 * TARGET_CHAR_BIT);
-      set_gdbarch_push_arguments (gdbarch, sparc64_push_arguments);
+      set_gdbarch_deprecated_push_arguments (gdbarch, sparc64_push_arguments);
       /* NOTE different for at_entry */
       set_gdbarch_read_fp (gdbarch, sparc64_read_fp);
       set_gdbarch_read_sp (gdbarch, sparc64_read_sp);
Index: v850-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/v850-tdep.c,v
retrieving revision 1.44
diff -u -r1.44 v850-tdep.c
--- v850-tdep.c	24 Mar 2003 03:54:49 -0000	1.44
+++ v850-tdep.c	24 Mar 2003 04:31:36 -0000
@@ -1270,7 +1270,7 @@
    * These values and methods are used when gdb calls a target function.  */
   set_gdbarch_push_return_address (gdbarch, v850_push_return_address);
   set_gdbarch_deprecated_extract_return_value (gdbarch, v850_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, v850_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, v850_push_arguments);
   set_gdbarch_deprecated_pop_frame (gdbarch, v850_pop_frame);
   set_gdbarch_store_struct_return (gdbarch, v850_store_struct_return);
   set_gdbarch_deprecated_store_return_value (gdbarch, v850_store_return_value);
Index: value.h
===================================================================
RCS file: /cvs/src/src/gdb/value.h,v
retrieving revision 1.42
diff -u -r1.42 value.h
--- value.h	20 Feb 2003 00:01:07 -0000	1.42
+++ value.h	24 Mar 2003 04:32:05 -0000
@@ -560,9 +560,9 @@
 
 extern struct value *value_allocate_space_in_inferior (int);
 
-extern CORE_ADDR default_push_arguments (int nargs, struct value ** args,
-					 CORE_ADDR sp, int struct_return,
-					 CORE_ADDR struct_addr);
+extern CORE_ADDR legacy_push_arguments (int nargs, struct value ** args,
+					CORE_ADDR sp, int struct_return,
+					CORE_ADDR struct_addr);
 
 extern struct value *value_of_local (const char *name, int complain);
 
Index: x86-64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/x86-64-tdep.c,v
retrieving revision 1.57
diff -u -r1.57 x86-64-tdep.c
--- x86-64-tdep.c	24 Mar 2003 03:54:50 -0000	1.57
+++ x86-64-tdep.c	24 Mar 2003 04:32:05 -0000
@@ -1013,7 +1013,7 @@
 
   set_gdbarch_extract_return_value (gdbarch, x86_64_extract_return_value);
 
-  set_gdbarch_push_arguments (gdbarch, x86_64_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, x86_64_push_arguments);
   set_gdbarch_push_return_address (gdbarch, x86_64_push_return_address);
   set_gdbarch_deprecated_pop_frame (gdbarch, x86_64_pop_frame);
   set_gdbarch_store_struct_return (gdbarch, x86_64_store_struct_return);
Index: xstormy16-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/xstormy16-tdep.c,v
retrieving revision 1.32
diff -u -r1.32 xstormy16-tdep.c
--- xstormy16-tdep.c	24 Mar 2003 03:54:50 -0000	1.32
+++ xstormy16-tdep.c	24 Mar 2003 04:32:06 -0000
@@ -1086,7 +1086,7 @@
    * These values and methods are used when gdb calls a target function.  */
   set_gdbarch_push_return_address (gdbarch, xstormy16_push_return_address);
   set_gdbarch_deprecated_extract_return_value (gdbarch, xstormy16_extract_return_value);
-  set_gdbarch_push_arguments (gdbarch, xstormy16_push_arguments);
+  set_gdbarch_deprecated_push_arguments (gdbarch, xstormy16_push_arguments);
   set_gdbarch_deprecated_pop_frame (gdbarch, xstormy16_pop_frame);
   set_gdbarch_store_struct_return (gdbarch, xstormy16_store_struct_return);
   set_gdbarch_deprecated_store_return_value (gdbarch, xstormy16_store_return_value);
Index: config/i386/tm-symmetry.h
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/tm-symmetry.h,v
retrieving revision 1.11
diff -u -r1.11 tm-symmetry.h
--- config/i386/tm-symmetry.h	1 Feb 2003 17:28:41 -0000	1.11
+++ config/i386/tm-symmetry.h	24 Mar 2003 04:32:08 -0000
@@ -266,7 +266,7 @@
    passes it on the stack.  gcc should be fixed in future versions to
    adopt native cc conventions.  */
 
-#undef  PUSH_ARGUMENTS
+#undef  DEPRECATED_PUSH_ARGUMENTS
 #undef  STORE_STRUCT_RETURN
 #define STORE_STRUCT_RETURN(ADDR, SP) write_register(0, (ADDR))
 
Index: config/pa/tm-hppa.h
===================================================================
RCS file: /cvs/src/src/gdb/config/pa/tm-hppa.h,v
retrieving revision 1.39
diff -u -r1.39 tm-hppa.h
--- config/pa/tm-hppa.h	24 Mar 2003 03:54:50 -0000	1.39
+++ config/pa/tm-hppa.h	24 Mar 2003 04:32:09 -0000
@@ -618,7 +618,7 @@
 		                      struct value **, struct type *, int);
 
 #if !GDB_MULTI_ARCH
-#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
+#define DEPRECATED_PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
   (hppa_push_arguments((nargs), (args), (sp), (struct_return), (struct_addr)))
 extern CORE_ADDR hppa_push_arguments (int, struct value **, CORE_ADDR, int,
 				      CORE_ADDR);
Index: config/sparc/tm-sp64.h
===================================================================
RCS file: /cvs/src/src/gdb/config/sparc/tm-sp64.h,v
retrieving revision 1.13
diff -u -r1.13 tm-sp64.h
--- config/sparc/tm-sp64.h	3 Mar 2003 20:50:20 -0000	1.13
+++ config/sparc/tm-sp64.h	24 Mar 2003 04:32:09 -0000
@@ -208,8 +208,8 @@
 
 CORE_ADDR sparc64_push_arguments (int,
 				  struct value **, CORE_ADDR, int, CORE_ADDR);
-#undef PUSH_ARGUMENTS
-#define PUSH_ARGUMENTS(A,B,C,D,E) \
+#undef DEPRECATED_PUSH_ARGUMENTS
+#define DEPRECATED_PUSH_ARGUMENTS(A,B,C,D,E) \
      (sparc64_push_arguments ((A), (B), (C), (D), (E)))
 
 /* Store the address of the place in which to copy the structure the
Index: config/sparc/tm-sparc.h
===================================================================
RCS file: /cvs/src/src/gdb/config/sparc/tm-sparc.h,v
retrieving revision 1.40
diff -u -r1.40 tm-sparc.h
--- config/sparc/tm-sparc.h	24 Mar 2003 03:54:51 -0000	1.40
+++ config/sparc/tm-sparc.h	24 Mar 2003 04:32:09 -0000
@@ -688,7 +688,7 @@
 void sparc_push_dummy_frame (void);
 void sparc_pop_frame (void);
 
-#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
+#define DEPRECATED_PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
      sparc32_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR)
 
 extern CORE_ADDR sparc32_push_arguments (int, struct value **, CORE_ADDR, int,
Index: doc/gdbint.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v
retrieving revision 1.133
diff -u -r1.133 gdbint.texinfo
--- doc/gdbint.texinfo	24 Mar 2003 03:54:51 -0000	1.133
+++ doc/gdbint.texinfo	24 Mar 2003 04:32:22 -0000
@@ -3709,13 +3709,20 @@
 If defined, used by @code{frame_pop} to remove a stack frame.  This
 method has been superseeded by generic code.
 
- at item PUSH_ARGUMENTS (@var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr})
- at findex PUSH_ARGUMENTS
-Define this to push arguments onto the stack for inferior function
-call.  Returns the updated stack pointer value.
+ at item push_dummy_call (@var{gdbarch}, @var{regcache}, @var{dummy_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr})
+ at findex push_dummy_call
+ at findex DEPRECATED_PUSH_ARGUMENTS.
+Define this to push the dummy frame's call to the inferior function onto
+the stack.  In addition to pushing @var{nargs}, the code should push
+ at var{struct_addr} (when @var{struct_return}), and the return value (in
+the call dummy at @var{dummy_addr}).
 
- at item PUSH_DUMMY_FRAME
- at findex PUSH_DUMMY_FRAME
+Returns the updated top-of-stack pointer.
+
+This method replaces @code{DEPRECATED_PUSH_ARGUMENTS}.
+
+ at item DEPRECATED_PUSH_DUMMY_FRAME
+ at findex DEPRECATED_PUSH_DUMMY_FRAME
 Used in @samp{call_function_by_hand} to create an artificial stack frame.
 
 @item REGISTER_BYTES

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