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