diff options
author | Andrew Cagney <cagney@b1.cygnus.com> | 1999-02-22 19:38:39 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1999-02-22 11:38:39 -0800 |
commit | a50f2a09bad28c34417b321ca0ce3ea7a793a3d6 (patch) | |
tree | 69af8ad6974b103f962e62d86bce92974bf2ce31 /gcc | |
parent | 3b7265ff89ae9a1fad9fc05b055274513bf0d7c2 (diff) | |
download | gcc-a50f2a09bad28c34417b321ca0ce3ea7a793a3d6.zip gcc-a50f2a09bad28c34417b321ca0ce3ea7a793a3d6.tar.gz gcc-a50f2a09bad28c34417b321ca0ce3ea7a793a3d6.tar.bz2 |
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 <wilson@cygnus.com>:
* mips.c (function_prologue): Adjust frame size in .frame pseudo-op
when TARGET_MIPS16 && frame_pointer_needed.
From-SVN: r25382
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 20 |
2 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 719f6c1..909637b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Mon Feb 22 19:36:33 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * 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 <wilson@cygnus.com>: + * mips.c (function_prologue): Adjust frame size in .frame pseudo-op + when TARGET_MIPS16 && frame_pointer_needed. + 1999-02-22 Nick Clifton <nickc@cygnus.com> * config/arm/arm.h: Add TARGET_CPU_strongarm1100. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index dc9ca53..6491b71 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 ()) |