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