From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8352 invoked by alias); 16 Aug 2002 01:42:01 -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 8065 invoked from network); 16 Aug 2002 01:42:00 -0000 Received: from unknown (HELO localhost.redhat.com) (216.138.202.10) by sources.redhat.com with SMTP; 16 Aug 2002 01:42:00 -0000 Received: from ges.redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id A31B13C03; Thu, 15 Aug 2002 21:41:58 -0400 (EDT) Message-ID: <3D5C5866.2070607@ges.redhat.com> Date: Thu, 15 Aug 2002 18:42:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.0) Gecko/20020810 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Snyder Cc: gdb-patches@sources.redhat.com, cagney@redhat.com Subject: Re: [PATCH] mips gdbarch-ification References: <3D5C50C5.A666EDF9@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2002-08/txt/msg00402.txt.bz2 Michael, The below should not be part of this change, be sure to not commit it. (but thanks for cleaning up those methods) Andrew > *************** mips_frame_chain (struct frame_info *fra > *** 2294,2302 **** > we loop forever if we see a zero size frame. */ > if (PROC_FRAME_REG (proc_desc) == SP_REGNUM > && PROC_FRAME_OFFSET (proc_desc) == 0 > ! /* The previous frame from a sigtramp frame might be frameless > ! and have frame size zero. */ > ! && !frame->signal_handler_caller) > return 0; > else > return get_frame_pointer (frame, proc_desc); > --- 2302,2312 ---- > we loop forever if we see a zero size frame. */ > if (PROC_FRAME_REG (proc_desc) == SP_REGNUM > && PROC_FRAME_OFFSET (proc_desc) == 0 > ! /* The previous frame from a sigtramp frame might be frameless > ! and have frame size zero. */ > ! && !frame->signal_handler_caller > ! /* Check if this is a call dummy frame. */ > ! && frame->pc != mips_call_dummy_address ()) > return 0; > else > return get_frame_pointer (frame, proc_desc); > *************** mips_o32o64_push_arguments (int nargs, > *** 2959,2965 **** > argreg = A0_REGNUM; > float_argreg = FPA0_REGNUM; > > ! /* the struct_return pointer occupies the first parameter-passing reg */ > if (struct_return) > { > if (mips_debug) > --- 2969,2975 ---- > argreg = A0_REGNUM; > float_argreg = FPA0_REGNUM; > > ! /* The struct_return pointer occupies the first parameter-passing reg. */ > if (struct_return) > { > if (mips_debug) > *************** mips_pop_frame (void) > *** 3346,3358 **** > if (frame->saved_regs == NULL) > FRAME_INIT_SAVED_REGS (frame); > for (regnum = 0; regnum < NUM_REGS; regnum++) > ! { > ! if (regnum != SP_REGNUM && regnum != PC_REGNUM > ! && frame->saved_regs[regnum]) > ! write_register (regnum, > ! read_memory_integer (frame->saved_regs[regnum], > ! MIPS_SAVED_REGSIZE)); > ! } > write_register (SP_REGNUM, new_sp); > flush_cached_frames (); > > --- 3356,3377 ---- > if (frame->saved_regs == NULL) > FRAME_INIT_SAVED_REGS (frame); > for (regnum = 0; regnum < NUM_REGS; regnum++) > ! if (regnum != SP_REGNUM && regnum != PC_REGNUM > ! && frame->saved_regs[regnum]) > ! { > ! /* Floating point registers must not be sign extended, > ! in case MIPS_SAVED_REGSIZE = 4 but sizeof (FP0_REGNUM) == 8. */ > ! > ! if (FP0_REGNUM <= regnum && regnum < FP0_REGNUM + 32) > ! write_register (regnum, > ! read_memory_unsigned_integer (frame->saved_regs[regnum], > ! MIPS_SAVED_REGSIZE)); > ! else > ! write_register (regnum, > ! read_memory_integer (frame->saved_regs[regnum], > ! MIPS_SAVED_REGSIZE)); > ! } > ! > write_register (SP_REGNUM, new_sp); > flush_cached_frames (); > > *************** return_value_location (struct type *valt > *** 4079,4093 **** > if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG > && len < MIPS_SAVED_REGSIZE) > { > ! /* "un-left-justify" the value in the low register */ > ! lo->reg_offset = MIPS_SAVED_REGSIZE - len; > ! lo->len = len; > hi->reg_offset = 0; > hi->len = 0; > } > else if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG > && len > MIPS_SAVED_REGSIZE /* odd-size structs */ > && len < MIPS_SAVED_REGSIZE * 2 > && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT || > TYPE_CODE (valtype) == TYPE_CODE_UNION)) > { > --- 4098,4125 ---- > if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG > && len < MIPS_SAVED_REGSIZE) > { > ! if ((gdbarch_tdep (current_gdbarch) -> mips_abi == MIPS_ABI_N32 > ! || gdbarch_tdep (current_gdbarch) -> mips_abi == MIPS_ABI_N64) > ! && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT > ! || TYPE_CODE (valtype) == TYPE_CODE_UNION)) > ! { > ! /* Values are already aligned in the low register. */ > ! lo->reg_offset = 0; > ! } > ! else > ! { > ! /* "un-left-justify" the value in the low register */ > ! lo->reg_offset = MIPS_SAVED_REGSIZE - len; > ! } > hi->reg_offset = 0; > + lo->len = len; > hi->len = 0; > } > else if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG > && len > MIPS_SAVED_REGSIZE /* odd-size structs */ > && len < MIPS_SAVED_REGSIZE * 2 > + && gdbarch_tdep (current_gdbarch) -> mips_abi != MIPS_ABI_N32 > + && gdbarch_tdep (current_gdbarch) -> mips_abi != MIPS_ABI_N64 > && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT || > TYPE_CODE (valtype) == TYPE_CODE_UNION)) > {