From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32323 invoked by alias); 30 May 2003 21:15:50 -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 32268 invoked from network); 30 May 2003 21:15:48 -0000 Received: from unknown (HELO localhost.redhat.com) (207.219.125.131) by sources.redhat.com with SMTP; 30 May 2003 21:15:48 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 2E6BE2B2F for ; Fri, 30 May 2003 17:15:40 -0400 (EDT) Message-ID: <3ED7C9FC.7060304@redhat.com> Date: Fri, 30 May 2003 21:15:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030223 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [patch rfc] Add func_addr param to push_dummy_call Content-Type: multipart/mixed; boundary="------------070803060500030007020504" X-SW-Source: 2003-05/txt/msg00574.txt.bz2 This is a multi-part message in MIME format. --------------070803060500030007020504 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 374 Hello, In trying to clean up the MIPS inferior function call code I found that push_dummy_call needed the address of the callee's entry point - MIPS needs to shove that into T9. The attached: - adds that FUNC_ADDR parameter - updates DUMMY_ADDR to the more correct BP_ADDR - updates all calls Eli, note the doco change, I'll commit the non-doco part tomorrow. Andrew --------------070803060500030007020504 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 7833 2003-05-30 Andrew Cagney * gdbarch.sh (PUSH_DUMMY_CALL): Add "func_addr" parameter. Rename "dummy_addr" to "bp_addr". * infcall.c (call_function_by_hand): Pass "funaddr" to gdbarch_push_dummy_call. * gdbarch.h, gdbarch.c: Re-generate. * i386-tdep.c (i386_push_dummy_call): Update. * arm-tdep.c (arm_push_dummy_call): Update. * d10v-tdep.c (d10v_push_dummy_call): Update. Index: doc/ChangeLog 2003-05-30 Andrew Cagney * gdbint.texinfo (Target Architecture Definition): Add "func_addr" parameter to "push_dummy_call". Rename "dummy_addr" to "bp_addr". Index: arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.135 diff -u -r1.135 arm-tdep.c --- arm-tdep.c 17 May 2003 05:59:57 -0000 1.135 +++ arm-tdep.c 30 May 2003 21:10:34 -0000 @@ -1405,19 +1405,20 @@ we should probably support some of them based on the selected ABI. */ static CORE_ADDR -arm_push_dummy_call (struct gdbarch *gdbarch, struct regcache *regcache, - CORE_ADDR dummy_addr, int nargs, struct value **args, - CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) +arm_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, + struct regcache *regcache, CORE_ADDR bp_addr, int nargs, + struct value **args, CORE_ADDR sp, int struct_return, + CORE_ADDR struct_addr) { int argnum; int argreg; int nstack; struct stack_item *si = NULL; - /* Set the return address. For the ARM, the return breakpoint is always - at DUMMY_ADDR. */ + /* Set the return address. For the ARM, the return breakpoint is + always at BP_ADDR. */ /* XXX Fix for Thumb. */ - regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, dummy_addr); + regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr); /* Walk through the list of args and determine how large a temporary stack is required. Need to take care here as structs may be Index: d10v-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/d10v-tdep.c,v retrieving revision 1.116 diff -u -r1.116 d10v-tdep.c --- d10v-tdep.c 8 May 2003 18:46:47 -0000 1.116 +++ d10v-tdep.c 30 May 2003 21:10:35 -0000 @@ -977,9 +977,10 @@ } static CORE_ADDR -d10v_push_dummy_call (struct gdbarch *gdbarch, struct regcache *regcache, - CORE_ADDR dummy_addr, int nargs, struct value **args, - CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) +d10v_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, int struct_return, + CORE_ADDR struct_addr) { int i; int regnum = ARG1_REGNUM; @@ -987,9 +988,9 @@ long val; /* Set the return address. For the d10v, the return breakpoint is - always at DUMMY_ADDR. */ + always at BP_ADDR. */ regcache_cooked_write_unsigned (regcache, LR_REGNUM, - d10v_convert_iaddr_to_raw (dummy_addr)); + d10v_convert_iaddr_to_raw (bp_addr)); /* If STRUCT_RETURN is true, then the struct return address (in STRUCT_ADDR) will consume the first argument-passing register. Index: gdbarch.sh =================================================================== RCS file: /cvs/src/src/gdb/gdbarch.sh,v retrieving revision 1.237 diff -u -r1.237 gdbarch.sh --- gdbarch.sh 17 May 2003 05:59:58 -0000 1.237 +++ gdbarch.sh 30 May 2003 21:10:39 -0000 @@ -568,7 +568,7 @@ f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not::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 +M::PUSH_DUMMY_CALL:CORE_ADDR:push_dummy_call:CORE_ADDR func_addr, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:func_addr, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr F:2:DEPRECATED_PUSH_DUMMY_FRAME:void:deprecated_push_dummy_frame:void:-:::0 # NOTE: This can be handled directly in push_dummy_call. F:2:DEPRECATED_PUSH_RETURN_ADDRESS:CORE_ADDR:deprecated_push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0 Index: i386-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386-tdep.c,v retrieving revision 1.145 diff -u -r1.145 i386-tdep.c --- i386-tdep.c 30 May 2003 19:24:29 -0000 1.145 +++ i386-tdep.c 30 May 2003 21:10:39 -0000 @@ -1005,9 +1005,10 @@ static CORE_ADDR -i386_push_dummy_call (struct gdbarch *gdbarch, struct regcache *regcache, - CORE_ADDR dummy_addr, int nargs, struct value **args, - CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) +i386_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, + struct regcache *regcache, CORE_ADDR bp_addr, int nargs, + struct value **args, CORE_ADDR sp, int struct_return, + CORE_ADDR struct_addr) { char buf[4]; int i; @@ -1038,7 +1039,7 @@ /* Store return address. */ sp -= 4; - store_unsigned_integer (buf, 4, dummy_addr); + store_unsigned_integer (buf, 4, bp_addr); write_memory (sp, buf, 4); /* Finally, update the stack pointer... */ Index: infcall.c =================================================================== RCS file: /cvs/src/src/gdb/infcall.c,v retrieving revision 1.12 diff -u -r1.12 infcall.c --- infcall.c 30 May 2003 18:43:38 -0000 1.12 +++ infcall.c 30 May 2003 21:10:39 -0000 @@ -747,7 +747,7 @@ /* 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, + sp = gdbarch_push_dummy_call (current_gdbarch, funaddr, current_regcache, bp_addr, nargs, args, sp, struct_return, struct_addr); else if (DEPRECATED_PUSH_ARGUMENTS_P ()) Index: doc/gdbint.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v retrieving revision 1.147 diff -u -r1.147 gdbint.texinfo --- doc/gdbint.texinfo 21 May 2003 19:52:39 -0000 1.147 +++ doc/gdbint.texinfo 30 May 2003 21:10:42 -0000 @@ -3678,14 +3678,13 @@ If defined, used by @code{frame_pop} to remove a stack frame. This method has been superseeded by generic code. -@item push_dummy_call (@var{gdbarch}, @var{regcache}, @var{dummy_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr}) +@item push_dummy_call (@var{gdbarch}, @var{func_addr}, @var{regcache}, @var{pc_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr}) @findex push_dummy_call @findex DEPRECATED_PUSH_ARGUMENTS. -@anchor{push_dummy_call} -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}). +@anchor{push_dummy_call} 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 address (@var{bp_addr}). Returns the updated top-of-stack pointer. --------------070803060500030007020504--