123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /* Target-dependent code for the Motorola 68000 series.
- Copyright (C) 1990-2022 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 <http://www.gnu.org/licenses/>. */
- #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 */
|