From a7769679c2a5a2964860c20235de86dd5c5a0383 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 12 Jun 2000 01:44:35 +0000 Subject: * config/i386/tm-i386.h: Add forward declaration of `struct value'. (FIX_CALL_DUMMY): Redefined to call i386_fix_call_dummy. (i386_fix_call_dummy): Add prototype. * i386-tdep.c (i386_fix_call_dummy): New function based on the code from the old FIX_CALL_DUMMY macro. --- gdb/i386-tdep.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'gdb/i386-tdep.c') diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 4eddde5..728d012 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -638,6 +638,26 @@ i386_push_dummy_frame () write_register (SP_REGNUM, sp); } +/* Insert the (relative) function address into the call sequence + stored at DYMMY. */ + +void +i386_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, + value_ptr *args, struct type *type, int gcc_p) +{ + int from, to, delta, loc; + + loc = (int)(read_register (SP_REGNUM) - CALL_DUMMY_LENGTH); + from = loc + 5; + to = (int)(fun); + delta = to - from; + + *((char *)(dummy) + 1) = (delta & 0xff); + *((char *)(dummy) + 2) = ((delta >> 8) & 0xff); + *((char *)(dummy) + 3) = ((delta >> 16) & 0xff); + *((char *)(dummy) + 4) = ((delta >> 24) & 0xff); +} + void i386_pop_frame () { -- cgit v1.1