aboutsummaryrefslogtreecommitdiff
path: root/gdb/hppa-tdep.c
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1993-05-05 23:52:10 +0000
committerStu Grossman <grossman@cygnus>1993-05-05 23:52:10 +0000
commit8fa7488059586540877a917d40c28472105574f4 (patch)
treeec32b6757e43b165103aebdc5ee90600b1e443ea /gdb/hppa-tdep.c
parentdf6dfda7fb80d6e1b7471677142d79cb4c91159d (diff)
downloadfsf-binutils-gdb-8fa7488059586540877a917d40c28472105574f4.zip
fsf-binutils-gdb-8fa7488059586540877a917d40c28472105574f4.tar.gz
fsf-binutils-gdb-8fa7488059586540877a917d40c28472105574f4.tar.bz2
* Patches from Jeffrey Law <law@cs.utah.edu>.
* gdb/hppa-tdep.c: Declare frame_saved_pc. (frameless_function_invocation): New function. (frame_saved_pc, init_extra_frame_info): Use frameless_function_invocation. * gdb/config/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after call instead of just grabbing the value currently in %r2. (FRAMELESS_FUNCTION_INVOCATION): Use frameless_function_invocation. * gdb/config/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private definition and use the common one in tm-hppa.h.
Diffstat (limited to 'gdb/hppa-tdep.c')
-rw-r--r--gdb/hppa-tdep.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 2163ed5..65443b9 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -61,6 +61,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
static int restore_pc_queue PARAMS ((struct frame_saved_regs *fsr));
static int hppa_alignof PARAMS ((struct type *arg));
+CORE_ADDR frame_saved_pc PARAMS ((FRAME frame));
/* Routines to extract various sized constants out of hppa
@@ -345,6 +346,26 @@ rp_saved(pc)
return 0;
}
+int
+frameless_function_invocation (frame)
+ FRAME frame;
+{
+
+ if (use_unwind)
+ {
+ struct unwind_table_entry *u;
+
+ u = find_unwind_entry (frame->pc);
+
+ if (u == 0)
+ return 0;
+
+ return (u->Total_frame_size == 0);
+ }
+ else
+ return frameless_look_for_prologue (frame);
+}
+
CORE_ADDR
saved_pc_after_call (frame)
FRAME frame;
@@ -362,7 +383,7 @@ frame_saved_pc (frame)
{
CORE_ADDR pc = get_frame_pc (frame);
- if (frameless_look_for_prologue (frame))
+ if (frameless_function_invocation (frame))
{
int ret_regnum;
@@ -401,7 +422,7 @@ init_extra_frame_info (fromleaf, frame)
else
frame->frame = read_register (SP_REGNUM) - framesize;
- if (!frameless_look_for_prologue (frame)) /* Frameless? */
+ if (!frameless_function_invocation (frame)) /* Frameless? */
return; /* No, quit now */
/* For frameless functions, we need to look at the caller's frame */