/* Target-dependent code for the Motorola 68000 series. Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef M68K_TDEP_H #define M68K_TDEP_H #include "gdbarch.h" struct frame_info; /* Register numbers of various important registers. */ enum m68k_regnum { M68K_D0_REGNUM = 0, M68K_D1_REGNUM = 1, M68K_D2_REGNUM = 2, M68K_D7_REGNUM = 7, M68K_A0_REGNUM = 8, M68K_A1_REGNUM = 9, M68K_A2_REGNUM = 10, M68K_FP_REGNUM = 14, /* Address of executing stack frame. */ M68K_SP_REGNUM = 15, /* Address of top of stack. */ M68K_PS_REGNUM = 16, /* Processor status. */ M68K_PC_REGNUM = 17, /* Program counter. */ M68K_FP0_REGNUM = 18, /* Floating point register 0. */ M68K_FPC_REGNUM = 26, /* 68881 control register. */ M68K_FPS_REGNUM = 27, /* 68881 status register. */ M68K_FPI_REGNUM = 28 }; /* Number of machine registers. */ #define M68K_NUM_REGS (M68K_FPI_REGNUM + 1) /* Size of the largest register. */ #define M68K_MAX_REGISTER_SIZE 12 /* Convention for returning structures. */ enum struct_return { pcc_struct_return, /* Return "short" structures in memory. */ reg_struct_return /* Return "short" structures in registers. */ }; /* Particular flavour of m68k. */ enum m68k_flavour { m68k_no_flavour, m68k_coldfire_flavour, m68k_fido_flavour }; /* Target-dependent structure in gdbarch. */ struct m68k_gdbarch_tdep : gdbarch_tdep { /* Offset to PC value in the jump buffer. If this is negative, longjmp support will be disabled. */ int jb_pc = 0; /* The size of each entry in the jump buffer. */ size_t jb_elt_size = 0; /* Register in which the address to store a structure value is passed to a function. */ int struct_value_regnum = 0; /* Register in which a pointer value is returned. In the SVR4 ABI, this is %a0, but in GCC's "embedded" ABI, this is %d0. */ int pointer_result_regnum = 0; /* Convention for returning structures. */ enum struct_return struct_return {}; /* Convention for returning floats. zero in int regs, non-zero in float. */ int float_return = 0; /* The particular flavour of m68k. */ enum m68k_flavour flavour {}; /* Flag set if the floating point registers are present, or assumed to be present. */ int fpregs_present = 0; /* ISA-specific data types. */ struct type *m68k_ps_type = nullptr; struct type *m68881_ext_type = nullptr; }; /* Initialize a SVR4 architecture variant. */ extern void m68k_svr4_init_abi (struct gdbarch_info, struct gdbarch *); /* Functions exported from m68k-bsd-tdep.c. */ extern int m68kbsd_fpreg_offset (struct gdbarch *gdbarch, int regnum); #endif /* m68k-tdep.h */