mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 05:12:33 +08:00
2004-08-01 Andrew Cagney <cagney@gnu.org>
* infcall.c (call_function_by_hand): Do not use DEPRECATED_PUSH_RETURN_ADDRESS, DEPRECATED_DUMMY_WRITE_SP, DEPRECATED_SAVE_DUMMY_FRAME_TOS, DEPRECATED_TARGET_READ_FP, DEPRECATED_FP_REGNUM, DEPRECATED_STORE_STRUCT_RETURN, and DEPRECATED_STACK_ALIGN.
This commit is contained in:
101
gdb/infcall.c
101
gdb/infcall.c
@ -585,14 +585,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
|
||||
arg_type = check_typedef (VALUE_ENCLOSING_TYPE (args[i]));
|
||||
len = TYPE_LENGTH (arg_type);
|
||||
|
||||
if (DEPRECATED_STACK_ALIGN_P ())
|
||||
/* MVS 11/22/96: I think at least some of this
|
||||
stack_align code is really broken. Better to let
|
||||
PUSH_ARGUMENTS adjust the stack in a target-defined
|
||||
manner. */
|
||||
aligned_len = DEPRECATED_STACK_ALIGN (len);
|
||||
else
|
||||
aligned_len = len;
|
||||
aligned_len = len;
|
||||
if (INNER_THAN (1, 2))
|
||||
{
|
||||
/* stack grows downward */
|
||||
@ -628,10 +621,6 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
|
||||
if (struct_return)
|
||||
{
|
||||
int len = TYPE_LENGTH (value_type);
|
||||
if (DEPRECATED_STACK_ALIGN_P ())
|
||||
/* NOTE: cagney/2003-03-22: Should rely on frame align, rather
|
||||
than stack align to force the alignment of the stack. */
|
||||
len = DEPRECATED_STACK_ALIGN (len);
|
||||
if (INNER_THAN (1, 2))
|
||||
{
|
||||
/* Stack grows downward. Align STRUCT_ADDR and SP after
|
||||
@ -671,64 +660,10 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
|
||||
else
|
||||
error ("This target does not support function calls");
|
||||
|
||||
if (DEPRECATED_PUSH_RETURN_ADDRESS_P ())
|
||||
/* for targets that use no CALL_DUMMY */
|
||||
/* There are a number of targets now which actually don't write
|
||||
any CALL_DUMMY instructions into the target, but instead just
|
||||
save the machine state, push the arguments, and jump directly
|
||||
to the callee function. Since this doesn't actually involve
|
||||
executing a JSR/BSR instruction, the return address must be set
|
||||
up by hand, either by pushing onto the stack or copying into a
|
||||
return-address register as appropriate. Formerly this has been
|
||||
done in PUSH_ARGUMENTS, but that's overloading its
|
||||
functionality a bit, so I'm making it explicit to do it here. */
|
||||
/* NOTE: cagney/2003-04-22: The first parameter ("real_pc") has
|
||||
been replaced with zero, it turns out that no implementation
|
||||
used that parameter. This occured because the value being
|
||||
supplied - the address of the called function's entry point
|
||||
instead of the address of the breakpoint that the called
|
||||
function should return to - wasn't useful. */
|
||||
sp = DEPRECATED_PUSH_RETURN_ADDRESS (0, sp);
|
||||
|
||||
/* NOTE: cagney/2003-03-23: Diable this code when there is a
|
||||
push_dummy_call() method. Since that method will have already
|
||||
handled any alignment issues, the code below is entirely
|
||||
redundant. */
|
||||
if (!gdbarch_push_dummy_call_p (current_gdbarch)
|
||||
&& DEPRECATED_STACK_ALIGN_P () && !INNER_THAN (1, 2))
|
||||
{
|
||||
/* If stack grows up, we must leave a hole at the bottom, note
|
||||
that sp already has been advanced for the arguments! */
|
||||
sp = DEPRECATED_STACK_ALIGN (sp);
|
||||
}
|
||||
|
||||
/* Store the address at which the structure is supposed to be
|
||||
written. */
|
||||
/* NOTE: 2003-03-24: Since PUSH_ARGUMENTS can (and typically does)
|
||||
store the struct return address, this call is entirely redundant. */
|
||||
if (struct_return && DEPRECATED_STORE_STRUCT_RETURN_P ())
|
||||
DEPRECATED_STORE_STRUCT_RETURN (struct_addr, sp);
|
||||
|
||||
/* Write the stack pointer. This is here because the statements
|
||||
above might fool with it. On SPARC, this write also stores the
|
||||
register window into the right place in the new stack frame,
|
||||
which otherwise wouldn't happen (see store_inferior_registers in
|
||||
sparc-nat.c). */
|
||||
/* NOTE: cagney/2003-03-23: Since the architecture method
|
||||
push_dummy_call() should have already stored the stack pointer
|
||||
(as part of creating the fake call frame), and none of the code
|
||||
following that call adjusts the stack-pointer value, the below
|
||||
call is entirely redundant. */
|
||||
if (DEPRECATED_DUMMY_WRITE_SP_P ())
|
||||
DEPRECATED_DUMMY_WRITE_SP (sp);
|
||||
|
||||
if (DEPRECATED_SAVE_DUMMY_FRAME_TOS_P ())
|
||||
DEPRECATED_SAVE_DUMMY_FRAME_TOS (sp);
|
||||
else
|
||||
/* Sanity. The exact same SP value is returned by
|
||||
PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by
|
||||
unwind_dummy_id to form the frame ID's stack address. */
|
||||
generic_save_dummy_frame_tos (sp);
|
||||
/* Sanity. The exact same SP value is returned by PUSH_DUMMY_CALL,
|
||||
saved as the dummy-frame TOS, and used by unwind_dummy_id to form
|
||||
the frame ID's stack address. */
|
||||
generic_save_dummy_frame_tos (sp);
|
||||
|
||||
/* Now proceed, having reached the desired place. */
|
||||
clear_proceed_status ();
|
||||
@ -747,28 +682,10 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
|
||||
set_momentary_breakpoint. We need to give the breakpoint a
|
||||
frame ID so that the breakpoint code can correctly re-identify
|
||||
the dummy breakpoint. */
|
||||
if (gdbarch_unwind_dummy_id_p (current_gdbarch))
|
||||
{
|
||||
/* Sanity. The exact same SP value is returned by
|
||||
PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by
|
||||
unwind_dummy_id to form the frame ID's stack address. */
|
||||
frame = frame_id_build (sp, sal.pc);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The assumption here is that push_dummy_call() returned the
|
||||
stack part of the frame ID. Unfortunately, many older
|
||||
architectures were, via a convoluted mess, relying on the
|
||||
poorly defined and greatly overloaded
|
||||
DEPRECATED_TARGET_READ_FP or DEPRECATED_FP_REGNUM to supply
|
||||
the value. */
|
||||
if (DEPRECATED_TARGET_READ_FP_P ())
|
||||
frame = frame_id_build (DEPRECATED_TARGET_READ_FP (), sal.pc);
|
||||
else if (DEPRECATED_FP_REGNUM >= 0)
|
||||
frame = frame_id_build (read_register (DEPRECATED_FP_REGNUM), sal.pc);
|
||||
else
|
||||
frame = frame_id_build (sp, sal.pc);
|
||||
}
|
||||
/* Sanity. The exact same SP value is returned by
|
||||
PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by
|
||||
unwind_dummy_id to form the frame ID's stack address. */
|
||||
frame = frame_id_build (sp, sal.pc);
|
||||
bpt = set_momentary_breakpoint (sal, frame, bp_call_dummy);
|
||||
bpt->disposition = disp_del;
|
||||
}
|
||||
|
Reference in New Issue
Block a user