* hppa-tdep.c (frame_chain): Fix more obscure problems caused

by system calls that core dump processes without saving all
        the register state.
This commit is contained in:
Jeff Law 1995-10-18 05:48:23 +00:00
parent 00c916f4a8
commit 5812b9a12d
2 changed files with 32 additions and 2 deletions

View File

@ -1,5 +1,9 @@
Tue Oct 17 10:38:53 1995 Jeffrey A Law (law@cygnus.com)
* hppa-tdep.c (frame_chain): Fix more obscure problems caused
by system calls that core dump processes without saving all
the register state.
* config/pa/hppahpux.mt (XDEPFILES): Remove bogus definition.
* config/pa/hppapro.mt (XDEPFILES): Likewise.

View File

@ -1076,8 +1076,11 @@ frame_chain (frame)
/* Abominable hack. */
if (current_target.to_has_execution == 0
&& saved_regs.regs[FLAGS_REGNUM]
&& (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4) & 0x2))
&& ((saved_regs.regs[FLAGS_REGNUM]
&& (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4)
& 0x2))
|| (saved_regs.regs[FLAGS_REGNUM] == 0
&& read_register (FLAGS_REGNUM) & 0x2)))
{
u = find_unwind_entry (FRAME_SAVED_PC (frame));
if (!u)
@ -1091,6 +1094,29 @@ frame_chain (frame)
}
else
{
struct frame_saved_regs saved_regs;
/* Get the innermost frame. */
tmp_frame = frame;
while (tmp_frame->next != NULL)
tmp_frame = tmp_frame->next;
get_frame_saved_regs (tmp_frame, &saved_regs);
/* Abominable hack. See above. */
if (current_target.to_has_execution == 0
&& ((saved_regs.regs[FLAGS_REGNUM]
&& (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4)
& 0x2))
|| (saved_regs.regs[FLAGS_REGNUM] == 0
&& read_register (FLAGS_REGNUM) & 0x2)))
{
u = find_unwind_entry (FRAME_SAVED_PC (frame));
if (!u)
return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
else
return frame_base - (u->Total_frame_size << 3);
}
/* The value in %r3 was never saved into the stack (thus %r3 still
holds the value of the previous frame pointer). */
return read_register (FP_REGNUM);