on restart. Fixes problem with backtracing through functions that
use virtual frame pointers.
+Sat Dec 19 09:55:09 1998 Stu Grossman <grossman@babylon-5.cygnus.com>
+
+ * mips-tdep.c (mips32_heuristic_proc_desc): Clear temp_saved_regs
+ on restart. Fixes problem with backtracing through functions that
+ use virtual frame pointers.
+
Fri Dec 18 14:23:34 1998 Andrew Cagney <cagney@chook>
Fri Dec 18 14:23:34 1998 Andrew Cagney <cagney@chook>
+ * mips-tdep.c (mips_push_arguments): Don't left-shift small
+ structs being passed in a register when an O64 target.
+
* config/mips/tm-mips.h (enum mips_fpu_type, mips_fpu): Move to
mips-tdep.c.
* config/mips/tm-mips.h (enum mips_fpu_type, mips_fpu): Move to
mips-tdep.c.
CORE_ADDR cur_pc;
CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
restart:
CORE_ADDR cur_pc;
CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
restart:
+ memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
PROC_FRAME_ADJUST (&temp_proc_desc) = 0; /* offset of FP from SP */
for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
PROC_FRAME_ADJUST (&temp_proc_desc) = 0; /* offset of FP from SP */
for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
It does not seem to be necessary to do the
same for integral types.
It does not seem to be necessary to do the
same for integral types.
- Also don't do this adjustment on EABI targets. */
+ Also don't do this adjustment on EABI and O64
+ binaries. */
- if (!MIPS_EABI &&
- TARGET_BYTE_ORDER == BIG_ENDIAN &&
- partial_len < MIPS_REGSIZE &&
- (typecode == TYPE_CODE_STRUCT ||
- typecode == TYPE_CODE_UNION))
+ if (!MIPS_EABI
+ && (MIPS_REGSIZE < 8)
+ && TARGET_BYTE_ORDER == BIG_ENDIAN
+ && (partial_len < MIPS_REGSIZE)
+ && (typecode == TYPE_CODE_STRUCT ||
+ typecode == TYPE_CODE_UNION))
regval <<= ((MIPS_REGSIZE - partial_len) *
TARGET_CHAR_BIT);
regval <<= ((MIPS_REGSIZE - partial_len) *
TARGET_CHAR_BIT);