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