Move code duplicated in almost every single m68k based machine to the
common target file tm-68k.h. Duplications still need to be removed (FIXME).
This commit is contained in:
parent
150f543625
commit
dcd15e5e7a
2 changed files with 57 additions and 1 deletions
|
@ -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>.
|
||||
|
|
53
gdb/tm-68k.h
53
gdb/tm-68k.h
|
@ -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. */
|
||||
|
||||
|
||||
/* 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
|
||||
|
|
Loading…
Reference in a new issue