]>
Commit | Line | Data |
---|---|---|
748894bf MK |
1 | /* Target-dependent code for the Motorola 68000 series. |
2 | ||
4a94e368 | 3 | Copyright (C) 1990-2022 Free Software Foundation, Inc. |
32eeb91a AS |
4 | |
5 | This file is part of GDB. | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
a9762ec7 | 9 | the Free Software Foundation; either version 3 of the License, or |
32eeb91a AS |
10 | (at your option) any later version. |
11 | ||
12 | This program is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
a9762ec7 | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
32eeb91a AS |
19 | |
20 | #ifndef M68K_TDEP_H | |
21 | #define M68K_TDEP_H | |
22 | ||
76eb8ef1 SM |
23 | #include "gdbarch.h" |
24 | ||
bd2b40ac | 25 | class frame_info_ptr; |
8de307e0 | 26 | |
748894bf | 27 | /* Register numbers of various important registers. */ |
32eeb91a | 28 | |
748894bf | 29 | enum m68k_regnum |
32eeb91a AS |
30 | { |
31 | M68K_D0_REGNUM = 0, | |
8de307e0 | 32 | M68K_D1_REGNUM = 1, |
c0c2b0db MK |
33 | M68K_D2_REGNUM = 2, |
34 | M68K_D7_REGNUM = 7, | |
32eeb91a AS |
35 | M68K_A0_REGNUM = 8, |
36 | M68K_A1_REGNUM = 9, | |
c0c2b0db | 37 | M68K_A2_REGNUM = 10, |
748894bf MK |
38 | M68K_FP_REGNUM = 14, /* Address of executing stack frame. */ |
39 | M68K_SP_REGNUM = 15, /* Address of top of stack. */ | |
40 | M68K_PS_REGNUM = 16, /* Processor status. */ | |
41 | M68K_PC_REGNUM = 17, /* Program counter. */ | |
42 | M68K_FP0_REGNUM = 18, /* Floating point register 0. */ | |
43 | M68K_FPC_REGNUM = 26, /* 68881 control register. */ | |
44 | M68K_FPS_REGNUM = 27, /* 68881 status register. */ | |
32eeb91a AS |
45 | M68K_FPI_REGNUM = 28 |
46 | }; | |
47 | ||
748894bf MK |
48 | /* Number of machine registers. */ |
49 | #define M68K_NUM_REGS (M68K_FPI_REGNUM + 1) | |
8de307e0 AS |
50 | |
51 | /* Size of the largest register. */ | |
52 | #define M68K_MAX_REGISTER_SIZE 12 | |
53 | ||
c481dac7 AS |
54 | /* Convention for returning structures. */ |
55 | ||
56 | enum struct_return | |
57 | { | |
58 | pcc_struct_return, /* Return "short" structures in memory. */ | |
59 | reg_struct_return /* Return "short" structures in registers. */ | |
60 | }; | |
61 | ||
8ed86d01 VP |
62 | /* Particular flavour of m68k. */ |
63 | enum m68k_flavour | |
64 | { | |
65 | m68k_no_flavour, | |
66 | m68k_coldfire_flavour, | |
67 | m68k_fido_flavour | |
68 | }; | |
69 | ||
eb2e12d7 | 70 | /* Target-dependent structure in gdbarch. */ |
748894bf | 71 | |
ab25d9bb | 72 | struct m68k_gdbarch_tdep : gdbarch_tdep_base |
eb2e12d7 AS |
73 | { |
74 | /* Offset to PC value in the jump buffer. If this is negative, | |
75 | longjmp support will be disabled. */ | |
345bd07c | 76 | int jb_pc = 0; |
eb2e12d7 | 77 | /* The size of each entry in the jump buffer. */ |
345bd07c | 78 | size_t jb_elt_size = 0; |
8de307e0 | 79 | |
f595cb19 MK |
80 | /* Register in which the address to store a structure value is |
81 | passed to a function. */ | |
345bd07c | 82 | int struct_value_regnum = 0; |
f595cb19 | 83 | |
3eba3a01 TT |
84 | /* Register in which a pointer value is returned. In the SVR4 ABI, |
85 | this is %a0, but in GCC's "embedded" ABI, this is %d0. */ | |
345bd07c | 86 | int pointer_result_regnum = 0; |
3eba3a01 | 87 | |
c481dac7 | 88 | /* Convention for returning structures. */ |
345bd07c | 89 | enum struct_return struct_return {}; |
8ed86d01 VP |
90 | |
91 | /* Convention for returning floats. zero in int regs, non-zero in float. */ | |
345bd07c | 92 | int float_return = 0; |
8ed86d01 VP |
93 | |
94 | /* The particular flavour of m68k. */ | |
345bd07c | 95 | enum m68k_flavour flavour {}; |
8ed86d01 VP |
96 | |
97 | /* Flag set if the floating point registers are present, or assumed | |
98 | to be present. */ | |
345bd07c | 99 | int fpregs_present = 0; |
27067745 UW |
100 | |
101 | /* ISA-specific data types. */ | |
345bd07c SM |
102 | struct type *m68k_ps_type = nullptr; |
103 | struct type *m68881_ext_type = nullptr; | |
eb2e12d7 AS |
104 | }; |
105 | ||
f595cb19 MK |
106 | /* Initialize a SVR4 architecture variant. */ |
107 | extern void m68k_svr4_init_abi (struct gdbarch_info, struct gdbarch *); | |
108 | \f | |
109 | ||
03b62bbb | 110 | /* Functions exported from m68k-bsd-tdep.c. */ |
511dd2cd | 111 | |
6ba38425 | 112 | extern int m68kbsd_fpreg_offset (struct gdbarch *gdbarch, int regnum); |
511dd2cd | 113 | |
748894bf | 114 | #endif /* m68k-tdep.h */ |