/src/binutils-gdb/include/elf/v850.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* V850 ELF support for BFD. |
2 | | Copyright (C) 1997-2025 Free Software Foundation, Inc. |
3 | | Created by Michael Meissner, Cygnus Support <meissner@cygnus.com> |
4 | | |
5 | | This file is part of BFD, the Binary File Descriptor library. |
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 |
9 | | the Free Software Foundation; either version 3 of the License, or |
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 |
18 | | along with this program; if not, write to the Free Software |
19 | | Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
20 | | MA 02110-1301, USA. */ |
21 | | |
22 | | /* This file holds definitions specific to the MIPS ELF ABI. Note |
23 | | that most of this is not actually implemented by BFD. */ |
24 | | |
25 | | #ifndef _ELF_V850_H |
26 | | #define _ELF_V850_H |
27 | | |
28 | | /* Processor specific flags for the ELF header e_flags field. */ |
29 | | |
30 | | /* Four bit V850 architecture field. */ |
31 | 9.03k | #define EF_V850_ARCH 0xf0000000 |
32 | | |
33 | | /* v850 code. */ |
34 | 5.70k | #define E_V850_ARCH 0x00000000 |
35 | | |
36 | | /* v850e code. */ |
37 | 39 | #define E_V850E_ARCH 0x10000000 |
38 | | |
39 | | /* v850e1 code. */ |
40 | 1.42k | #define E_V850E1_ARCH 0x20000000 |
41 | | |
42 | | /* v850e2 code. */ |
43 | 489 | #define E_V850E2_ARCH 0x30000000 |
44 | | |
45 | | /* v850e2v3 code. */ |
46 | 536 | #define E_V850E2V3_ARCH 0x40000000 |
47 | | |
48 | | /* v850e3v5 code. */ |
49 | 755 | #define E_V850E3V5_ARCH 0x60000000 |
50 | | |
51 | | /* Flags for the st_other field. */ |
52 | 0 | #define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */ |
53 | 0 | #define V850_OTHER_ZDA 0x20 /* Symbol had ZDA relocations. */ |
54 | 0 | #define V850_OTHER_TDA 0x40 /* Symbol had TDA relocations. */ |
55 | 0 | #define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */ |
56 | | |
57 | | /* V850 relocations. */ |
58 | | #include "elf/reloc-macros.h" |
59 | | |
60 | 2.03k | START_RELOC_NUMBERS (v850_reloc_type) |
61 | 2.03k | RELOC_NUMBER (R_V850_NONE, 0) |
62 | 21 | RELOC_NUMBER (R_V850_9_PCREL, 1) |
63 | 19 | RELOC_NUMBER (R_V850_22_PCREL, 2) |
64 | 14 | RELOC_NUMBER (R_V850_HI16_S, 3) |
65 | 11 | RELOC_NUMBER (R_V850_HI16, 4) |
66 | 6 | RELOC_NUMBER (R_V850_LO16, 5) |
67 | 11 | RELOC_NUMBER (R_V850_ABS32, 6) |
68 | 13 | RELOC_NUMBER (R_V850_16, 7) |
69 | 22 | RELOC_NUMBER (R_V850_8, 8) |
70 | 100 | RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */ |
71 | 12 | RELOC_NUMBER( R_V850_SDA_15_16_OFFSET, 10) /* For ld.w, ld.h, ld.hu, st.w, st.h */ |
72 | 23 | RELOC_NUMBER( R_V850_ZDA_16_16_OFFSET, 11) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */ |
73 | 10 | RELOC_NUMBER( R_V850_ZDA_15_16_OFFSET, 12) /* For ld.w, ld.h, ld.hu, st.w, st.h */ |
74 | 15 | RELOC_NUMBER( R_V850_TDA_6_8_OFFSET, 13) /* For sst.w, sld.w */ |
75 | 1 | RELOC_NUMBER( R_V850_TDA_7_8_OFFSET, 14) /* For sst.h, sld.h */ |
76 | 14 | RELOC_NUMBER( R_V850_TDA_7_7_OFFSET, 15) /* For sst.b, sld.b */ |
77 | 25 | RELOC_NUMBER( R_V850_TDA_16_16_OFFSET, 16) /* For set1, clr1, not1, tst1, movea, movhi */ |
78 | 11 | RELOC_NUMBER( R_V850_TDA_4_5_OFFSET, 17) /* For sld.hu */ |
79 | 10 | RELOC_NUMBER( R_V850_TDA_4_4_OFFSET, 18) /* For sld.bu */ |
80 | 10 | RELOC_NUMBER( R_V850_SDA_16_16_SPLIT_OFFSET, 19) /* For ld.bu */ |
81 | 5 | RELOC_NUMBER( R_V850_ZDA_16_16_SPLIT_OFFSET, 20) /* For ld.bu */ |
82 | 7 | RELOC_NUMBER( R_V850_CALLT_6_7_OFFSET, 21) /* For callt */ |
83 | 13 | RELOC_NUMBER( R_V850_CALLT_16_16_OFFSET, 22) /* For callt */ |
84 | 4 | RELOC_NUMBER (R_V850_GNU_VTINHERIT, 23) |
85 | 18 | RELOC_NUMBER (R_V850_GNU_VTENTRY, 24) |
86 | 12 | RELOC_NUMBER (R_V850_LONGCALL, 25) |
87 | 9 | RELOC_NUMBER (R_V850_LONGJUMP, 26) |
88 | 2 | RELOC_NUMBER (R_V850_ALIGN, 27) |
89 | 2 | RELOC_NUMBER (R_V850_REL32, 28) |
90 | 9 | RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */ |
91 | 13 | RELOC_NUMBER (R_V850_16_PCREL, 30) /* For loop */ |
92 | 19 | RELOC_NUMBER (R_V850_17_PCREL, 31) /* For br */ |
93 | 3 | RELOC_NUMBER (R_V850_23, 32) /* For 23bit ld.[w,h,hu,b,bu],st.[w,h,b] */ |
94 | 7 | RELOC_NUMBER (R_V850_32_PCREL, 33) /* For jr32, jarl32 */ |
95 | 8 | RELOC_NUMBER (R_V850_32_ABS, 34) /* For jmp32 */ |
96 | 11 | RELOC_NUMBER (R_V850_16_SPLIT_OFFSET, 35) /* For ld.bu */ |
97 | 22 | RELOC_NUMBER (R_V850_16_S1, 36) /* For ld.w, ld.h st.w st.h */ |
98 | 16 | RELOC_NUMBER (R_V850_LO16_S1, 37) /* For ld.w, ld.h st.w st.h */ |
99 | 7 | RELOC_NUMBER (R_V850_CALLT_15_16_OFFSET, 38) /* For ld.w, ld.h, ld.hu, st.w, st.h */ |
100 | 13 | RELOC_NUMBER (R_V850_32_GOTPCREL, 39) /* GLOBAL_OFFSET_TABLE from pc */ |
101 | 4 | RELOC_NUMBER (R_V850_16_GOT, 40) /* GOT ENTRY from gp */ |
102 | 11 | RELOC_NUMBER (R_V850_32_GOT, 41) |
103 | 5 | RELOC_NUMBER (R_V850_22_PLT, 42) /* For jr */ |
104 | 20 | RELOC_NUMBER (R_V850_32_PLT, 43) /* For jr32 */ |
105 | 3 | RELOC_NUMBER (R_V850_COPY, 44) |
106 | 10 | RELOC_NUMBER (R_V850_GLOB_DAT, 45) |
107 | 9 | RELOC_NUMBER (R_V850_JMP_SLOT, 46) |
108 | 4 | RELOC_NUMBER (R_V850_RELATIVE, 47) |
109 | 7 | RELOC_NUMBER (R_V850_16_GOTOFF, 48) /* From gp */ |
110 | 13 | RELOC_NUMBER (R_V850_32_GOTOFF, 49) |
111 | 26 | RELOC_NUMBER (R_V850_CODE, 50) |
112 | 2 | RELOC_NUMBER (R_V850_DATA, 51) /* For loop */ |
113 | 0 | |
114 | 901 | END_RELOC_NUMBERS (R_V850_max) |
115 | | |
116 | | |
117 | | /* Processor specific section indices. These sections do not actually |
118 | | exist. Symbols with a st_shndx field corresponding to one of these |
119 | | values have a special meaning. */ |
120 | | |
121 | | /* Small data area common symbol. */ |
122 | 44 | #define SHN_V850_SCOMMON SHN_LORESERVE |
123 | | |
124 | | /* Tiny data area common symbol. */ |
125 | 346 | #define SHN_V850_TCOMMON (SHN_LORESERVE + 1) |
126 | | |
127 | | /* Zero data area common symbol. */ |
128 | 0 | #define SHN_V850_ZCOMMON (SHN_LORESERVE + 2) |
129 | | |
130 | | |
131 | | /* Processor specific section types. */ |
132 | | |
133 | | /* Section contains the .scommon data. */ |
134 | 104 | #define SHT_V850_SCOMMON 0x70000000 |
135 | | |
136 | | /* Section contains the .scommon data. */ |
137 | 302 | #define SHT_V850_TCOMMON 0x70000001 |
138 | | |
139 | | /* Section contains the .scommon data. */ |
140 | 87 | #define SHT_V850_ZCOMMON 0x70000002 |
141 | | |
142 | | /* Processor specific section flags. */ |
143 | | |
144 | | /* This section must be in the small data area (pointed to by GP). */ |
145 | 34.1k | #define SHF_V850_GPREL 0x10000000 |
146 | | |
147 | | /* This section must be in the tiny data area (pointed to by EP). */ |
148 | | #define SHF_V850_EPREL 0x20000000 |
149 | | |
150 | | /* This section must be in the zero data area (pointed to by R0). */ |
151 | | #define SHF_V850_R0REL 0x40000000 |
152 | | |
153 | | /* Alternative versions of the above definitions, as specified by the RH850 ABI. */ |
154 | | |
155 | 3.56k | #define EF_RH850_ABI 0xF0000000 |
156 | | |
157 | 4.79k | #define EF_V800_850E3 0x00100000 |
158 | | |
159 | 2.85k | #define EF_RH850_FPU_DOUBLE 0x00000001 /* sizeof(double) == 8. */ |
160 | 2.79k | #define EF_RH850_FPU_SINGLE 0x00000002 /* sizeof(double) == 4. */ |
161 | 2.52k | #define EF_RH850_REGMODE22 0x00000020 /* Registers r15-r24 (inclusive) are not used. */ |
162 | 2.77k | #define EF_RH850_REGMODE32 0x00000040 |
163 | 2.71k | #define EF_RH850_GP_FIX 0x00000100 /* r4 is fixed. */ |
164 | 2.64k | #define EF_RH850_GP_NOFIX 0x00000200 /* r4 is callee save. */ |
165 | 2.56k | #define EF_RH850_EP_FIX 0x00000400 /* r30 is fixed. */ |
166 | 2.49k | #define EF_RH850_EP_NOFIX 0x00000800 /* r30 is callee save. */ |
167 | 2.70k | #define EF_RH850_TP_FIX 0x00001000 /* r5 is fixed. */ |
168 | 2.55k | #define EF_RH850_TP_NOFIX 0x00002000 /* r5 is callee save. */ |
169 | 2.77k | #define EF_RH850_REG2_RESERVE 0x00004000 /* r2 is fixed. */ |
170 | 2.55k | #define EF_RH850_REG2_NORESERVE 0x00008000 /* r2 is callee saved. */ |
171 | | |
172 | 232 | #define SHT_RENESAS_IOP SHT_LOUSER /* Used by Renesas linker. */ |
173 | | |
174 | | #define SHF_RENESAS_ABS 0x80000000 /* Absolute section. */ |
175 | | #define SHF_GHS_ABS 0x00000400 /* Use unknown. */ |
176 | | |
177 | | #define STT_RENESAS_ENTRY 14 /* Set for functions called at reset time. */ |
178 | | |
179 | 97.5k | START_RELOC_NUMBERS (v800_reloc_type) |
180 | | |
181 | 97.5k | RELOC_NUMBER (R_V800_NONE, 0x00) |
182 | 949 | RELOC_NUMBER (R_V810_NONE, 0x30) |
183 | 451 | RELOC_NUMBER (R_V810_BYTE, 0x31) |
184 | 1.18k | RELOC_NUMBER (R_V810_HWORD, 0x32) |
185 | 579 | RELOC_NUMBER (R_V810_WORD, 0x33) |
186 | 379 | RELOC_NUMBER (R_V810_WLO, 0x34) |
187 | 317 | RELOC_NUMBER (R_V810_WHI, 0x35) |
188 | 328 | RELOC_NUMBER (R_V810_WHI1, 0x36) |
189 | 590 | RELOC_NUMBER (R_V810_GPBYTE, 0x37) |
190 | 505 | RELOC_NUMBER (R_V810_GPHWORD, 0x38) |
191 | 295 | RELOC_NUMBER (R_V810_GPWORD, 0x39) |
192 | 326 | RELOC_NUMBER (R_V810_GPWLO, 0x3a) |
193 | 334 | RELOC_NUMBER (R_V810_GPWHI, 0x3b) |
194 | 519 | RELOC_NUMBER (R_V810_GPWHI1, 0x3c) |
195 | 369 | RELOC_NUMBER (R_V850_HWLO, 0x3d) |
196 | 0 | FAKE_RELOC (R_V810_reserved1, 0x3e) |
197 | 352 | RELOC_NUMBER (R_V850_EP7BIT, 0x3f) |
198 | 557 | RELOC_NUMBER (R_V850_EPHBYTE, 0x40) |
199 | 433 | RELOC_NUMBER (R_V850_EPWBYTE, 0x41) |
200 | 255 | RELOC_NUMBER (R_V850_REGHWLO, 0x42) |
201 | 0 | FAKE_RELOC (R_V810_reserved2, 0x43) |
202 | 299 | RELOC_NUMBER (R_V850_GPHWLO, 0x44) |
203 | 0 | FAKE_RELOC (R_V810_reserved3, 0x45) |
204 | 1.53k | RELOC_NUMBER (R_V850_PCR22, 0x46) |
205 | 319 | RELOC_NUMBER (R_V850_BLO, 0x47) |
206 | 248 | RELOC_NUMBER (R_V850_EP4BIT, 0x48) |
207 | 316 | RELOC_NUMBER (R_V850_EP5BIT, 0x49) |
208 | 281 | RELOC_NUMBER (R_V850_REGBLO, 0x4a) |
209 | 293 | RELOC_NUMBER (R_V850_GPBLO, 0x4b) |
210 | 525 | RELOC_NUMBER (R_V810_WLO_1, 0x4c) |
211 | 247 | RELOC_NUMBER (R_V810_GPWLO_1, 0x4d) |
212 | 294 | RELOC_NUMBER (R_V850_BLO_1, 0x4e) |
213 | 386 | RELOC_NUMBER (R_V850_HWLO_1, 0x4f) |
214 | 0 | FAKE_RELOC (R_V810_reserved4, 0x50) |
215 | 307 | RELOC_NUMBER (R_V850_GPBLO_1, 0x51) |
216 | 330 | RELOC_NUMBER (R_V850_GPHWLO_1, 0x52) |
217 | 0 | FAKE_RELOC (R_V810_reserved5, 0x53) |
218 | 422 | RELOC_NUMBER (R_V850_EPBLO, 0x54) |
219 | 588 | RELOC_NUMBER (R_V850_EPHWLO, 0x55) |
220 | 0 | FAKE_RELOC (R_V810_reserved6, 0x56) |
221 | 271 | RELOC_NUMBER (R_V850_EPWLO_N, 0x57) |
222 | 253 | RELOC_NUMBER (R_V850_PC32, 0x58) |
223 | 262 | RELOC_NUMBER (R_V850_W23BIT, 0x59) |
224 | 251 | RELOC_NUMBER (R_V850_GPW23BIT, 0x5a) |
225 | 792 | RELOC_NUMBER (R_V850_EPW23BIT, 0x5b) |
226 | 290 | RELOC_NUMBER (R_V850_B23BIT, 0x5c) |
227 | 375 | RELOC_NUMBER (R_V850_GPB23BIT, 0x5d) |
228 | 293 | RELOC_NUMBER (R_V850_EPB23BIT, 0x5e) |
229 | 337 | RELOC_NUMBER (R_V850_PC16U, 0x5f) |
230 | 963 | RELOC_NUMBER (R_V850_PC17, 0x60) |
231 | 273 | RELOC_NUMBER (R_V850_DW8, 0x61) |
232 | 312 | RELOC_NUMBER (R_V850_GPDW8, 0x62) |
233 | 943 | RELOC_NUMBER (R_V850_EPDW8, 0x63) |
234 | 510 | RELOC_NUMBER (R_V850_PC9, 0x64) |
235 | 500 | RELOC_NUMBER (R_V810_REGBYTE, 0x65) |
236 | 307 | RELOC_NUMBER (R_V810_REGHWORD, 0x66) |
237 | 370 | RELOC_NUMBER (R_V810_REGWORD, 0x67) |
238 | 286 | RELOC_NUMBER (R_V810_REGWLO, 0x68) |
239 | 433 | RELOC_NUMBER (R_V810_REGWHI, 0x69) |
240 | 277 | RELOC_NUMBER (R_V810_REGWHI1, 0x6a) |
241 | 425 | RELOC_NUMBER (R_V850_REGW23BIT, 0x6b) |
242 | 298 | RELOC_NUMBER (R_V850_REGB23BIT, 0x6c) |
243 | 342 | RELOC_NUMBER (R_V850_REGDW8, 0x6d) |
244 | 543 | RELOC_NUMBER (R_V810_EPBYTE, 0x6e) |
245 | 507 | RELOC_NUMBER (R_V810_EPHWORD, 0x6f) |
246 | 559 | RELOC_NUMBER (R_V810_EPWORD, 0x70) |
247 | 287 | RELOC_NUMBER (R_V850_WLO23, 0x71) |
248 | 306 | RELOC_NUMBER (R_V850_WORD_E, 0x72) |
249 | 304 | RELOC_NUMBER (R_V850_REGWORD_E, 0x73) |
250 | 331 | RELOC_NUMBER (R_V850_WORD, 0x74) |
251 | 590 | RELOC_NUMBER (R_V850_GPWORD, 0x75) |
252 | 231 | RELOC_NUMBER (R_V850_REGWORD, 0x76) |
253 | 254 | RELOC_NUMBER (R_V850_EPWORD, 0x77) |
254 | 254 | RELOC_NUMBER (R_V810_TPBYTE, 0x78) |
255 | 955 | RELOC_NUMBER (R_V810_TPHWORD, 0x79) |
256 | 532 | RELOC_NUMBER (R_V810_TPWORD, 0x7a) |
257 | 261 | RELOC_NUMBER (R_V810_TPWLO, 0x7b) |
258 | 281 | RELOC_NUMBER (R_V810_TPWHI, 0x7c) |
259 | 424 | RELOC_NUMBER (R_V810_TPWHI1, 0x7d) |
260 | 300 | RELOC_NUMBER (R_V850_TPHWLO, 0x7e) |
261 | 522 | RELOC_NUMBER (R_V850_TPBLO, 0x7f) |
262 | 580 | RELOC_NUMBER (R_V810_TPWLO_1, 0x80) |
263 | 326 | RELOC_NUMBER (R_V850_TPBLO_1, 0x81) |
264 | 425 | RELOC_NUMBER (R_V850_TPHWLO_1, 0x82) |
265 | 803 | RELOC_NUMBER (R_V850_TP23BIT, 0x83) |
266 | 424 | RELOC_NUMBER (R_V850_TPW23BIT, 0x84) |
267 | 220 | RELOC_NUMBER (R_V850_TPDW8, 0x85) |
268 | | |
269 | | /* These are defined by the RH850 ABI, but not used. */ |
270 | 449 | RELOC_NUMBER (R_V810_ABS32, 0xa0) |
271 | 205 | RELOC_NUMBER (R_V850_SYM, 0xe0) |
272 | 280 | RELOC_NUMBER (R_V850_OPadd, 0xe1) |
273 | 297 | RELOC_NUMBER (R_V850_OPsub, 0xe2) |
274 | 299 | RELOC_NUMBER (R_V850_OPsctsize, 0xe3) |
275 | 282 | RELOC_NUMBER (R_V850_OPscttop, 0xe4) |
276 | | |
277 | 37.2k | END_RELOC_NUMBERS (R_V800_max) |
278 | | |
279 | | /* Type for Renesas note sections. NB/ This is in application space |
280 | | rather than processor space as it refers to the requirements of the |
281 | | binary concerned. A given processor may be able to handle multiple |
282 | | different types of application. */ |
283 | 24.9k | #define SHT_RENESAS_INFO 0xa0000000 |
284 | | |
285 | | /* Contents of a Renesas note entry: |
286 | | |
287 | | namesz +------------------+ |
288 | | | 4 | "REL\0" |
289 | | descsz +------------------+ |
290 | | | 4 | Currently 4byte only |
291 | | type +------------------+ |
292 | | | ID | |
293 | | name +------------------+ |
294 | | | REL\0 | |
295 | | desc +------------------+ |
296 | | | Value | |
297 | | +------------------+ */ |
298 | | |
299 | 10 | #define V850_NOTE_SECNAME ".note.renesas" |
300 | 0 | #define SIZEOF_V850_NOTE 20 |
301 | 0 | #define V850_NOTE_NAME "REL" |
302 | | |
303 | | enum v850_notes |
304 | | { |
305 | | V850_NOTE_ALIGNMENT = 1, /* Alignment of 8-byte entities. */ |
306 | 18 | #define EF_RH850_DATA_ALIGN4 0x0001 /* Aligned to 4-byte bounadries. */ |
307 | 10 | #define EF_RH850_DATA_ALIGN8 0x0002 /* Aligned to 8-byte bounadries. */ |
308 | | |
309 | | V850_NOTE_DATA_SIZE = 2, /* Sizeof double and long double. */ |
310 | 18 | #define EF_RH850_DOUBLE32 0x0001 /* 32-bits in size. */ |
311 | 10 | #define EF_RH850_DOUBLE64 0x0002 /* 64-bits in size. */ |
312 | | |
313 | | V850_NOTE_FPU_INFO = 3, /* Defined if extended floating point insns are used. */ |
314 | 20 | #define EF_RH850_FPU20 0x0001 /* Set if [N]]M{ADD|SUB}F.S are used. */ |
315 | 26 | #define EF_RH850_FPU30 0x0002 /* Set if ADSF.D or ADDF.D is used. */ |
316 | | |
317 | | V850_NOTE_SIMD_INFO = 4, |
318 | 55 | #define EF_RH850_SIMD 0x0001 |
319 | | |
320 | | V850_NOTE_CACHE_INFO = 5, |
321 | 0 | #define EF_RH850_CACHE 0x0001 |
322 | | |
323 | | V850_NOTE_MMU_INFO = 6 |
324 | 0 | #define EF_RH850_MMU 0x0001 |
325 | | }; |
326 | | |
327 | 0 | #define NUM_V850_NOTES V850_NOTE_MMU_INFO |
328 | | |
329 | | #endif /* _ELF_V850_H */ |