From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6056 invoked by alias); 13 Sep 2002 17:55:22 -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 6023 invoked from network); 13 Sep 2002 17:55:21 -0000 Received: from unknown (HELO localhost.redhat.com) (216.138.202.10) by sources.redhat.com with SMTP; 13 Sep 2002 17:55:21 -0000 Received: from ges.redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 514233C96 for ; Fri, 13 Sep 2002 13:55:19 -0400 (EDT) Message-ID: <3D822687.9080300@ges.redhat.com> Date: Fri, 13 Sep 2002 10:55:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.0) Gecko/20020824 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [patch/mips] Use unwind in mips_get_saved_register Content-Type: multipart/mixed; boundary="------------010005060506050205000502" X-SW-Source: 2002-09/txt/msg00252.txt.bz2 This is a multi-part message in MIME format. --------------010005060506050205000502 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 553 Hello, The attached is ``two steps forward, one step back'' patch. It modifies mips_get_saved_register() so that it uses the new unwind code. The new unwind code automatically handles the fetching of registers in dummy-frames. Unfortunatly, the change doesn't fix the problem of the MIPS fiddling memory register reads dependant on the current ABI. I think, over all it is a step forward though. It at least helps to make it possible to convert the MIPS to generic dummy frames. -o32 -64 and -n32 all show no regressions. committed, Andrew --------------010005060506050205000502 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 2903 Fri Sep 13 07:42:09 2002 Andrew Cagney * mips-tdep.c (mips_get_saved_register): Re-hack using frame_register_unwind. Index: mips-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-tdep.c,v retrieving revision 1.121 diff -u -r1.121 mips-tdep.c --- mips-tdep.c 10 Sep 2002 21:31:18 -0000 1.121 +++ mips-tdep.c 13 Sep 2002 17:21:13 -0000 @@ -5426,59 +5426,47 @@ static void mips_get_saved_register (char *raw_buffer, - int *optimized, + int *optimizedp, CORE_ADDR *addrp, struct frame_info *frame, int regnum, - enum lval_type *lval) + enum lval_type *lvalp) { - CORE_ADDR addr; + CORE_ADDR addrx; + enum lval_type lvalx; + int optimizedx; + int realnum; if (!target_has_registers) error ("No registers."); - /* Normal systems don't optimize out things with register numbers. */ - if (optimized != NULL) - *optimized = 0; - addr = find_saved_register (frame, regnum); - if (addr != 0) + /* Make certain that all needed parameters are present. */ + if (addrp == NULL) + addrp = &addrx; + if (lvalp == NULL) + lvalp = &lvalx; + if (optimizedp == NULL) + optimizedp = &optimizedx; + frame_register_unwind (get_next_frame (frame), regnum, optimizedp, lvalp, + addrp, &realnum, raw_buffer); + /* FIXME: cagney/2002-09-13: This is just so bad. The MIPS should + have a pseudo register range that correspons to the ABI's, rather + than the ISA's, view of registers. These registers would then + implicitly describe their size and hence could be used without + the below munging. */ + if ((*lvalp) == lval_memory) { - if (lval != NULL) - *lval = lval_memory; - if (regnum == SP_REGNUM) - { - if (raw_buffer != NULL) - { - /* Put it back in target format. */ - store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), - (LONGEST) addr); - } - if (addrp != NULL) - *addrp = 0; - return; - } if (raw_buffer != NULL) { - LONGEST val; if (regnum < 32) - /* Only MIPS_SAVED_REGSIZE bytes of GP registers are - saved. */ - val = read_memory_integer (addr, MIPS_SAVED_REGSIZE); - else - val = read_memory_integer (addr, REGISTER_RAW_SIZE (regnum)); - store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), val); + { + /* Only MIPS_SAVED_REGSIZE bytes of GP registers are + saved. */ + LONGEST val = read_memory_integer ((*addrp), MIPS_SAVED_REGSIZE); + store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), val); + } } } - else - { - if (lval != NULL) - *lval = lval_register; - addr = REGISTER_BYTE (regnum); - if (raw_buffer != NULL) - read_register_gen (regnum, raw_buffer); - } - if (addrp != NULL) - *addrp = addr; } /* Immediately after a function call, return the saved pc. --------------010005060506050205000502--