/src/binutils-gdb/include/elf/m68k.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* MC68k ELF support for BFD. |
2 | | Copyright (C) 1998-2025 Free Software Foundation, Inc. |
3 | | |
4 | | This file is part of BFD, the Binary File Descriptor library. |
5 | | |
6 | | This program is free software; you can redistribute it and/or modify |
7 | | it under the terms of the GNU General Public License as published by |
8 | | the Free Software Foundation; either version 3 of the License, or |
9 | | (at your option) any later version. |
10 | | |
11 | | This program is distributed in the hope that it will be useful, |
12 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | | GNU General Public License for more details. |
15 | | |
16 | | You should have received a copy of the GNU General Public License |
17 | | along with this program; if not, write to the Free Software Foundation, |
18 | | Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
19 | | |
20 | | #ifndef _ELF_M68K_H |
21 | | #define _ELF_M68K_H |
22 | | |
23 | | #include "elf/reloc-macros.h" |
24 | | |
25 | | /* Relocation types. */ |
26 | 2.95k | START_RELOC_NUMBERS (elf_m68k_reloc_type) |
27 | 2.95k | RELOC_NUMBER (R_68K_NONE, 0) /* No reloc */ |
28 | 58 | RELOC_NUMBER (R_68K_32, 1) /* Direct 32 bit */ |
29 | 44 | RELOC_NUMBER (R_68K_16, 2) /* Direct 16 bit */ |
30 | 23 | RELOC_NUMBER (R_68K_8, 3) /* Direct 8 bit */ |
31 | 84 | RELOC_NUMBER (R_68K_PC32, 4) /* PC relative 32 bit */ |
32 | 17 | RELOC_NUMBER (R_68K_PC16, 5) /* PC relative 16 bit */ |
33 | 16 | RELOC_NUMBER (R_68K_PC8, 6) /* PC relative 8 bit */ |
34 | 20 | RELOC_NUMBER (R_68K_GOT32, 7) /* 32 bit PC relative GOT entry */ |
35 | 21 | RELOC_NUMBER (R_68K_GOT16, 8) /* 16 bit PC relative GOT entry */ |
36 | 215 | RELOC_NUMBER (R_68K_GOT8, 9) /* 8 bit PC relative GOT entry */ |
37 | 15 | RELOC_NUMBER (R_68K_GOT32O, 10) /* 32 bit GOT offset */ |
38 | 62 | RELOC_NUMBER (R_68K_GOT16O, 11) /* 16 bit GOT offset */ |
39 | 7 | RELOC_NUMBER (R_68K_GOT8O, 12) /* 8 bit GOT offset */ |
40 | 5 | RELOC_NUMBER (R_68K_PLT32, 13) /* 32 bit PC relative PLT address */ |
41 | 21 | RELOC_NUMBER (R_68K_PLT16, 14) /* 16 bit PC relative PLT address */ |
42 | 13 | RELOC_NUMBER (R_68K_PLT8, 15) /* 8 bit PC relative PLT address */ |
43 | 10 | RELOC_NUMBER (R_68K_PLT32O, 16) /* 32 bit PLT offset */ |
44 | 34 | RELOC_NUMBER (R_68K_PLT16O, 17) /* 16 bit PLT offset */ |
45 | 5 | RELOC_NUMBER (R_68K_PLT8O, 18) /* 8 bit PLT offset */ |
46 | 19 | RELOC_NUMBER (R_68K_COPY, 19) /* Copy symbol at runtime */ |
47 | 14 | RELOC_NUMBER (R_68K_GLOB_DAT, 20) /* Create GOT entry */ |
48 | 8 | RELOC_NUMBER (R_68K_JMP_SLOT, 21) /* Create PLT entry */ |
49 | 5 | RELOC_NUMBER (R_68K_RELATIVE, 22) /* Adjust by program base */ |
50 | 0 | /* These are GNU extensions to enable C++ vtable garbage collection. */ |
51 | 4 | RELOC_NUMBER (R_68K_GNU_VTINHERIT, 23) |
52 | 3 | RELOC_NUMBER (R_68K_GNU_VTENTRY, 24) |
53 | | /* TLS static relocations. */ |
54 | 5 | RELOC_NUMBER (R_68K_TLS_GD32, 25) |
55 | 11 | RELOC_NUMBER (R_68K_TLS_GD16, 26) |
56 | 8 | RELOC_NUMBER (R_68K_TLS_GD8, 27) |
57 | 5 | RELOC_NUMBER (R_68K_TLS_LDM32, 28) |
58 | 3 | RELOC_NUMBER (R_68K_TLS_LDM16, 29) |
59 | 1 | RELOC_NUMBER (R_68K_TLS_LDM8, 30) |
60 | 6 | RELOC_NUMBER (R_68K_TLS_LDO32, 31) |
61 | 24 | RELOC_NUMBER (R_68K_TLS_LDO16, 32) |
62 | 48 | RELOC_NUMBER (R_68K_TLS_LDO8, 33) |
63 | 11 | RELOC_NUMBER (R_68K_TLS_IE32, 34) |
64 | 17 | RELOC_NUMBER (R_68K_TLS_IE16, 35) |
65 | 16 | RELOC_NUMBER (R_68K_TLS_IE8, 36) |
66 | 1 | RELOC_NUMBER (R_68K_TLS_LE32, 37) |
67 | 21 | RELOC_NUMBER (R_68K_TLS_LE16, 38) |
68 | 9 | RELOC_NUMBER (R_68K_TLS_LE8, 39) |
69 | 2 | RELOC_NUMBER (R_68K_TLS_DTPMOD32, 40) |
70 | 13 | RELOC_NUMBER (R_68K_TLS_DTPREL32, 41) |
71 | 12 | RELOC_NUMBER (R_68K_TLS_TPREL32, 42) |
72 | 1.12k | END_RELOC_NUMBERS (R_68K_max) |
73 | | |
74 | | /* We use the top 24 bits to encode information about the |
75 | | architecture variant. */ |
76 | 75.4k | #define EF_M68K_CPU32 0x00810000 |
77 | 77.1k | #define EF_M68K_M68000 0x01000000 |
78 | 56.6k | #define EF_M68K_CFV4E 0x00008000 |
79 | 73.7k | #define EF_M68K_FIDO 0x02000000 |
80 | | #define EF_M68K_ARCH_MASK \ |
81 | 56.6k | (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO) |
82 | | |
83 | | /* We use the bottom 8 bits to encode information about the |
84 | | coldfire variant. If we use any of these bits, the top 24 bits are |
85 | | either 0 or EF_M68K_CFV4E. */ |
86 | 15.4k | #define EF_M68K_CF_ISA_MASK 0x0F /* Which ISA */ |
87 | 1.02k | #define EF_M68K_CF_ISA_A_NODIV 0x01 /* ISA A except for div */ |
88 | 965 | #define EF_M68K_CF_ISA_A 0x02 |
89 | 2.05k | #define EF_M68K_CF_ISA_A_PLUS 0x03 |
90 | 1.44k | #define EF_M68K_CF_ISA_B_NOUSP 0x04 /* ISA_B except for USP */ |
91 | 1.41k | #define EF_M68K_CF_ISA_B 0x05 |
92 | 1.21k | #define EF_M68K_CF_ISA_C 0x06 |
93 | 502 | #define EF_M68K_CF_ISA_C_NODIV 0x07 /* ISA C except for div */ |
94 | 15.3k | #define EF_M68K_CF_MAC_MASK 0x30 |
95 | 4.18k | #define EF_M68K_CF_MAC 0x10 /* MAC */ |
96 | 4.83k | #define EF_M68K_CF_EMAC 0x20 /* EMAC */ |
97 | 128 | #define EF_M68K_CF_EMAC_B 0x30 /* EMAC_B */ |
98 | 15.3k | #define EF_M68K_CF_FLOAT 0x40 /* Has float insns */ |
99 | | #define EF_M68K_CF_MASK 0xFF |
100 | | |
101 | | /* GNU object attribute tags. */ |
102 | | enum |
103 | | { |
104 | | /* 0-3 are generic. */ |
105 | | |
106 | | /* FP ABI, low 2 bits: |
107 | | 1 for double precision hard-float, |
108 | | 2 for soft-float, |
109 | | 0 for not tagged or not using any ABIs affected by the differences. */ |
110 | | Tag_GNU_M68K_ABI_FP = 4, |
111 | | }; |
112 | | |
113 | | #endif |