aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/config/i386/tm-i386.h21
-rw-r--r--gdb/i386-tdep.c20
3 files changed, 36 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3caff33..790118a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2000-06-12 Mark Kettenis <kettenis@gnu.org>
+
+ * 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.
+
2000-06-12 Kevin Buettner <kevinb@redhat.com>
* procfs.c, remote.c: Eliminate use of PARAMS from these files.
diff --git a/gdb/config/i386/tm-i386.h b/gdb/config/i386/tm-i386.h
index 918d62a..3507d82 100644
--- a/gdb/config/i386/tm-i386.h
+++ b/gdb/config/i386/tm-i386.h
@@ -21,9 +21,10 @@
#ifndef TM_I386_H
#define TM_I386_H 1
-/* Forward decl's for prototypes */
+/* Forward declarations for prototypes. */
struct frame_info;
struct frame_saved_regs;
+struct value;
struct type;
#define TARGET_BYTE_ORDER LITTLE_ENDIAN
@@ -408,19 +409,13 @@ extern void i386_pop_frame (void);
/* Insert the specified number of args and function address
into a call sequence of the above form stored at DUMMYNAME. */
-#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, 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 *)(dummyname) + 1) = (delta & 0xff); \
- *((char *)(dummyname) + 2) = ((delta >> 8) & 0xff); \
- *((char *)(dummyname) + 3) = ((delta >> 16) & 0xff); \
- *((char *)(dummyname) + 4) = ((delta >> 24) & 0xff); \
-}
+#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
+ i386_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
+extern void i386_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun,
+ int nargs, struct value **args,
+ struct type *type, int gcc_p);
+/* FIXME: kettenis/2000-06-12: These do not belong here. */
extern void print_387_control_word (unsigned int);
extern void print_387_status_word (unsigned int);
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 ()
{