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