mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-12 03:43:33 +08:00
* 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:
parent
00c916f4a8
commit
5812b9a12d
@ -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.
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user