Remove local BSD/USG hacks that are now in libiberty.
[deliverable/binutils-gdb.git] / gdb / tm-68k.h
CommitLineData
dd3b648e
RP
1/* Parameters for execution on a 68000 series machine.
2 Copyright (C) 1986, 1987, 1989, 1990 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
99a7de40 6This program is free software; you can redistribute it and/or modify
dd3b648e 7it under the terms of the GNU General Public License as published by
99a7de40
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
dd3b648e 10
99a7de40 11This program is distributed in the hope that it will be useful,
dd3b648e
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
99a7de40
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
dd3b648e
RP
19
20/* Generic 68000 stuff, to be included by other m-*.h files.
21 Define HAVE_68881 if that is the case. */
22
23#if defined (HAVE_68881)
24#define IEEE_FLOAT 1
25#endif
26
27/* Define the bit, byte, and word ordering of the machine. */
28#define TARGET_BYTE_ORDER BIG_ENDIAN
29
30/* Offset from address of function to start of its code.
31 Zero on most machines. */
32
33#define FUNCTION_START_OFFSET 0
34
35/* Advance PC across any function entry prologue instructions
36 to reach some "real" code. */
37
38#define SKIP_PROLOGUE(pc) \
39{ register int op = read_memory_integer (pc, 2); \
40 if (op == 0047126) \
41 pc += 4; /* Skip link #word */ \
42 else if (op == 0044016) \
43 pc += 6; /* Skip link #long */ \
44 /* Not sure why branches are here. */ \
45 /* From m-isi.h, m-altos.h */ \
46 else if (op == 0060000) \
47 pc += 4; /* Skip bra #word */ \
48 else if (op == 00600377) \
49 pc += 6; /* skip bra #long */ \
50 else if ((op & 0177400) == 0060000) \
51 pc += 2; /* skip bra #char */ \
52}
53
54/* Immediately after a function call, return the saved pc.
55 Can't always go through the frames for this because on some machines
56 the new frame is not set up until the new function executes
57 some instructions. */
58
59#define SAVED_PC_AFTER_CALL(frame) \
60read_memory_integer (read_register (SP_REGNUM), 4)
61
62/* Stack grows downward. */
63
64#define INNER_THAN <
65
66/* Sequence of bytes for breakpoint instruction.
67 This is a TRAP instruction. The last 4 bits (0xf below) is the
68 vector. Systems which don't use 0xf should define BREAKPOINT
69 themselves before including this file. */
70
71#if !defined (BREAKPOINT)
72#define BREAKPOINT {0x4e, 0x4f}
73#endif
74
75/* If your kernel resets the pc after the trap happens you may need to
dcd15e5e 76 define this before including this file. */
dd3b648e
RP
77
78#if !defined (DECR_PC_AFTER_BREAK)
79#define DECR_PC_AFTER_BREAK 2
80#endif
81
82/* Nonzero if instruction at PC is a return instruction. */
83/* Allow any of the return instructions, including a trapv and a return
84 from interupt. */
85
86#define ABOUT_TO_RETURN(pc) ((read_memory_integer (pc, 2) & ~0x3) == 0x4e74)
87
88/* Return 1 if P points to an invalid floating point value. */
89
90#define INVALID_FLOAT(p, len) 0 /* Just a first guess; not checked */
91
92/* Say how long registers are. */
93
94#define REGISTER_TYPE long
95
96#if defined (HAVE_68881)
39d2bcca 97# if defined (GDB_TARGET_IS_SUN3)
dd3b648e
RP
98 /* Sun3 status includes fpflags, which shows whether the FPU has been used
99 by the process, and whether the FPU was done with an instruction or
100 was interrupted in the middle of a long instruction. See
101 <machine/reg.h>. */
102 /* a&d, pc,sr, fp, fpstat, fpflags */
103# define NUM_REGS 31
104# define REGISTER_BYTES (16*4 + 8 + 8*12 + 3*4 + 4)
105# else /* Not sun3. */
106# define NUM_REGS 29
107# define REGISTER_BYTES (16*4 + 8 + 8*12 + 3*4)
108# endif /* Not sun3. */
109#else /* No 68881. */
110# define NUM_REGS 18
111# define REGISTER_BYTES (16*4 + 8)
112#endif /* No 68881. */
113
114/* Index within `registers' of the first byte of the space for
115 register N. */
116
117#if defined (HAVE_68881)
118#define REGISTER_BYTE(N) \
119 ((N) >= FPC_REGNUM ? (((N) - FPC_REGNUM) * 4) + 168 \
120 : (N) >= FP0_REGNUM ? (((N) - FP0_REGNUM) * 12) + 72 \
121 : (N) * 4)
122
123/* Number of bytes of storage in the actual machine representation
124 for register N. On the 68000, all regs are 4 bytes
125 except the floating point regs which are 12 bytes. */
126/* Note that the unsigned cast here forces the result of the
127 subtraction to very high positive values if N < FP0_REGNUM */
128
129#define REGISTER_RAW_SIZE(N) (((unsigned)(N) - FP0_REGNUM) < 8 ? 12 : 4)
130
131/* Number of bytes of storage in the program's representation
132 for register N. On the 68000, all regs are 4 bytes
133 except the floating point regs which are 8-byte doubles. */
134
135#define REGISTER_VIRTUAL_SIZE(N) (((unsigned)(N) - FP0_REGNUM) < 8 ? 8 : 4)
136
137/* Largest value REGISTER_RAW_SIZE can have. */
138
139#define MAX_REGISTER_RAW_SIZE 12
140
141/* Largest value REGISTER_VIRTUAL_SIZE can have. */
142
143#define MAX_REGISTER_VIRTUAL_SIZE 8
144
145/* Nonzero if register N requires conversion
146 from raw format to virtual format. */
147
148#define REGISTER_CONVERTIBLE(N) (((unsigned)(N) - FP0_REGNUM) < 8)
149
de6060de
JK
150/* Put the declaration out here because if it's in the macros, PCC
151 will complain. */
9fa28378 152extern struct ext_format ext_format_68881;
de6060de 153
dd3b648e
RP
154/* Convert data from raw format for register REGNUM
155 to virtual format for register REGNUM. */
156
157#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) \
158{ \
dd3b648e 159 if ((REGNUM) >= FP0_REGNUM && (REGNUM) < FPC_REGNUM) \
9fa28378 160 ieee_extended_to_double (&ext_format_68881, (FROM), (double *)(TO)); \
dd3b648e
RP
161 else \
162 bcopy ((FROM), (TO), 4); \
163}
164
165/* Convert data from virtual format for register REGNUM
166 to raw format for register REGNUM. */
167
168#define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO) \
169{ \
dd3b648e 170 if ((REGNUM) >= FP0_REGNUM && (REGNUM) < FPC_REGNUM) \
9fa28378 171 double_to_ieee_extended (&ext_format_68881, (double *)(FROM), (TO)); \
dd3b648e
RP
172 else \
173 bcopy ((FROM), (TO), 4); \
174}
175
176/* Return the GDB type object for the "standard" data type
177 of data in register N. */
178/* Note, for registers which contain addresses return
179 pointer to void, not pointer to char, because we don't
180 want to attempt to print the string after printing the address. */
181#define REGISTER_VIRTUAL_TYPE(N) \
182 (((unsigned)(N) - FP0_REGNUM) < 8 ? builtin_type_double : \
183 (N) == PC_REGNUM || (N) == FP_REGNUM || (N) == SP_REGNUM ? \
184 lookup_pointer_type (builtin_type_void) : builtin_type_int)
185
186#else /* no 68881. */
187/* Index within `registers' of the first byte of the space for
188 register N. */
189
190#define REGISTER_BYTE(N) ((N) * 4)
191
192/* Number of bytes of storage in the actual machine representation
193 for register N. On the 68000, all regs are 4 bytes. */
194
195#define REGISTER_RAW_SIZE(N) 4
196
197/* Number of bytes of storage in the program's representation
198 for register N. On the 68000, all regs are 4 bytes. */
199
200#define REGISTER_VIRTUAL_SIZE(N) 4
201
202/* Largest value REGISTER_RAW_SIZE can have. */
203
204#define MAX_REGISTER_RAW_SIZE 4
205
206/* Largest value REGISTER_VIRTUAL_SIZE can have. */
207
208#define MAX_REGISTER_VIRTUAL_SIZE 4
209
210/* Nonzero if register N requires conversion
211 from raw format to virtual format. */
212
213#define REGISTER_CONVERTIBLE(N) 0
214
215/* Convert data from raw format for register REGNUM
216 to virtual format for register REGNUM. */
217
218#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) bcopy ((FROM), (TO), 4);
219
220/* Convert data from virtual format for register REGNUM
221 to raw format for register REGNUM. */
222
223#define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO) bcopy ((FROM), (TO), 4);
224
225/* Return the GDB type object for the "standard" data type
226 of data in register N. */
227
228#define REGISTER_VIRTUAL_TYPE(N) builtin_type_int
229
230#endif /* No 68881. */
231
232/* Initializer for an array of names of registers.
233 Entries beyond the first NUM_REGS are ignored. */
234
235#define REGISTER_NAMES \
236 {"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", \
237 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp", \
238 "ps", "pc", \
239 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7", \
240 "fpcontrol", "fpstatus", "fpiaddr", "fpcode", "fpflags" }
241
242/* Register numbers of various important registers.
243 Note that some of these values are "real" register numbers,
244 and correspond to the general registers of the machine,
245 and some are "phony" register numbers which are too large
246 to be actual register numbers as far as the user is concerned
247 but do serve to get the desired values when passed to read_register. */
248
249#define A1_REGNUM 9
250#define FP_REGNUM 14 /* Contains address of executing stack frame */
251#define SP_REGNUM 15 /* Contains address of top of stack */
252#define PS_REGNUM 16 /* Contains processor status */
253#define PC_REGNUM 17 /* Contains program counter */
254#if defined (HAVE_68881)
255#define FP0_REGNUM 18 /* Floating point register 0 */
256#define FPC_REGNUM 26 /* 68881 control register */
257#define FPS_REGNUM 27 /* 68881 status register */
afe4ca15 258#define FPI_REGNUM 28 /* 68881 iaddr register */
dd3b648e
RP
259#endif /* 68881. */
260
261/* Store the address of the place in which to copy the structure the
262 subroutine will return. This is called from call_function. */
263
264#define STORE_STRUCT_RETURN(ADDR, SP) \
265 { write_register (A1_REGNUM, (ADDR)); }
266
267/* Extract from an array REGBUF containing the (raw) register state
268 a function return value of type TYPE, and copy that, in virtual format,
269 into VALBUF. This is assuming that floating point values are returned
270 as doubles in d0/d1. */
271
272#if !defined (EXTRACT_RETURN_VALUE)
273#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
274 bcopy (REGBUF, VALBUF, TYPE_LENGTH (TYPE))
275#endif
276
277/* Write into appropriate registers a function return value
278 of type TYPE, given in virtual format. Assumes floats are passed
279 in d0/d1. */
280
281#if !defined (STORE_RETURN_VALUE)
282#define STORE_RETURN_VALUE(TYPE,VALBUF) \
283 write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE))
284#endif
285
286/* Extract from an array REGBUF containing the (raw) register state
287 the address in which a function should return its structure value,
288 as a CORE_ADDR (or an expression that can be used as one). */
289
e1ce8aa5 290#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(CORE_ADDR *)(REGBUF))
dd3b648e
RP
291\f
292/* Describe the pointer in each stack frame to the previous stack frame
293 (its caller). */
294
295/* FRAME_CHAIN takes a frame's nominal address
296 and produces the frame's chain-pointer.
297
298 FRAME_CHAIN_COMBINE takes the chain pointer and the frame's nominal address
299 and produces the nominal address of the caller frame.
300
301 However, if FRAME_CHAIN_VALID returns zero,
302 it means the given frame is the outermost one and has no caller.
303 In that case, FRAME_CHAIN_COMBINE is not used. */
304
305/* In the case of the 68000, the frame's nominal address
306 is the address of a 4-byte word containing the calling frame's address. */
307
308#define FRAME_CHAIN(thisframe) \
309 (outside_startup_file ((thisframe)->pc) ? \
310 read_memory_integer ((thisframe)->frame, 4) :\
311 0)
312
313#define FRAME_CHAIN_VALID(chain, thisframe) \
314 (chain != 0 && outside_startup_file (FRAME_SAVED_PC (thisframe)))
315
316#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
317
318/* Define other aspects of the stack frame. */
319
320/* A macro that tells us whether the function invocation represented
321 by FI does not have a frame on the stack associated with it. If it
322 does not, FRAMELESS is set to 1, else 0. */
323#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
324 (FRAMELESS) = frameless_look_for_prologue(FI)
325
326#define FRAME_SAVED_PC(FRAME) (read_memory_integer ((FRAME)->frame + 4, 4))
327
328#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
329
330#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
331
332/* Set VAL to the number of args passed to frame described by FI.
333 Can set VAL to -1, meaning no way to tell. */
334
335/* We can't tell how many args there are
336 now that the C compiler delays popping them. */
337#if !defined (FRAME_NUM_ARGS)
338#define FRAME_NUM_ARGS(val,fi) (val = -1)
339#endif
340
341/* Return number of bytes at start of arglist that are not really args. */
342
343#define FRAME_ARGS_SKIP 8
344
345/* Put here the code to store, into a struct frame_saved_regs,
346 the addresses of the saved registers of frame described by FRAME_INFO.
347 This includes special registers such as pc and fp saved in special
348 ways in the stack frame. sp is even more special:
349 the address we return for it IS the sp for the next frame. */
350
351#if !defined (FRAME_FIND_SAVED_REGS)
352#if defined (HAVE_68881)
353#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
354{ register int regnum; \
355 register int regmask; \
356 register CORE_ADDR next_addr; \
357 register CORE_ADDR pc; \
358 int nextinsn; \
359 bzero (&frame_saved_regs, sizeof frame_saved_regs); \
360 if ((frame_info)->pc >= (frame_info)->frame - CALL_DUMMY_LENGTH - FP_REGNUM*4 - 8*12 - 4 \
361 && (frame_info)->pc <= (frame_info)->frame) \
362 { next_addr = (frame_info)->frame; \
363 pc = (frame_info)->frame - CALL_DUMMY_LENGTH - FP_REGNUM * 4 - 8*12 - 4; }\
364 else \
365 { pc = get_pc_function_start ((frame_info)->pc); \
366 /* Verify we have a link a6 instruction next; \
367 if not we lose. If we win, find the address above the saved \
368 regs using the amount of storage from the link instruction. */\
369 if (044016 == read_memory_integer (pc, 2)) \
370 next_addr = (frame_info)->frame + read_memory_integer (pc += 2, 4), pc+=4; \
371 else if (047126 == read_memory_integer (pc, 2)) \
372 next_addr = (frame_info)->frame + read_memory_integer (pc += 2, 2), pc+=2; \
373 else goto lose; \
374 /* If have an addal #-n, sp next, adjust next_addr. */ \
375 if ((0177777 & read_memory_integer (pc, 2)) == 0157774) \
376 next_addr += read_memory_integer (pc += 2, 4), pc += 4; \
377 } \
378 /* next should be a moveml to (sp) or -(sp) or a movl r,-(sp) */ \
379 regmask = read_memory_integer (pc + 2, 2); \
380 /* But before that can come an fmovem. Check for it. */ \
381 nextinsn = 0xffff & read_memory_integer (pc, 2); \
382 if (0xf227 == nextinsn \
383 && (regmask & 0xff00) == 0xe000) \
384 { pc += 4; /* Regmask's low bit is for register fp7, the first pushed */ \
385 for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--, regmask >>= 1) \
386 if (regmask & 1) \
387 (frame_saved_regs).regs[regnum] = (next_addr -= 12); \
388 regmask = read_memory_integer (pc + 2, 2); } \
389 if (0044327 == read_memory_integer (pc, 2)) \
390 { pc += 4; /* Regmask's low bit is for register 0, the first written */ \
391 for (regnum = 0; regnum < 16; regnum++, regmask >>= 1) \
392 if (regmask & 1) \
393 (frame_saved_regs).regs[regnum] = (next_addr += 4) - 4; } \
394 else if (0044347 == read_memory_integer (pc, 2)) \
395 { pc += 4; /* Regmask's low bit is for register 15, the first pushed */ \
396 for (regnum = 15; regnum >= 0; regnum--, regmask >>= 1) \
397 if (regmask & 1) \
398 (frame_saved_regs).regs[regnum] = (next_addr -= 4); } \
399 else if (0x2f00 == (0xfff0 & read_memory_integer (pc, 2))) \
400 { regnum = 0xf & read_memory_integer (pc, 2); pc += 2; \
401 (frame_saved_regs).regs[regnum] = (next_addr -= 4); } \
402 /* fmovemx to index of sp may follow. */ \
403 regmask = read_memory_integer (pc + 2, 2); \
404 nextinsn = 0xffff & read_memory_integer (pc, 2); \
405 if (0xf236 == nextinsn \
406 && (regmask & 0xff00) == 0xf000) \
407 { pc += 10; /* Regmask's low bit is for register fp0, the first written */ \
408 for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--, regmask >>= 1) \
409 if (regmask & 1) \
410 (frame_saved_regs).regs[regnum] = (next_addr += 12) - 12; \
411 regmask = read_memory_integer (pc + 2, 2); } \
412 /* clrw -(sp); movw ccr,-(sp) may follow. */ \
413 if (0x426742e7 == read_memory_integer (pc, 4)) \
414 (frame_saved_regs).regs[PS_REGNUM] = (next_addr -= 4); \
415 lose: ; \
416 (frame_saved_regs).regs[SP_REGNUM] = (frame_info)->frame + 8; \
417 (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame; \
418 (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 4; \
419}
420#else /* no 68881. */
421#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
422{ register int regnum; \
423 register int regmask; \
424 register CORE_ADDR next_addr; \
425 register CORE_ADDR pc; \
426 bzero (&frame_saved_regs, sizeof frame_saved_regs); \
427 if ((frame_info)->pc >= (frame_info)->frame - CALL_DUMMY_LENGTH - FP_REGNUM*4 - 4 \
428 && (frame_info)->pc <= (frame_info)->frame) \
429 { next_addr = (frame_info)->frame; \
430 pc = (frame_info)->frame - CALL_DUMMY_LENGTH - FP_REGNUM * 4 - 4; }\
431 else \
432 { pc = get_pc_function_start ((frame_info)->pc); \
433 /* Verify we have a link a6 instruction next; \
434 if not we lose. If we win, find the address above the saved \
435 regs using the amount of storage from the link instruction. */\
436 if (044016 == read_memory_integer (pc, 2)) \
437 next_addr = (frame_info)->frame + read_memory_integer (pc += 2, 4), pc+=4; \
438 else if (047126 == read_memory_integer (pc, 2)) \
439 next_addr = (frame_info)->frame + read_memory_integer (pc += 2, 2), pc+=2; \
440 else goto lose; \
441 /* If have an addal #-n, sp next, adjust next_addr. */ \
442 if ((0177777 & read_memory_integer (pc, 2)) == 0157774) \
443 next_addr += read_memory_integer (pc += 2, 4), pc += 4; \
444 } \
445 /* next should be a moveml to (sp) or -(sp) or a movl r,-(sp) */ \
446 regmask = read_memory_integer (pc + 2, 2); \
447 if (0044327 == read_memory_integer (pc, 2)) \
448 { pc += 4; /* Regmask's low bit is for register 0, the first written */ \
449 for (regnum = 0; regnum < 16; regnum++, regmask >>= 1) \
450 if (regmask & 1) \
451 (frame_saved_regs).regs[regnum] = (next_addr += 4) - 4; } \
452 else if (0044347 == read_memory_integer (pc, 2)) \
453 { pc += 4; /* Regmask's low bit is for register 15, the first pushed */ \
454 for (regnum = 15; regnum >= 0; regnum--, regmask >>= 1) \
455 if (regmask & 1) \
456 (frame_saved_regs).regs[regnum] = (next_addr -= 4); } \
457 else if (0x2f00 == 0xfff0 & read_memory_integer (pc, 2)) \
458 { regnum = 0xf & read_memory_integer (pc, 2); pc += 2; \
459 (frame_saved_regs).regs[regnum] = (next_addr -= 4); } \
460 /* clrw -(sp); movw ccr,-(sp) may follow. */ \
461 if (0x426742e7 == read_memory_integer (pc, 4)) \
462 (frame_saved_regs).regs[PS_REGNUM] = (next_addr -= 4); \
463 lose: ; \
464 (frame_saved_regs).regs[SP_REGNUM] = (frame_info)->frame + 8; \
465 (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame; \
466 (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 4; \
467}
468#endif /* no 68881. */
469#endif /* no FIND_FRAME_SAVED_REGS. */
470
dcd15e5e
FF
471\f
472/* Things needed for making the inferior call functions.
473 It seems like every m68k based machine has almost identical definitions
474 in the individual machine's configuration files. Most other cpu types
475 (mips, i386, etc) have routines in their *-tdep.c files to handle this
476 for most configurations. The m68k family should be able to do this as
477 well. These macros can still be overridden when necessary. */
478
479/* The CALL_DUMMY macro is the sequence of instructions
480 fmovem 0xff,-(sp)
481 moveml 0xfffc,-(sp)
482 clrw -(sp)
483 movew ccr,-(sp)
484 /..* The arguments are pushed at this point by GDB;
485 no code is needed in the dummy for this.
486 The CALL_DUMMY_START_OFFSET gives the position of
487 the following jsr instruction. *../
488 jsr @#32323232
489 addl #69696969,sp
490 bpt
491 nop
492Note this is 28 bytes.
493We actually start executing at the jsr, since the pushing of the
494registers is done by PUSH_DUMMY_FRAME. If this were real code,
495the arguments for the function called by the jsr would be pushed
496between the moveml and the jsr, and we could allow it to execute through.
497But the arguments have to be pushed by GDB after the PUSH_DUMMY_FRAME is done,
498and we cannot allow the moveml to push the registers again lest they be
499taken for the arguments. */
500
501#define CALL_DUMMY {0xf227e0ff, 0x48e7fffc, 0x426742e7, 0x4eb93232, 0x3232dffc, 0x69696969, 0x4e414e71}
502
503#define CALL_DUMMY_LENGTH 28
504
505#define CALL_DUMMY_START_OFFSET 12
506
507/* Insert the specified number of args and function address
508 into a call sequence of the above form stored at DUMMYNAME. */
509
510#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
511{ *(int *)((char *) dummyname + 20) = nargs * 4; \
512 *(int *)((char *) dummyname + 14) = fun; }
513
514/* Push an empty stack frame, to record the current PC, etc. */
515
516#define PUSH_DUMMY_FRAME { m68k_push_dummy_frame (); }
517
518/* Discard from the stack the innermost frame, restoring all registers. */
519
520#define POP_FRAME { m68k_pop_frame (); }
521
dd3b648e
RP
522/* Note that stuff for calling inferior functions is not in this file
523 because the call dummy is different for different breakpoint
524 instructions, which are different on different systems. Perhaps
525 they could be merged, but I haven't bothered. */
This page took 0.059303 seconds and 4 git commands to generate.