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