From: Andrew Cagney Date: Mon, 22 Feb 1999 19:38:39 +0000 (+0000) Subject: Fix mips16 debug info problems with frame address. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a50f2a09bad28c34417b321ca0ce3ea7a793a3d6;p=gcc.git Fix mips16 debug info problems with frame address. * config/mips/mips.c (mips_debugger_offset): When TARGET_MIPS16 && frame_pointer_needed adjust frame size. (function_prologue): Don't MIPS16 .mask GPOFFSET. Already adjusted in .frame pseudo-op. Frm Jim Wilson : * mips.c (function_prologue): Adjust frame size in .frame pseudo-op when TARGET_MIPS16 && frame_pointer_needed. From-SVN: r25382 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 719f6c11e17..909637b91e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Mon Feb 22 19:36:33 1999 Andrew Cagney + + * config/mips/mips.c (mips_debugger_offset): When TARGET_MIPS16 && + frame_pointer_needed adjust frame size. + (function_prologue): Don't MIPS16 .mask GPOFFSET. Already adjusted + in .frame pseudo-op. + Frm Jim Wilson : + * mips.c (function_prologue): Adjust frame size in .frame pseudo-op + when TARGET_MIPS16 && frame_pointer_needed. + 1999-02-22 Nick Clifton * config/arm/arm.h: Add TARGET_CPU_strongarm1100. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index dc9ca53bcba..6491b71168f 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -4545,6 +4545,10 @@ mips_debugger_offset (addr, offset) ? compute_frame_size (get_frame_size ()) : current_frame_info.total_size; + /* MIPS16 frame is smaller */ + if (frame_pointer_needed && TARGET_MIPS16) + frame_size -= current_function_outgoing_args_size; + offset = offset - frame_size; } @@ -6115,25 +6119,31 @@ function_prologue (file, size) if (!flag_inhibit_size_directive) { + /* .frame FRAMEREG, FRAMESIZE, RETREG */ fprintf (file, "\t.frame\t%s,%ld,%s\t\t# vars= %ld, regs= %d/%d, args= %d, extra= %ld\n", (reg_names[(frame_pointer_needed) ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM]), - tsize, reg_names[31 + GP_REG_FIRST], + ((frame_pointer_needed && TARGET_MIPS16) + ? (tsize - current_function_outgoing_args_size) + : tsize), + reg_names[31 + GP_REG_FIRST], current_frame_info.var_size, current_frame_info.num_gp, current_frame_info.num_fp, current_function_outgoing_args_size, current_frame_info.extra_size); + /* .mask MASK, GPOFFSET; .fmask FPOFFSET */ fprintf (file, "\t.mask\t0x%08lx,%ld\n\t.fmask\t0x%08lx,%ld\n", current_frame_info.mask, - ((frame_pointer_needed && TARGET_MIPS16) - ? (current_frame_info.gp_save_offset - - current_function_outgoing_args_size) - : current_frame_info.gp_save_offset), + current_frame_info.gp_save_offset, current_frame_info.fmask, current_frame_info.fp_save_offset); + + /* Require: + OLD_SP == *FRAMEREG + FRAMESIZE => can find old_sp from nominated FP reg. + HIGHEST_GP_SAVED == *FRAMEREG + FRAMESIZE + GPOFFSET => can find saved regs. */ } if (mips_entry && ! mips_can_use_return_insn ())