aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@b1.cygnus.com>1999-02-22 19:38:39 +0000
committerJim Wilson <wilson@gcc.gnu.org>1999-02-22 11:38:39 -0800
commita50f2a09bad28c34417b321ca0ce3ea7a793a3d6 (patch)
tree69af8ad6974b103f962e62d86bce92974bf2ce31 /gcc
parent3b7265ff89ae9a1fad9fc05b055274513bf0d7c2 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/config/mips/mips.c20
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 ())