diff options
author | Stu Grossman <grossman@cygnus> | 1993-05-05 23:52:10 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1993-05-05 23:52:10 +0000 |
commit | 8fa7488059586540877a917d40c28472105574f4 (patch) | |
tree | ec32b6757e43b165103aebdc5ee90600b1e443ea /gdb/hppa-tdep.c | |
parent | df6dfda7fb80d6e1b7471677142d79cb4c91159d (diff) | |
download | gdb-8fa7488059586540877a917d40c28472105574f4.zip gdb-8fa7488059586540877a917d40c28472105574f4.tar.gz 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.c | 25 |
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 */ |