2706969dac5914d90b031cf048c0444ca6d8e686
[platform/upstream/binutils.git] / gdb / m68k-tdep.c
1 /* Target-dependent code for the Motorola 68000 series.
2
3    Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
4    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "dwarf2-frame.h"
24 #include "frame.h"
25 #include "frame-base.h"
26 #include "frame-unwind.h"
27 #include "gdbtypes.h"
28 #include "symtab.h"
29 #include "gdbcore.h"
30 #include "value.h"
31 #include "gdb_string.h"
32 #include "gdb_assert.h"
33 #include "inferior.h"
34 #include "regcache.h"
35 #include "arch-utils.h"
36 #include "osabi.h"
37 #include "dis-asm.h"
38 #include "target-descriptions.h"
39
40 #include "m68k-tdep.h"
41 \f
42
43 #define P_LINKL_FP      0x480e
44 #define P_LINKW_FP      0x4e56
45 #define P_PEA_FP        0x4856
46 #define P_MOVEAL_SP_FP  0x2c4f
47 #define P_ADDAW_SP      0xdefc
48 #define P_ADDAL_SP      0xdffc
49 #define P_SUBQW_SP      0x514f
50 #define P_SUBQL_SP      0x518f
51 #define P_LEA_SP_SP     0x4fef
52 #define P_LEA_PC_A5     0x4bfb0170
53 #define P_FMOVEMX_SP    0xf227
54 #define P_MOVEL_SP      0x2f00
55 #define P_MOVEML_SP     0x48e7
56
57 /* Offset from SP to first arg on stack at first instruction of a function.  */
58 #define SP_ARG0 (1 * 4)
59
60 #if !defined (BPT_VECTOR)
61 #define BPT_VECTOR 0xf
62 #endif
63
64 static const gdb_byte *
65 m68k_local_breakpoint_from_pc (struct gdbarch *gdbarch,
66                                CORE_ADDR *pcptr, int *lenptr)
67 {
68   static gdb_byte break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
69   *lenptr = sizeof (break_insn);
70   return break_insn;
71 }
72 \f
73
74 /* Construct types for ISA-specific registers.  */
75 static struct type *
76 m68k_ps_type (struct gdbarch *gdbarch)
77 {
78   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
79
80   if (!tdep->m68k_ps_type)
81     {
82       struct type *type;
83
84       type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 4);
85       append_flags_type_flag (type, 0, "C");
86       append_flags_type_flag (type, 1, "V");
87       append_flags_type_flag (type, 2, "Z");
88       append_flags_type_flag (type, 3, "N");
89       append_flags_type_flag (type, 4, "X");
90       append_flags_type_flag (type, 8, "I0");
91       append_flags_type_flag (type, 9, "I1");
92       append_flags_type_flag (type, 10, "I2");
93       append_flags_type_flag (type, 12, "M");
94       append_flags_type_flag (type, 13, "S");
95       append_flags_type_flag (type, 14, "T0");
96       append_flags_type_flag (type, 15, "T1");
97
98       tdep->m68k_ps_type = type;
99     }
100
101   return tdep->m68k_ps_type;
102 }
103
104 static struct type *
105 m68881_ext_type (struct gdbarch *gdbarch)
106 {
107   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
108
109   if (!tdep->m68881_ext_type)
110     tdep->m68881_ext_type
111       = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
112                          floatformats_m68881_ext);
113
114   return tdep->m68881_ext_type;
115 }
116
117 /* Return the GDB type object for the "standard" data type of data in
118    register N.  This should be int for D0-D7, SR, FPCONTROL and
119    FPSTATUS, long double for FP0-FP7, and void pointer for all others
120    (A0-A7, PC, FPIADDR).  Note, for registers which contain
121    addresses return pointer to void, not pointer to char, because we
122    don't want to attempt to print the string after printing the
123    address.  */
124
125 static struct type *
126 m68k_register_type (struct gdbarch *gdbarch, int regnum)
127 {
128   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
129
130   if (tdep->fpregs_present)
131     {
132       if (regnum >= gdbarch_fp0_regnum (gdbarch)
133           && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
134         {
135           if (tdep->flavour == m68k_coldfire_flavour)
136             return builtin_type (gdbarch)->builtin_double;
137           else
138             return m68881_ext_type (gdbarch);
139         }
140
141       if (regnum == M68K_FPI_REGNUM)
142         return builtin_type (gdbarch)->builtin_func_ptr;
143
144       if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
145         return builtin_type (gdbarch)->builtin_int32;
146     }
147   else
148     {
149       if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
150         return builtin_type (gdbarch)->builtin_int0;
151     }
152
153   if (regnum == gdbarch_pc_regnum (gdbarch))
154     return builtin_type (gdbarch)->builtin_func_ptr;
155
156   if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
157     return builtin_type (gdbarch)->builtin_data_ptr;
158
159   if (regnum == M68K_PS_REGNUM)
160     return m68k_ps_type (gdbarch);
161
162   return builtin_type (gdbarch)->builtin_int32;
163 }
164
165 static const char *m68k_register_names[] = {
166     "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
167     "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
168     "ps", "pc",
169     "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
170     "fpcontrol", "fpstatus", "fpiaddr"
171   };
172
173 /* Function: m68k_register_name
174    Returns the name of the standard m68k register regnum.  */
175
176 static const char *
177 m68k_register_name (struct gdbarch *gdbarch, int regnum)
178 {
179   if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
180     internal_error (__FILE__, __LINE__,
181                     _("m68k_register_name: illegal register number %d"),
182                     regnum);
183   else if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM
184            && gdbarch_tdep (gdbarch)->fpregs_present == 0)
185     return "";
186   else
187     return m68k_register_names[regnum];
188 }
189 \f
190 /* Return nonzero if a value of type TYPE stored in register REGNUM
191    needs any special handling.  */
192
193 static int
194 m68k_convert_register_p (struct gdbarch *gdbarch,
195                          int regnum, struct type *type)
196 {
197   if (!gdbarch_tdep (gdbarch)->fpregs_present)
198     return 0;
199   return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
200           && type != register_type (gdbarch, M68K_FP0_REGNUM));
201 }
202
203 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
204    return its contents in TO.  */
205
206 static int
207 m68k_register_to_value (struct frame_info *frame, int regnum,
208                         struct type *type, gdb_byte *to,
209                         int *optimizedp, int *unavailablep)
210 {
211   gdb_byte from[M68K_MAX_REGISTER_SIZE];
212   struct type *fpreg_type = register_type (get_frame_arch (frame),
213                                            M68K_FP0_REGNUM);
214
215   /* We only support floating-point values.  */
216   if (TYPE_CODE (type) != TYPE_CODE_FLT)
217     {
218       warning (_("Cannot convert floating-point register value "
219                "to non-floating-point type."));
220       *optimizedp = *unavailablep = 0;
221       return 0;
222     }
223
224   /* Convert to TYPE.  */
225
226   /* Convert to TYPE.  */
227   if (!get_frame_register_bytes (frame, regnum, 0, TYPE_LENGTH (type),
228                                  from, optimizedp, unavailablep))
229     return 0;
230
231   convert_typed_floating (from, fpreg_type, to, type);
232   *optimizedp = *unavailablep = 0;
233   return 1;
234 }
235
236 /* Write the contents FROM of a value of type TYPE into register
237    REGNUM in frame FRAME.  */
238
239 static void
240 m68k_value_to_register (struct frame_info *frame, int regnum,
241                         struct type *type, const gdb_byte *from)
242 {
243   gdb_byte to[M68K_MAX_REGISTER_SIZE];
244   struct type *fpreg_type = register_type (get_frame_arch (frame),
245                                            M68K_FP0_REGNUM);
246
247   /* We only support floating-point values.  */
248   if (TYPE_CODE (type) != TYPE_CODE_FLT)
249     {
250       warning (_("Cannot convert non-floating-point type "
251                "to floating-point register value."));
252       return;
253     }
254
255   /* Convert from TYPE.  */
256   convert_typed_floating (from, type, to, fpreg_type);
257   put_frame_register (frame, regnum, to);
258 }
259
260 \f
261 /* There is a fair number of calling conventions that are in somewhat
262    wide use.  The 68000/08/10 don't support an FPU, not even as a
263    coprocessor.  All function return values are stored in %d0/%d1.
264    Structures are returned in a static buffer, a pointer to which is
265    returned in %d0.  This means that functions returning a structure
266    are not re-entrant.  To avoid this problem some systems use a
267    convention where the caller passes a pointer to a buffer in %a1
268    where the return values is to be stored.  This convention is the
269    default, and is implemented in the function m68k_return_value.
270
271    The 68020/030/040/060 do support an FPU, either as a coprocessor
272    (68881/2) or built-in (68040/68060).  That's why System V release 4
273    (SVR4) instroduces a new calling convention specified by the SVR4
274    psABI.  Integer values are returned in %d0/%d1, pointer return
275    values in %a0 and floating values in %fp0.  When calling functions
276    returning a structure the caller should pass a pointer to a buffer
277    for the return value in %a0.  This convention is implemented in the
278    function m68k_svr4_return_value, and by appropriately setting the
279    struct_value_regnum member of `struct gdbarch_tdep'.
280
281    GNU/Linux returns values in the same way as SVR4 does, but uses %a1
282    for passing the structure return value buffer.
283
284    GCC can also generate code where small structures are returned in
285    %d0/%d1 instead of in memory by using -freg-struct-return.  This is
286    the default on NetBSD a.out, OpenBSD and GNU/Linux and several
287    embedded systems.  This convention is implemented by setting the
288    struct_return member of `struct gdbarch_tdep' to reg_struct_return.  */
289
290 /* Read a function return value of TYPE from REGCACHE, and copy that
291    into VALBUF.  */
292
293 static void
294 m68k_extract_return_value (struct type *type, struct regcache *regcache,
295                            gdb_byte *valbuf)
296 {
297   int len = TYPE_LENGTH (type);
298   gdb_byte buf[M68K_MAX_REGISTER_SIZE];
299
300   if (len <= 4)
301     {
302       regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
303       memcpy (valbuf, buf + (4 - len), len);
304     }
305   else if (len <= 8)
306     {
307       regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
308       memcpy (valbuf, buf + (8 - len), len - 4);
309       regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
310     }
311   else
312     internal_error (__FILE__, __LINE__,
313                     _("Cannot extract return value of %d bytes long."), len);
314 }
315
316 static void
317 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
318                                 gdb_byte *valbuf)
319 {
320   int len = TYPE_LENGTH (type);
321   gdb_byte buf[M68K_MAX_REGISTER_SIZE];
322   struct gdbarch *gdbarch = get_regcache_arch (regcache);
323   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
324
325   if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
326     {
327       struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
328       regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
329       convert_typed_floating (buf, fpreg_type, valbuf, type);
330     }
331   else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
332     regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
333   else
334     m68k_extract_return_value (type, regcache, valbuf);
335 }
336
337 /* Write a function return value of TYPE from VALBUF into REGCACHE.  */
338
339 static void
340 m68k_store_return_value (struct type *type, struct regcache *regcache,
341                          const gdb_byte *valbuf)
342 {
343   int len = TYPE_LENGTH (type);
344
345   if (len <= 4)
346     regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
347   else if (len <= 8)
348     {
349       regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
350                                len - 4, valbuf);
351       regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
352     }
353   else
354     internal_error (__FILE__, __LINE__,
355                     _("Cannot store return value of %d bytes long."), len);
356 }
357
358 static void
359 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
360                               const gdb_byte *valbuf)
361 {
362   int len = TYPE_LENGTH (type);
363   struct gdbarch *gdbarch = get_regcache_arch (regcache);
364   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
365
366   if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
367     {
368       struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
369       gdb_byte buf[M68K_MAX_REGISTER_SIZE];
370       convert_typed_floating (valbuf, type, buf, fpreg_type);
371       regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
372     }
373   else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
374     {
375       regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
376       regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
377     }
378   else
379     m68k_store_return_value (type, regcache, valbuf);
380 }
381
382 /* Return non-zero if TYPE, which is assumed to be a structure or
383    union type, should be returned in registers for architecture
384    GDBARCH.  */
385
386 static int
387 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
388 {
389   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
390   enum type_code code = TYPE_CODE (type);
391   int len = TYPE_LENGTH (type);
392
393   gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
394
395   if (tdep->struct_return == pcc_struct_return)
396     return 0;
397
398   return (len == 1 || len == 2 || len == 4 || len == 8);
399 }
400
401 /* Determine, for architecture GDBARCH, how a return value of TYPE
402    should be returned.  If it is supposed to be returned in registers,
403    and READBUF is non-zero, read the appropriate value from REGCACHE,
404    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
405    from WRITEBUF into REGCACHE.  */
406
407 static enum return_value_convention
408 m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
409                    struct type *type, struct regcache *regcache,
410                    gdb_byte *readbuf, const gdb_byte *writebuf)
411 {
412   enum type_code code = TYPE_CODE (type);
413
414   /* GCC returns a `long double' in memory too.  */
415   if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
416        && !m68k_reg_struct_return_p (gdbarch, type))
417       || (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
418     {
419       /* The default on m68k is to return structures in static memory.
420          Consequently a function must return the address where we can
421          find the return value.  */
422
423       if (readbuf)
424         {
425           ULONGEST addr;
426
427           regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
428           read_memory (addr, readbuf, TYPE_LENGTH (type));
429         }
430
431       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
432     }
433
434   if (readbuf)
435     m68k_extract_return_value (type, regcache, readbuf);
436   if (writebuf)
437     m68k_store_return_value (type, regcache, writebuf);
438
439   return RETURN_VALUE_REGISTER_CONVENTION;
440 }
441
442 static enum return_value_convention
443 m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *func_type,
444                         struct type *type, struct regcache *regcache,
445                         gdb_byte *readbuf, const gdb_byte *writebuf)
446 {
447   enum type_code code = TYPE_CODE (type);
448
449   if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
450       && !m68k_reg_struct_return_p (gdbarch, type))
451     {
452       /* The System V ABI says that:
453
454          "A function returning a structure or union also sets %a0 to
455          the value it finds in %a0.  Thus when the caller receives
456          control again, the address of the returned object resides in
457          register %a0."
458
459          So the ABI guarantees that we can always find the return
460          value just after the function has returned.  */
461
462       if (readbuf)
463         {
464           ULONGEST addr;
465
466           regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
467           read_memory (addr, readbuf, TYPE_LENGTH (type));
468         }
469
470       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
471     }
472
473   /* This special case is for structures consisting of a single
474      `float' or `double' member.  These structures are returned in
475      %fp0.  For these structures, we call ourselves recursively,
476      changing TYPE into the type of the first member of the structure.
477      Since that should work for all structures that have only one
478      member, we don't bother to check the member's type here.  */
479   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
480     {
481       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
482       return m68k_svr4_return_value (gdbarch, func_type, type, regcache,
483                                      readbuf, writebuf);
484     }
485
486   if (readbuf)
487     m68k_svr4_extract_return_value (type, regcache, readbuf);
488   if (writebuf)
489     m68k_svr4_store_return_value (type, regcache, writebuf);
490
491   return RETURN_VALUE_REGISTER_CONVENTION;
492 }
493 \f
494
495 /* Always align the frame to a 4-byte boundary.  This is required on
496    coldfire and harmless on the rest.  */
497
498 static CORE_ADDR
499 m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
500 {
501   /* Align the stack to four bytes.  */
502   return sp & ~3;
503 }
504
505 static CORE_ADDR
506 m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
507                       struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
508                       struct value **args, CORE_ADDR sp, int struct_return,
509                       CORE_ADDR struct_addr)
510 {
511   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
512   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
513   gdb_byte buf[4];
514   int i;
515
516   /* Push arguments in reverse order.  */
517   for (i = nargs - 1; i >= 0; i--)
518     {
519       struct type *value_type = value_enclosing_type (args[i]);
520       int len = TYPE_LENGTH (value_type);
521       int container_len = (len + 3) & ~3;
522       int offset;
523
524       /* Non-scalars bigger than 4 bytes are left aligned, others are
525          right aligned.  */
526       if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
527            || TYPE_CODE (value_type) == TYPE_CODE_UNION
528            || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
529           && len > 4)
530         offset = 0;
531       else
532         offset = container_len - len;
533       sp -= container_len;
534       write_memory (sp + offset, value_contents_all (args[i]), len);
535     }
536
537   /* Store struct value address.  */
538   if (struct_return)
539     {
540       store_unsigned_integer (buf, 4, byte_order, struct_addr);
541       regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
542     }
543
544   /* Store return address.  */
545   sp -= 4;
546   store_unsigned_integer (buf, 4, byte_order, bp_addr);
547   write_memory (sp, buf, 4);
548
549   /* Finally, update the stack pointer...  */
550   store_unsigned_integer (buf, 4, byte_order, sp);
551   regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
552
553   /* ...and fake a frame pointer.  */
554   regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
555
556   /* DWARF2/GCC uses the stack address *before* the function call as a
557      frame's CFA.  */
558   return sp + 8;
559 }
560
561 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum.  */
562
563 static int
564 m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
565 {
566   if (num < 8)
567     /* d0..7 */
568     return (num - 0) + M68K_D0_REGNUM;
569   else if (num < 16)
570     /* a0..7 */
571     return (num - 8) + M68K_A0_REGNUM;
572   else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
573     /* fp0..7 */
574     return (num - 16) + M68K_FP0_REGNUM;
575   else if (num == 25)
576     /* pc */
577     return M68K_PC_REGNUM;
578   else
579     return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
580 }
581
582 \f
583 struct m68k_frame_cache
584 {
585   /* Base address.  */
586   CORE_ADDR base;
587   CORE_ADDR sp_offset;
588   CORE_ADDR pc;
589
590   /* Saved registers.  */
591   CORE_ADDR saved_regs[M68K_NUM_REGS];
592   CORE_ADDR saved_sp;
593
594   /* Stack space reserved for local variables.  */
595   long locals;
596 };
597
598 /* Allocate and initialize a frame cache.  */
599
600 static struct m68k_frame_cache *
601 m68k_alloc_frame_cache (void)
602 {
603   struct m68k_frame_cache *cache;
604   int i;
605
606   cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
607
608   /* Base address.  */
609   cache->base = 0;
610   cache->sp_offset = -4;
611   cache->pc = 0;
612
613   /* Saved registers.  We initialize these to -1 since zero is a valid
614      offset (that's where %fp is supposed to be stored).  */
615   for (i = 0; i < M68K_NUM_REGS; i++)
616     cache->saved_regs[i] = -1;
617
618   /* Frameless until proven otherwise.  */
619   cache->locals = -1;
620
621   return cache;
622 }
623
624 /* Check whether PC points at a code that sets up a new stack frame.
625    If so, it updates CACHE and returns the address of the first
626    instruction after the sequence that sets removes the "hidden"
627    argument from the stack or CURRENT_PC, whichever is smaller.
628    Otherwise, return PC.  */
629
630 static CORE_ADDR
631 m68k_analyze_frame_setup (struct gdbarch *gdbarch,
632                           CORE_ADDR pc, CORE_ADDR current_pc,
633                           struct m68k_frame_cache *cache)
634 {
635   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
636   int op;
637
638   if (pc >= current_pc)
639     return current_pc;
640
641   op = read_memory_unsigned_integer (pc, 2, byte_order);
642
643   if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
644     {
645       cache->saved_regs[M68K_FP_REGNUM] = 0;
646       cache->sp_offset += 4;
647       if (op == P_LINKW_FP)
648         {
649           /* link.w %fp, #-N */
650           /* link.w %fp, #0; adda.l #-N, %sp */
651           cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
652
653           if (pc + 4 < current_pc && cache->locals == 0)
654             {
655               op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
656               if (op == P_ADDAL_SP)
657                 {
658                   cache->locals = read_memory_integer (pc + 6, 4, byte_order);
659                   return pc + 10;
660                 }
661             }
662
663           return pc + 4;
664         }
665       else if (op == P_LINKL_FP)
666         {
667           /* link.l %fp, #-N */
668           cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
669           return pc + 6;
670         }
671       else
672         {
673           /* pea (%fp); movea.l %sp, %fp */
674           cache->locals = 0;
675
676           if (pc + 2 < current_pc)
677             {
678               op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
679
680               if (op == P_MOVEAL_SP_FP)
681                 {
682                   /* move.l %sp, %fp */
683                   return pc + 4;
684                 }
685             }
686
687           return pc + 2;
688         }
689     }
690   else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
691     {
692       /* subq.[wl] #N,%sp */
693       /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
694       cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
695       if (pc + 2 < current_pc)
696         {
697           op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
698           if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
699             {
700               cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
701               return pc + 4;
702             }
703         }
704       return pc + 2;
705     }
706   else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
707     {
708       /* adda.w #-N,%sp */
709       /* lea (-N,%sp),%sp */
710       cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
711       return pc + 4;
712     }
713   else if (op == P_ADDAL_SP)
714     {
715       /* adda.l #-N,%sp */
716       cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
717       return pc + 6;
718     }
719
720   return pc;
721 }
722
723 /* Check whether PC points at code that saves registers on the stack.
724    If so, it updates CACHE and returns the address of the first
725    instruction after the register saves or CURRENT_PC, whichever is
726    smaller.  Otherwise, return PC.  */
727
728 static CORE_ADDR
729 m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
730                              CORE_ADDR current_pc,
731                              struct m68k_frame_cache *cache)
732 {
733   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
734
735   if (cache->locals >= 0)
736     {
737       CORE_ADDR offset;
738       int op;
739       int i, mask, regno;
740
741       offset = -4 - cache->locals;
742       while (pc < current_pc)
743         {
744           op = read_memory_unsigned_integer (pc, 2, byte_order);
745           if (op == P_FMOVEMX_SP
746               && gdbarch_tdep (gdbarch)->fpregs_present)
747             {
748               /* fmovem.x REGS,-(%sp) */
749               op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
750               if ((op & 0xff00) == 0xe000)
751                 {
752                   mask = op & 0xff;
753                   for (i = 0; i < 16; i++, mask >>= 1)
754                     {
755                       if (mask & 1)
756                         {
757                           cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
758                           offset -= 12;
759                         }
760                     }
761                   pc += 4;
762                 }
763               else
764                 break;
765             }
766           else if ((op & 0177760) == P_MOVEL_SP)
767             {
768               /* move.l %R,-(%sp) */
769               regno = op & 017;
770               cache->saved_regs[regno] = offset;
771               offset -= 4;
772               pc += 2;
773             }
774           else if (op == P_MOVEML_SP)
775             {
776               /* movem.l REGS,-(%sp) */
777               mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
778               for (i = 0; i < 16; i++, mask >>= 1)
779                 {
780                   if (mask & 1)
781                     {
782                       cache->saved_regs[15 - i] = offset;
783                       offset -= 4;
784                     }
785                 }
786               pc += 4;
787             }
788           else
789             break;
790         }
791     }
792
793   return pc;
794 }
795
796
797 /* Do a full analysis of the prologue at PC and update CACHE
798    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
799    address where the analysis stopped.
800
801    We handle all cases that can be generated by gcc.
802
803    For allocating a stack frame:
804
805    link.w %a6,#-N
806    link.l %a6,#-N
807    pea (%fp); move.l %sp,%fp
808    link.w %a6,#0; add.l #-N,%sp
809    subq.l #N,%sp
810    subq.w #N,%sp
811    subq.w #8,%sp; subq.w #N-8,%sp
812    add.w #-N,%sp
813    lea (-N,%sp),%sp
814    add.l #-N,%sp
815
816    For saving registers:
817
818    fmovem.x REGS,-(%sp)
819    move.l R1,-(%sp)
820    move.l R1,-(%sp); move.l R2,-(%sp)
821    movem.l REGS,-(%sp)
822
823    For setting up the PIC register:
824
825    lea (%pc,N),%a5
826
827    */
828
829 static CORE_ADDR
830 m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
831                        CORE_ADDR current_pc, struct m68k_frame_cache *cache)
832 {
833   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
834   unsigned int op;
835
836   pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
837   pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
838   if (pc >= current_pc)
839     return current_pc;
840
841   /* Check for GOT setup.  */
842   op = read_memory_unsigned_integer (pc, 4, byte_order);
843   if (op == P_LEA_PC_A5)
844     {
845       /* lea (%pc,N),%a5 */
846       return pc + 8;
847     }
848
849   return pc;
850 }
851
852 /* Return PC of first real instruction.  */
853
854 static CORE_ADDR
855 m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
856 {
857   struct m68k_frame_cache cache;
858   CORE_ADDR pc;
859   int op;
860
861   cache.locals = -1;
862   pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
863   if (cache.locals < 0)
864     return start_pc;
865   return pc;
866 }
867
868 static CORE_ADDR
869 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
870 {
871   gdb_byte buf[8];
872
873   frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
874   return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
875 }
876 \f
877 /* Normal frames.  */
878
879 static struct m68k_frame_cache *
880 m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
881 {
882   struct gdbarch *gdbarch = get_frame_arch (this_frame);
883   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
884   struct m68k_frame_cache *cache;
885   gdb_byte buf[4];
886   int i;
887
888   if (*this_cache)
889     return *this_cache;
890
891   cache = m68k_alloc_frame_cache ();
892   *this_cache = cache;
893
894   /* In principle, for normal frames, %fp holds the frame pointer,
895      which holds the base address for the current stack frame.
896      However, for functions that don't need it, the frame pointer is
897      optional.  For these "frameless" functions the frame pointer is
898      actually the frame pointer of the calling frame.  Signal
899      trampolines are just a special case of a "frameless" function.
900      They (usually) share their frame pointer with the frame that was
901      in progress when the signal occurred.  */
902
903   get_frame_register (this_frame, M68K_FP_REGNUM, buf);
904   cache->base = extract_unsigned_integer (buf, 4, byte_order);
905   if (cache->base == 0)
906     return cache;
907
908   /* For normal frames, %pc is stored at 4(%fp).  */
909   cache->saved_regs[M68K_PC_REGNUM] = 4;
910
911   cache->pc = get_frame_func (this_frame);
912   if (cache->pc != 0)
913     m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
914                            get_frame_pc (this_frame), cache);
915
916   if (cache->locals < 0)
917     {
918       /* We didn't find a valid frame, which means that CACHE->base
919          currently holds the frame pointer for our calling frame.  If
920          we're at the start of a function, or somewhere half-way its
921          prologue, the function's frame probably hasn't been fully
922          setup yet.  Try to reconstruct the base address for the stack
923          frame by looking at the stack pointer.  For truly "frameless"
924          functions this might work too.  */
925
926       get_frame_register (this_frame, M68K_SP_REGNUM, buf);
927       cache->base = extract_unsigned_integer (buf, 4, byte_order)
928                     + cache->sp_offset;
929     }
930
931   /* Now that we have the base address for the stack frame we can
932      calculate the value of %sp in the calling frame.  */
933   cache->saved_sp = cache->base + 8;
934
935   /* Adjust all the saved registers such that they contain addresses
936      instead of offsets.  */
937   for (i = 0; i < M68K_NUM_REGS; i++)
938     if (cache->saved_regs[i] != -1)
939       cache->saved_regs[i] += cache->base;
940
941   return cache;
942 }
943
944 static void
945 m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
946                     struct frame_id *this_id)
947 {
948   struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
949
950   /* This marks the outermost frame.  */
951   if (cache->base == 0)
952     return;
953
954   /* See the end of m68k_push_dummy_call.  */
955   *this_id = frame_id_build (cache->base + 8, cache->pc);
956 }
957
958 static struct value *
959 m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
960                           int regnum)
961 {
962   struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
963
964   gdb_assert (regnum >= 0);
965
966   if (regnum == M68K_SP_REGNUM && cache->saved_sp)
967     return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
968
969   if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
970     return frame_unwind_got_memory (this_frame, regnum,
971                                     cache->saved_regs[regnum]);
972
973   return frame_unwind_got_register (this_frame, regnum, regnum);
974 }
975
976 static const struct frame_unwind m68k_frame_unwind =
977 {
978   NORMAL_FRAME,
979   m68k_frame_this_id,
980   m68k_frame_prev_register,
981   NULL,
982   default_frame_sniffer
983 };
984 \f
985 static CORE_ADDR
986 m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
987 {
988   struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
989
990   return cache->base;
991 }
992
993 static const struct frame_base m68k_frame_base =
994 {
995   &m68k_frame_unwind,
996   m68k_frame_base_address,
997   m68k_frame_base_address,
998   m68k_frame_base_address
999 };
1000
1001 static struct frame_id
1002 m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1003 {
1004   CORE_ADDR fp;
1005
1006   fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
1007
1008   /* See the end of m68k_push_dummy_call.  */
1009   return frame_id_build (fp + 8, get_frame_pc (this_frame));
1010 }
1011 \f
1012
1013 /* Figure out where the longjmp will land.  Slurp the args out of the stack.
1014    We expect the first arg to be a pointer to the jmp_buf structure from which
1015    we extract the pc (JB_PC) that we will land at.  The pc is copied into PC.
1016    This routine returns true on success.  */
1017
1018 static int
1019 m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1020 {
1021   gdb_byte *buf;
1022   CORE_ADDR sp, jb_addr;
1023   struct gdbarch *gdbarch = get_frame_arch (frame);
1024   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1025   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1026
1027   if (tdep->jb_pc < 0)
1028     {
1029       internal_error (__FILE__, __LINE__,
1030                       _("m68k_get_longjmp_target: not implemented"));
1031       return 0;
1032     }
1033
1034   buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1035   sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
1036
1037   if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack.  */
1038                           buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
1039     return 0;
1040
1041   jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1042                                              / TARGET_CHAR_BIT, byte_order);
1043
1044   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
1045                           gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1046                           byte_order)
1047     return 0;
1048
1049   *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1050                                          / TARGET_CHAR_BIT, byte_order);
1051   return 1;
1052 }
1053 \f
1054
1055 /* System V Release 4 (SVR4).  */
1056
1057 void
1058 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1059 {
1060   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1061
1062   /* SVR4 uses a different calling convention.  */
1063   set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1064
1065   /* SVR4 uses %a0 instead of %a1.  */
1066   tdep->struct_value_regnum = M68K_A0_REGNUM;
1067 }
1068 \f
1069
1070 /* Function: m68k_gdbarch_init
1071    Initializer function for the m68k gdbarch vector.
1072    Called by gdbarch.  Sets up the gdbarch vector(s) for this target.  */
1073
1074 static struct gdbarch *
1075 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1076 {
1077   struct gdbarch_tdep *tdep = NULL;
1078   struct gdbarch *gdbarch;
1079   struct gdbarch_list *best_arch;
1080   struct tdesc_arch_data *tdesc_data = NULL;
1081   int i;
1082   enum m68k_flavour flavour = m68k_no_flavour;
1083   int has_fp = 1;
1084   const struct floatformat **long_double_format = floatformats_m68881_ext;
1085
1086   /* Check any target description for validity.  */
1087   if (tdesc_has_registers (info.target_desc))
1088     {
1089       const struct tdesc_feature *feature;
1090       int valid_p;
1091
1092       feature = tdesc_find_feature (info.target_desc,
1093                                     "org.gnu.gdb.m68k.core");
1094       if (feature != NULL)
1095         /* Do nothing.  */
1096         ;
1097
1098       if (feature == NULL)
1099         {
1100           feature = tdesc_find_feature (info.target_desc,
1101                                         "org.gnu.gdb.coldfire.core");
1102           if (feature != NULL)
1103             flavour = m68k_coldfire_flavour;
1104         }
1105
1106       if (feature == NULL)
1107         {
1108           feature = tdesc_find_feature (info.target_desc,
1109                                         "org.gnu.gdb.fido.core");
1110           if (feature != NULL)
1111             flavour = m68k_fido_flavour;
1112         }
1113
1114       if (feature == NULL)
1115         return NULL;
1116
1117       tdesc_data = tdesc_data_alloc ();
1118
1119       valid_p = 1;
1120       for (i = 0; i <= M68K_PC_REGNUM; i++)
1121         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1122                                             m68k_register_names[i]);
1123
1124       if (!valid_p)
1125         {
1126           tdesc_data_cleanup (tdesc_data);
1127           return NULL;
1128         }
1129
1130       feature = tdesc_find_feature (info.target_desc,
1131                                     "org.gnu.gdb.coldfire.fp");
1132       if (feature != NULL)
1133         {
1134           valid_p = 1;
1135           for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1136             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1137                                                 m68k_register_names[i]);
1138           if (!valid_p)
1139             {
1140               tdesc_data_cleanup (tdesc_data);
1141               return NULL;
1142             }
1143         }
1144       else
1145         has_fp = 0;
1146     }
1147
1148   /* The mechanism for returning floating values from function
1149      and the type of long double depend on whether we're
1150      on ColdFire or standard m68k.  */
1151
1152   if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
1153     {
1154       const bfd_arch_info_type *coldfire_arch = 
1155         bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1156
1157       if (coldfire_arch
1158           && ((*info.bfd_arch_info->compatible) 
1159               (info.bfd_arch_info, coldfire_arch)))
1160         flavour = m68k_coldfire_flavour;
1161     }
1162   
1163   /* If there is already a candidate, use it.  */
1164   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1165        best_arch != NULL;
1166        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1167     {
1168       if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1169         continue;
1170
1171       if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1172         continue;
1173
1174       break;
1175     }
1176
1177   if (best_arch != NULL)
1178     {
1179       if (tdesc_data != NULL)
1180         tdesc_data_cleanup (tdesc_data);
1181       return best_arch->gdbarch;
1182     }
1183
1184   tdep = xzalloc (sizeof (struct gdbarch_tdep));
1185   gdbarch = gdbarch_alloc (&info, tdep);
1186   tdep->fpregs_present = has_fp;
1187   tdep->flavour = flavour;
1188
1189   if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1190     long_double_format = floatformats_ieee_double;
1191   set_gdbarch_long_double_format (gdbarch, long_double_format);
1192   set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
1193
1194   set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
1195   set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
1196
1197   /* Stack grows down.  */
1198   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1199   set_gdbarch_frame_align (gdbarch, m68k_frame_align);
1200
1201   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1202   if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1203     set_gdbarch_decr_pc_after_break (gdbarch, 2);
1204
1205   set_gdbarch_frame_args_skip (gdbarch, 8);
1206   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
1207
1208   set_gdbarch_register_type (gdbarch, m68k_register_type);
1209   set_gdbarch_register_name (gdbarch, m68k_register_name);
1210   set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
1211   set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
1212   set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1213   set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1214   set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1215   set_gdbarch_register_to_value (gdbarch,  m68k_register_to_value);
1216   set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
1217
1218   if (has_fp)
1219     set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1220
1221   /* Try to figure out if the arch uses floating registers to return
1222      floating point values from functions.  */
1223   if (has_fp)
1224     {
1225       /* On ColdFire, floating point values are returned in D0.  */
1226       if (flavour == m68k_coldfire_flavour)
1227         tdep->float_return = 0;
1228       else
1229         tdep->float_return = 1;
1230     }
1231   else
1232     {
1233       /* No floating registers, so can't use them for returning values.  */
1234       tdep->float_return = 0;
1235     }
1236
1237   /* Function call & return.  */
1238   set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
1239   set_gdbarch_return_value (gdbarch, m68k_return_value);
1240
1241
1242   /* Disassembler.  */
1243   set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1244
1245 #if defined JB_PC && defined JB_ELEMENT_SIZE
1246   tdep->jb_pc = JB_PC;
1247   tdep->jb_elt_size = JB_ELEMENT_SIZE;
1248 #else
1249   tdep->jb_pc = -1;
1250 #endif
1251   tdep->struct_value_regnum = M68K_A1_REGNUM;
1252   tdep->struct_return = reg_struct_return;
1253
1254   /* Frame unwinder.  */
1255   set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
1256   set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1257
1258   /* Hook in the DWARF CFI frame unwinder.  */
1259   dwarf2_append_unwinders (gdbarch);
1260
1261   frame_base_set_default (gdbarch, &m68k_frame_base);
1262
1263   /* Hook in ABI-specific overrides, if they have been registered.  */
1264   gdbarch_init_osabi (info, gdbarch);
1265
1266   /* Now we have tuned the configuration, set a few final things,
1267      based on what the OS ABI has told us.  */
1268
1269   if (tdep->jb_pc >= 0)
1270     set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1271
1272   frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
1273
1274   if (tdesc_data)
1275     tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
1276
1277   return gdbarch;
1278 }
1279
1280
1281 static void
1282 m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1283 {
1284   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1285
1286   if (tdep == NULL)
1287     return;
1288 }
1289
1290 extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1291
1292 void
1293 _initialize_m68k_tdep (void)
1294 {
1295   gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
1296 }