aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcall.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2004-02-23 16:27:40 +0000
committerAndrew Cagney <cagney@redhat.com>2004-02-23 16:27:40 +0000
commitda6bab63686f2c2c2726a51b3bb9fec66eb82e0b (patch)
tree0758fb1fcfc6733c59122ff11dbc16a16159f16a /gdb/infcall.c
parent1e1b3428933fa5258434a47f58004320a47a4a62 (diff)
downloadgdb-da6bab63686f2c2c2726a51b3bb9fec66eb82e0b.zip
gdb-da6bab63686f2c2c2726a51b3bb9fec66eb82e0b.tar.gz
gdb-da6bab63686f2c2c2726a51b3bb9fec66eb82e0b.tar.bz2
2004-02-23 Andrew Cagney <cagney@redhat.com>
* infcall.c (legacy_push_dummy_code): Don't call deprecated FIX_CALL_DUMMY when push_dummy_call is available. (call_function_by_hand, push_dummy_code): Ditto.
Diffstat (limited to 'gdb/infcall.c')
-rw-r--r--gdb/infcall.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 860d9cf..11ce018 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -275,18 +275,21 @@ legacy_push_dummy_code (struct gdbarch *gdbarch,
DUMMY_ADDR is pretty messed up. It comes from constant tinkering
with the values. Instead a DEPRECATED_FIX_CALL_DUMMY replacement
(PUSH_DUMMY_BREAKPOINT?) should just do everything. */
+ if (!gdbarch_push_dummy_call_p (current_gdbarch))
+ {
#ifdef GDB_TARGET_IS_HPPA
- (*real_pc) = DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs,
- args, value_type, using_gcc);
+ (*real_pc) = DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs,
+ args, value_type, using_gcc);
#else
- if (DEPRECATED_FIX_CALL_DUMMY_P ())
- {
- /* gdb_assert (CALL_DUMMY_LOCATION == ON_STACK) true? */
- DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
- value_type, using_gcc);
- }
- (*real_pc) = start_sp;
+ if (DEPRECATED_FIX_CALL_DUMMY_P ())
+ {
+ /* gdb_assert (CALL_DUMMY_LOCATION == ON_STACK) true? */
+ DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
+ value_type, using_gcc);
+ }
+ (*real_pc) = start_sp;
#endif
+ }
/* Yes, the offset is applied to the real_pc and not the dummy addr.
Ulgh! Blame the HP/UX target. */
(*bp_addr) = (*real_pc) + DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET;
@@ -348,7 +351,8 @@ push_dummy_code (struct gdbarch *gdbarch,
if (gdbarch_push_dummy_code_p (gdbarch))
return gdbarch_push_dummy_code (gdbarch, sp, funaddr, using_gcc,
args, nargs, value_type, real_pc, bp_addr);
- else if (DEPRECATED_FIX_CALL_DUMMY_P ())
+ else if (DEPRECATED_FIX_CALL_DUMMY_P ()
+ && !gdbarch_push_dummy_call_p (gdbarch))
return legacy_push_dummy_code (gdbarch, sp, funaddr, using_gcc,
args, nargs, value_type, real_pc, bp_addr);
else
@@ -546,7 +550,8 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
}
break;
case AT_ENTRY_POINT:
- if (DEPRECATED_FIX_CALL_DUMMY_P ())
+ if (DEPRECATED_FIX_CALL_DUMMY_P ()
+ && !gdbarch_push_dummy_call_p (current_gdbarch))
{
/* Sigh. Some targets use DEPRECATED_FIX_CALL_DUMMY to
shove extra stuff onto the stack or into registers. That