From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24154 invoked by alias); 24 Mar 2003 14:19:32 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 24146 invoked from network); 24 Mar 2003 14:19:31 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 24 Mar 2003 14:19:31 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18xUgv-0004Qy-00; Mon, 24 Mar 2003 10:20:53 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18xSnM-0006dz-00; Mon, 24 Mar 2003 09:19:24 -0500 Date: Mon, 24 Mar 2003 14:19:00 -0000 From: Daniel Jacobowitz To: Andrew Cagney Cc: gdb-patches@sources.redhat.com Subject: Re: [patch rfc] PUSH_ARGUMENTS() -> push_dummy_call() Message-ID: <20030324141924.GA25455@nevyn.them.org> Mail-Followup-To: Andrew Cagney , gdb-patches@sources.redhat.com References: <3E7E977A.5080302@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E7E977A.5080302@redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-03/txt/msg00470.txt.bz2 On Mon, Mar 24, 2003 at 12:28:26AM -0500, Andrew Cagney wrote: > 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). While you're rearranging this code, I'd like your thoughts on something. I was working on an old project last week - "catch catch" and "catch throw". A basic implementation is easy. A more interesting implementation, however, requires being able to extract the arguments to __cxa_throw (one of the arguments is the object being thrown, another is the typeinfo for it). This requires being able to figure out where a function which takes two pointers expects them to be. __cxa_throw will generally not have any debug info. This logic already exists in the push argument code. Is it too much overhead/PITA to restructure it so that we can use that information? If so I'll probably need to add a new architecture method to get ths sort of information. > > Andrew > > PS: Looking at the comments, this one has been on the cards for ~7 years. > 2003-03-23 Andrew Cagney > > * 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 > > * 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. > > -@item PUSH_ARGUMENTS (@var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr}) > -@findex PUSH_ARGUMENTS > -Define this to push arguments onto the stack for inferior function > -call. Returns the updated stack pointer value. > +@item push_dummy_call (@var{gdbarch}, @var{regcache}, @var{dummy_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr}) > +@findex push_dummy_call > +@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 > +@var{struct_addr} (when @var{struct_return}), and the return value (in > +the call dummy at @var{dummy_addr}). > > -@item PUSH_DUMMY_FRAME > -@findex PUSH_DUMMY_FRAME > +Returns the updated top-of-stack pointer. > + > +This method replaces @code{DEPRECATED_PUSH_ARGUMENTS}. > + > +@item DEPRECATED_PUSH_DUMMY_FRAME > +@findex DEPRECATED_PUSH_DUMMY_FRAME > Used in @samp{call_function_by_hand} to create an artificial stack frame. > > @item REGISTER_BYTES -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer