* mips-tdep.c (mips32_heuristic_proc_desc): Clear temp_saved_regs
on restart. Fixes problem with backtracing through functions that use virtual frame pointers.
This commit is contained in:
parent
27f6ea6995
commit
0e52a532e4
|
@ -1,5 +1,14 @@
|
||||||
|
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
|
* config/mips/tm-mips.h (enum mips_fpu_type, mips_fpu): Move to
|
||||||
mips-tdep.c.
|
mips-tdep.c.
|
||||||
|
|
||||||
|
|
|
@ -1442,6 +1442,7 @@ mips32_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp)
|
||||||
CORE_ADDR cur_pc;
|
CORE_ADDR cur_pc;
|
||||||
CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
|
CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
|
||||||
restart:
|
restart:
|
||||||
|
memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
|
||||||
PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
|
PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
|
||||||
PROC_FRAME_ADJUST (&temp_proc_desc) = 0; /* offset of FP from SP */
|
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)
|
for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
|
||||||
|
@ -1990,13 +1991,15 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr)
|
||||||
It does not seem to be necessary to do the
|
It does not seem to be necessary to do the
|
||||||
same for integral types.
|
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 &&
|
if (!MIPS_EABI
|
||||||
TARGET_BYTE_ORDER == BIG_ENDIAN &&
|
&& (MIPS_REGSIZE < 8)
|
||||||
partial_len < MIPS_REGSIZE &&
|
&& TARGET_BYTE_ORDER == BIG_ENDIAN
|
||||||
(typecode == TYPE_CODE_STRUCT ||
|
&& (partial_len < MIPS_REGSIZE)
|
||||||
typecode == TYPE_CODE_UNION))
|
&& (typecode == TYPE_CODE_STRUCT ||
|
||||||
|
typecode == TYPE_CODE_UNION))
|
||||||
regval <<= ((MIPS_REGSIZE - partial_len) *
|
regval <<= ((MIPS_REGSIZE - partial_len) *
|
||||||
TARGET_CHAR_BIT);
|
TARGET_CHAR_BIT);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue