mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
* 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.
This commit is contained in:
@ -1,6 +1,15 @@
|
|||||||
Wed May 5 15:16:33 1993 Stu Grossman (grossman@cygnus.com)
|
Wed May 5 15:16:33 1993 Stu Grossman (grossman@cygnus.com)
|
||||||
|
|
||||||
* Patches from Jeffrey Law <law@cs.utah.edu>.
|
* 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.
|
||||||
* gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
|
* gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
|
||||||
use unwind descriptors to determine if the frame chain is valid.
|
use unwind descriptors to determine if the frame chain is valid.
|
||||||
* gdb/hppa-tdep.c (find_dummy_frame_regs): Rework so that
|
* gdb/hppa-tdep.c (find_dummy_frame_regs): Rework so that
|
||||||
|
@ -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 restore_pc_queue PARAMS ((struct frame_saved_regs *fsr));
|
||||||
static int hppa_alignof PARAMS ((struct type *arg));
|
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
|
/* Routines to extract various sized constants out of hppa
|
||||||
@ -345,6 +346,26 @@ rp_saved(pc)
|
|||||||
return 0;
|
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
|
CORE_ADDR
|
||||||
saved_pc_after_call (frame)
|
saved_pc_after_call (frame)
|
||||||
FRAME frame;
|
FRAME frame;
|
||||||
@ -362,7 +383,7 @@ frame_saved_pc (frame)
|
|||||||
{
|
{
|
||||||
CORE_ADDR pc = get_frame_pc (frame);
|
CORE_ADDR pc = get_frame_pc (frame);
|
||||||
|
|
||||||
if (frameless_look_for_prologue (frame))
|
if (frameless_function_invocation (frame))
|
||||||
{
|
{
|
||||||
int ret_regnum;
|
int ret_regnum;
|
||||||
|
|
||||||
@ -401,7 +422,7 @@ init_extra_frame_info (fromleaf, frame)
|
|||||||
else
|
else
|
||||||
frame->frame = read_register (SP_REGNUM) - framesize;
|
frame->frame = read_register (SP_REGNUM) - framesize;
|
||||||
|
|
||||||
if (!frameless_look_for_prologue (frame)) /* Frameless? */
|
if (!frameless_function_invocation (frame)) /* Frameless? */
|
||||||
return; /* No, quit now */
|
return; /* No, quit now */
|
||||||
|
|
||||||
/* For frameless functions, we need to look at the caller's frame */
|
/* For frameless functions, we need to look at the caller's frame */
|
||||||
|
Reference in New Issue
Block a user