aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1992-12-28 23:19:51 +0000
committerStu Grossman <grossman@cygnus>1992-12-28 23:19:51 +0000
commitb5c10493e9666be2c7413ffcf712160d35246966 (patch)
treeb2cba41a6e35b87294ec20c7c80baa525ddceb95 /gdb/infcmd.c
parentedff05870e92c6ff6ff111c2f4adb1b4184a04d6 (diff)
downloadgdb-b5c10493e9666be2c7413ffcf712160d35246966.zip
gdb-b5c10493e9666be2c7413ffcf712160d35246966.tar.gz
gdb-b5c10493e9666be2c7413ffcf712160d35246966.tar.bz2
* hppah-tdep.c (frame_saved_pc): Use better test for outermost
frame. Use find_return_regnum to find the caller. * (find_unwind_entry): New routine to locate stack frame info associated with a procedure. This looks in the $UNWIND_START$ section in the SOM file. * (find_return_regnum): New routine. Uses find_unwind_entry() to figure out where the caller's return address is stored. * (find_proc_framesize): New routine. Uses find_unwind_entry() to figure out the frame size for a procedure. * (saved_pc_after_call): New routine, moved from tm-hppa.h. * (init_extra_frame_info): New routine. Corrects PC and FP for outermost frame if necessary. * (frame_chain): New routine, moved from tm-hppa.h. * (skip_trampoline_code): Handle computed function calls (ie: calls from $$dyncall). * (unwind_command): Temporary support function to allow user to control/observe aspects of the unwind (stack frame) info. * infcmd.c (read_pc): (Temporary), put a hack in to see if the PC was in a system call, if so, then read the PC from r31. * tm-hppah.h (SKIP_TRAMPOLINE_CODE, IN_SOLIB_TRAMPOLINE): Deal with extra arg for skip_trampoline_code(). * (INIT_EXTRA_FRAME_INFO): Define to point at subr (see above). * (FRAME_CHAIN, FRAME_CHAIN_VALID): Turn into real subroutines. * tm-hppa.h (SAVED_PC_AFTER_CALL): Turn into real subroutine.
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index c190ffe..05d2214 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -877,6 +877,13 @@ path_command (dirname, from_tty)
CORE_ADDR
read_pc ()
{
+#if GDB_TARGET_IS_HPPA
+ int flags = read_register(FLAGS_REGNUM);
+
+ if (flags & 2)
+ return read_register(31) & ~0x3;
+#endif
+
return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
}