* hppa-tdep.c (frame_saved_pc): Handle backtracing through signal
handler in dynamically linked executables. mentor-7139
This commit is contained in:
parent
d5263ab426
commit
c38e0b58f3
2 changed files with 21 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
Wed Jun 7 12:41:42 1995 Jeff Law (law@snake.cs.utah.edu)
|
||||
|
||||
* hppa-tdep.c (frame_saved_pc): Handle backtracing through signal
|
||||
handler in dynamically linked executables.
|
||||
|
||||
Tue Jun 6 10:44:25 1995 Michael Meissner <meissner@tiktok.cygnus.com>
|
||||
|
||||
From Andrew Cagney <cagney@highland.com.au>
|
||||
|
|
|
@ -866,7 +866,22 @@ restart:
|
|||
will return to. */
|
||||
u = find_unwind_entry (pc);
|
||||
if (u && u->stub_type != 0)
|
||||
{
|
||||
unsigned int insn;
|
||||
|
||||
/* If this is a dynamic executable, and we're in a signal handler,
|
||||
then the call chain will eventually point us into the stub for
|
||||
_sigreturn. Unlike most cases, we'll be pointed to the branch
|
||||
to the real sigreturn rather than the code after the real branch!.
|
||||
|
||||
Else, try to dig the address the stub will return to in the normal
|
||||
fashion. */
|
||||
insn = read_memory_integer (pc, 4);
|
||||
if ((insn & 0xfc00e000) == 0xe8000000)
|
||||
return (pc + extract_17 (insn) + 8) & ~0x3;
|
||||
else
|
||||
goto restart;
|
||||
}
|
||||
|
||||
return pc;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue