From: Stu Grossman Date: Wed, 5 May 1993 23:52:10 +0000 (+0000) Subject: * Patches from Jeffrey Law . X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8fa7488059586540877a917d40c28472105574f4;p=binutils-gdb.git * Patches from Jeffrey Law . * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a8b003b2612..c87b328f995 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,6 +1,15 @@ Wed May 5 15:16:33 1993 Stu Grossman (grossman@cygnus.com) * Patches from Jeffrey Law . + * 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. * gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then use unwind descriptors to determine if the frame chain is valid. * gdb/hppa-tdep.c (find_dummy_frame_regs): Rework so that diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index 2163ed5d8d1..65443b9eae6 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 */