[PATCH] mips gdbarch-ification
Michael Snyder
msnyder@redhat.com
Thu Aug 15 20:11:00 GMT 2002
Andrew Cagney wrote:
>
> Michael,
>
> The below should not be part of this change, be sure to not commit it.
>
> (but thanks for cleaning up those methods)
> Andrew
Yoiks! I must have diffed the wrong file. Don't worry,
(somehow) I managed to check in (only) the right changes.
This is what comes of having so many patches outstanding
(hint hint)
> > *************** 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))
> > {
More information about the Gdb-patches
mailing list