Move code duplicated in almost every single m68k based machine to the
authorFred Fish <fnf@specifix.com>
Thu, 24 Oct 1991 10:21:41 +0000 (10:21 +0000)
committerFred Fish <fnf@specifix.com>
Thu, 24 Oct 1991 10:21:41 +0000 (10:21 +0000)
common target file tm-68k.h.  Duplications still need to be removed (FIXME).

gdb/ChangeLog
gdb/tm-68k.h

index 33359681b70b942a9aaf34a2815365e9e1f62431..4a655f9ca745504645c6fbfcf43693781bbdab73 100644 (file)
@@ -1,5 +1,10 @@
 Thu Oct 24 01:32:51 1991  Fred Fish  (fnf at cygnus.com)
 
+       * tm-68k.h: Move code that is duplicated in almost every single
+       m68k based machine's configuration files to this common file.
+       Duplications in the configuration files still need to be removed
+       (FIXME).
+
        * infrun.c (child_create_inferior): System V versions must call
        setpgrp() with no arguments, to comply with prototyping typically
        in <unistd.h>.
index 3839c4ebf14603dfd73c9eb3ec35c151925f1762..2a5893c89a4f6b44753dcae5d1fa839261ae7487 100644 (file)
@@ -73,7 +73,7 @@ read_memory_integer (read_register (SP_REGNUM), 4)
 #endif
 
 /* If your kernel resets the pc after the trap happens you may need to
-   define this in m-68k.h.  */
+   define this before including this file.  */
 
 #if !defined (DECR_PC_AFTER_BREAK)
 #define DECR_PC_AFTER_BREAK 2
@@ -468,6 +468,57 @@ extern struct ext_format ext_format_68881;
 #endif /* no 68881.  */
 #endif /* no FIND_FRAME_SAVED_REGS.  */
 
+\f
+/* Things needed for making the inferior call functions.
+   It seems like every m68k based machine has almost identical definitions
+   in the individual machine's configuration files.  Most other cpu types
+   (mips, i386, etc) have routines in their *-tdep.c files to handle this
+   for most configurations.  The m68k family should be able to do this as
+   well.  These macros can still be overridden when necessary.  */
+
+/* The CALL_DUMMY macro is the sequence of instructions
+     fmovem 0xff,-(sp)
+     moveml 0xfffc,-(sp)
+     clrw -(sp)
+     movew ccr,-(sp)
+     /..* The arguments are pushed at this point by GDB;
+       no code is needed in the dummy for this.
+       The CALL_DUMMY_START_OFFSET gives the position of 
+       the following jsr instruction.  *../
+     jsr @#32323232
+     addl #69696969,sp
+     bpt
+     nop
+Note this is 28 bytes.
+We actually start executing at the jsr, since the pushing of the
+registers is done by PUSH_DUMMY_FRAME.  If this were real code,
+the arguments for the function called by the jsr would be pushed
+between the moveml and the jsr, and we could allow it to execute through.
+But the arguments have to be pushed by GDB after the PUSH_DUMMY_FRAME is done,
+and we cannot allow the moveml to push the registers again lest they be
+taken for the arguments.  */
+
+#define CALL_DUMMY {0xf227e0ff, 0x48e7fffc, 0x426742e7, 0x4eb93232, 0x3232dffc, 0x69696969, 0x4e414e71}
+
+#define CALL_DUMMY_LENGTH 28
+
+#define CALL_DUMMY_START_OFFSET 12
+
+/* 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 *)((char *) dummyname + 20) = nargs * 4;  \
+  *(int *)((char *) dummyname + 14) = fun; }
+
+/* Push an empty stack frame, to record the current PC, etc.  */
+
+#define PUSH_DUMMY_FRAME       { m68k_push_dummy_frame (); }
+
+/* Discard from the stack the innermost frame, restoring all registers.  */
+
+#define POP_FRAME { m68k_pop_frame (); }
+
 /* Note that stuff for calling inferior functions is not in this file
    because the call dummy is different for different breakpoint
    instructions, which are different on different systems.  Perhaps