]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - include/elf/v850.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / include / elf / v850.h
CommitLineData
252b5132 1/* V850 ELF support for BFD.
250d07de 2 Copyright (C) 1997-2021 Free Software Foundation, Inc.
252b5132
RH
3 Created by Michael Meissner, Cygnus Support <meissner@cygnus.com>
4
86aba9db 5 This file is part of BFD, the Binary File Descriptor library.
252b5132 6
86aba9db
NC
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
e4e42b45 9 the Free Software Foundation; either version 3 of the License, or
86aba9db 10 (at your option) any later version.
252b5132 11
86aba9db
NC
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.
252b5132 16
86aba9db
NC
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
e4e42b45
NC
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
252b5132
RH
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#define EF_V850_ARCH 0xf0000000
32
33/* v850 code. */
34#define E_V850_ARCH 0x00000000
35
36/* v850e code. */
37#define E_V850E_ARCH 0x10000000
38
8ad30312
NC
39/* v850e1 code. */
40#define E_V850E1_ARCH 0x20000000
41
1cd986c5
NC
42/* v850e2 code. */
43#define E_V850E2_ARCH 0x30000000
44
45/* v850e2v3 code. */
46#define E_V850E2V3_ARCH 0x40000000
252b5132 47
78c8d46c
NC
48/* v850e3v5 code. */
49#define E_V850E3V5_ARCH 0x60000000
50
86aba9db 51/* Flags for the st_other field. */
d4c87fc1
AM
52#define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */
53#define V850_OTHER_ZDA 0x20 /* Symbol had ZDA relocations. */
54#define V850_OTHER_TDA 0x40 /* Symbol had TDA relocations. */
86aba9db 55#define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */
252b5132 56
86aba9db 57/* V850 relocations. */
252b5132
RH
58#include "elf/reloc-macros.h"
59
60START_RELOC_NUMBERS (v850_reloc_type)
61 RELOC_NUMBER (R_V850_NONE, 0)
62 RELOC_NUMBER (R_V850_9_PCREL, 1)
63 RELOC_NUMBER (R_V850_22_PCREL, 2)
64 RELOC_NUMBER (R_V850_HI16_S, 3)
65 RELOC_NUMBER (R_V850_HI16, 4)
66 RELOC_NUMBER (R_V850_LO16, 5)
e30ddb24 67 RELOC_NUMBER (R_V850_ABS32, 6)
252b5132
RH
68 RELOC_NUMBER (R_V850_16, 7)
69 RELOC_NUMBER (R_V850_8, 8)
70 RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
71 RELOC_NUMBER( R_V850_SDA_15_16_OFFSET, 10) /* For ld.w, ld.h, ld.hu, st.w, st.h */
72 RELOC_NUMBER( R_V850_ZDA_16_16_OFFSET, 11) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
73 RELOC_NUMBER( R_V850_ZDA_15_16_OFFSET, 12) /* For ld.w, ld.h, ld.hu, st.w, st.h */
74 RELOC_NUMBER( R_V850_TDA_6_8_OFFSET, 13) /* For sst.w, sld.w */
75 RELOC_NUMBER( R_V850_TDA_7_8_OFFSET, 14) /* For sst.h, sld.h */
76 RELOC_NUMBER( R_V850_TDA_7_7_OFFSET, 15) /* For sst.b, sld.b */
77 RELOC_NUMBER( R_V850_TDA_16_16_OFFSET, 16) /* For set1, clr1, not1, tst1, movea, movhi */
252b5132
RH
78 RELOC_NUMBER( R_V850_TDA_4_5_OFFSET, 17) /* For sld.hu */
79 RELOC_NUMBER( R_V850_TDA_4_4_OFFSET, 18) /* For sld.bu */
80 RELOC_NUMBER( R_V850_SDA_16_16_SPLIT_OFFSET, 19) /* For ld.bu */
81 RELOC_NUMBER( R_V850_ZDA_16_16_SPLIT_OFFSET, 20) /* For ld.bu */
82 RELOC_NUMBER( R_V850_CALLT_6_7_OFFSET, 21) /* For callt */
83 RELOC_NUMBER( R_V850_CALLT_16_16_OFFSET, 22) /* For callt */
252b5132
RH
84 RELOC_NUMBER (R_V850_GNU_VTINHERIT, 23)
85 RELOC_NUMBER (R_V850_GNU_VTENTRY, 24)
86aba9db
NC
86 RELOC_NUMBER (R_V850_LONGCALL, 25)
87 RELOC_NUMBER (R_V850_LONGJUMP, 26)
88 RELOC_NUMBER (R_V850_ALIGN, 27)
e30ddb24 89 RELOC_NUMBER (R_V850_REL32, 28)
1e50d24d 90 RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */
1cd986c5
NC
91 RELOC_NUMBER (R_V850_16_PCREL, 30) /* For loop */
92 RELOC_NUMBER (R_V850_17_PCREL, 31) /* For br */
93 RELOC_NUMBER (R_V850_23, 32) /* For 23bit ld.[w,h,hu,b,bu],st.[w,h,b] */
94 RELOC_NUMBER (R_V850_32_PCREL, 33) /* For jr32, jarl32 */
95 RELOC_NUMBER (R_V850_32_ABS, 34) /* For jmp32 */
96 RELOC_NUMBER (R_V850_16_SPLIT_OFFSET, 35) /* For ld.bu */
97 RELOC_NUMBER (R_V850_16_S1, 36) /* For ld.w, ld.h st.w st.h */
98 RELOC_NUMBER (R_V850_LO16_S1, 37) /* For ld.w, ld.h st.w st.h */
99 RELOC_NUMBER (R_V850_CALLT_15_16_OFFSET, 38) /* For ld.w, ld.h, ld.hu, st.w, st.h */
100 RELOC_NUMBER (R_V850_32_GOTPCREL, 39) /* GLOBAL_OFFSET_TABLE from pc */
101 RELOC_NUMBER (R_V850_16_GOT, 40) /* GOT ENTRY from gp */
102 RELOC_NUMBER (R_V850_32_GOT, 41)
103 RELOC_NUMBER (R_V850_22_PLT, 42) /* For jr */
104 RELOC_NUMBER (R_V850_32_PLT, 43) /* For jr32 */
105 RELOC_NUMBER (R_V850_COPY, 44)
106 RELOC_NUMBER (R_V850_GLOB_DAT, 45)
107 RELOC_NUMBER (R_V850_JMP_SLOT, 46)
108 RELOC_NUMBER (R_V850_RELATIVE, 47)
109 RELOC_NUMBER (R_V850_16_GOTOFF, 48) /* From gp */
110 RELOC_NUMBER (R_V850_32_GOTOFF, 49)
111 RELOC_NUMBER (R_V850_CODE, 50)
112 RELOC_NUMBER (R_V850_DATA, 51) /* For loop */
113
1b452ec6 114END_RELOC_NUMBERS (R_V850_max)
252b5132
RH
115
116\f
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. */
1bce5d2c 122#define SHN_V850_SCOMMON SHN_LORESERVE
252b5132
RH
123
124/* Tiny data area common symbol. */
1bce5d2c 125#define SHN_V850_TCOMMON (SHN_LORESERVE + 1)
252b5132
RH
126
127/* Zero data area common symbol. */
1bce5d2c 128#define SHN_V850_ZCOMMON (SHN_LORESERVE + 2)
252b5132
RH
129
130\f
131/* Processor specific section types. */
132
133/* Section contains the .scommon data. */
134#define SHT_V850_SCOMMON 0x70000000
135
136/* Section contains the .scommon data. */
137#define SHT_V850_TCOMMON 0x70000001
138
139/* Section contains the .scommon data. */
140#define SHT_V850_ZCOMMON 0x70000002
141
2f89ff8d
L
142/* Processor specific section flags. */
143
144/* This section must be in the small data area (pointed to by GP). */
145#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
de863c74
NC
153/* Alternative versions of the above definitions, as specified by the RH850 ABI. */
154
155#define EF_RH850_ABI 0xF0000000
156
157#define EF_V800_850E3 0x00100000
158
159#define EF_RH850_FPU_DOUBLE 0x00000001 /* sizeof(double) == 8. */
160#define EF_RH850_FPU_SINGLE 0x00000002 /* sizeof(double) == 4. */
de863c74
NC
161#define EF_RH850_REGMODE22 0x00000020 /* Registers r15-r24 (inclusive) are not used. */
162#define EF_RH850_REGMODE32 0x00000040
de863c74
NC
163#define EF_RH850_GP_FIX 0x00000100 /* r4 is fixed. */
164#define EF_RH850_GP_NOFIX 0x00000200 /* r4 is callee save. */
165#define EF_RH850_EP_FIX 0x00000400 /* r30 is fixed. */
166#define EF_RH850_EP_NOFIX 0x00000800 /* r30 is callee save. */
167#define EF_RH850_TP_FIX 0x00001000 /* r5 is fixed. */
168#define EF_RH850_TP_NOFIX 0x00002000 /* r5 is callee save. */
169#define EF_RH850_REG2_RESERVE 0x00004000 /* r2 is fixed. */
170#define EF_RH850_REG2_NORESERVE 0x00008000 /* r2 is callee saved. */
171
685080f2 172#define SHT_RENESAS_IOP SHT_LOUSER /* Used by Renesas linker. */
de863c74
NC
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
179START_RELOC_NUMBERS (v800_reloc_type)
180
181 RELOC_NUMBER (R_V800_NONE, 0x00)
182 RELOC_NUMBER (R_V810_NONE, 0x30)
183 RELOC_NUMBER (R_V810_BYTE, 0x31)
184 RELOC_NUMBER (R_V810_HWORD, 0x32)
185 RELOC_NUMBER (R_V810_WORD, 0x33)
186 RELOC_NUMBER (R_V810_WLO, 0x34)
187 RELOC_NUMBER (R_V810_WHI, 0x35)
188 RELOC_NUMBER (R_V810_WHI1, 0x36)
189 RELOC_NUMBER (R_V810_GPBYTE, 0x37)
190 RELOC_NUMBER (R_V810_GPHWORD, 0x38)
191 RELOC_NUMBER (R_V810_GPWORD, 0x39)
192 RELOC_NUMBER (R_V810_GPWLO, 0x3a)
193 RELOC_NUMBER (R_V810_GPWHI, 0x3b)
194 RELOC_NUMBER (R_V810_GPWHI1, 0x3c)
195 RELOC_NUMBER (R_V850_HWLO, 0x3d)
196 FAKE_RELOC (R_V810_reserved1, 0x3e)
197 RELOC_NUMBER (R_V850_EP7BIT, 0x3f)
198 RELOC_NUMBER (R_V850_EPHBYTE, 0x40)
199 RELOC_NUMBER (R_V850_EPWBYTE, 0x41)
200 RELOC_NUMBER (R_V850_REGHWLO, 0x42)
201 FAKE_RELOC (R_V810_reserved2, 0x43)
202 RELOC_NUMBER (R_V850_GPHWLO, 0x44)
203 FAKE_RELOC (R_V810_reserved3, 0x45)
204 RELOC_NUMBER (R_V850_PCR22, 0x46)
205 RELOC_NUMBER (R_V850_BLO, 0x47)
206 RELOC_NUMBER (R_V850_EP4BIT, 0x48)
207 RELOC_NUMBER (R_V850_EP5BIT, 0x49)
208 RELOC_NUMBER (R_V850_REGBLO, 0x4a)
209 RELOC_NUMBER (R_V850_GPBLO, 0x4b)
210 RELOC_NUMBER (R_V810_WLO_1, 0x4c)
211 RELOC_NUMBER (R_V810_GPWLO_1, 0x4d)
212 RELOC_NUMBER (R_V850_BLO_1, 0x4e)
213 RELOC_NUMBER (R_V850_HWLO_1, 0x4f)
214 FAKE_RELOC (R_V810_reserved4, 0x50)
215 RELOC_NUMBER (R_V850_GPBLO_1, 0x51)
216 RELOC_NUMBER (R_V850_GPHWLO_1, 0x52)
217 FAKE_RELOC (R_V810_reserved5, 0x53)
218 RELOC_NUMBER (R_V850_EPBLO, 0x54)
219 RELOC_NUMBER (R_V850_EPHWLO, 0x55)
220 FAKE_RELOC (R_V810_reserved6, 0x56)
221 RELOC_NUMBER (R_V850_EPWLO_N, 0x57)
222 RELOC_NUMBER (R_V850_PC32, 0x58)
223 RELOC_NUMBER (R_V850_W23BIT, 0x59)
224 RELOC_NUMBER (R_V850_GPW23BIT, 0x5a)
225 RELOC_NUMBER (R_V850_EPW23BIT, 0x5b)
226 RELOC_NUMBER (R_V850_B23BIT, 0x5c)
227 RELOC_NUMBER (R_V850_GPB23BIT, 0x5d)
228 RELOC_NUMBER (R_V850_EPB23BIT, 0x5e)
229 RELOC_NUMBER (R_V850_PC16U, 0x5f)
230 RELOC_NUMBER (R_V850_PC17, 0x60)
231 RELOC_NUMBER (R_V850_DW8, 0x61)
232 RELOC_NUMBER (R_V850_GPDW8, 0x62)
233 RELOC_NUMBER (R_V850_EPDW8, 0x63)
234 RELOC_NUMBER (R_V850_PC9, 0x64)
235 RELOC_NUMBER (R_V810_REGBYTE, 0x65)
236 RELOC_NUMBER (R_V810_REGHWORD, 0x66)
237 RELOC_NUMBER (R_V810_REGWORD, 0x67)
238 RELOC_NUMBER (R_V810_REGWLO, 0x68)
239 RELOC_NUMBER (R_V810_REGWHI, 0x69)
240 RELOC_NUMBER (R_V810_REGWHI1, 0x6a)
241 RELOC_NUMBER (R_V850_REGW23BIT, 0x6b)
242 RELOC_NUMBER (R_V850_REGB23BIT, 0x6c)
243 RELOC_NUMBER (R_V850_REGDW8, 0x6d)
244 RELOC_NUMBER (R_V810_EPBYTE, 0x6e)
245 RELOC_NUMBER (R_V810_EPHWORD, 0x6f)
246 RELOC_NUMBER (R_V810_EPWORD, 0x70)
247 RELOC_NUMBER (R_V850_WLO23, 0x71)
248 RELOC_NUMBER (R_V850_WORD_E, 0x72)
249 RELOC_NUMBER (R_V850_REGWORD_E, 0x73)
250 RELOC_NUMBER (R_V850_WORD, 0x74)
251 RELOC_NUMBER (R_V850_GPWORD, 0x75)
252 RELOC_NUMBER (R_V850_REGWORD, 0x76)
253 RELOC_NUMBER (R_V850_EPWORD, 0x77)
254 RELOC_NUMBER (R_V810_TPBYTE, 0x78)
255 RELOC_NUMBER (R_V810_TPHWORD, 0x79)
256 RELOC_NUMBER (R_V810_TPWORD, 0x7a)
257 RELOC_NUMBER (R_V810_TPWLO, 0x7b)
258 RELOC_NUMBER (R_V810_TPWHI, 0x7c)
259 RELOC_NUMBER (R_V810_TPWHI1, 0x7d)
260 RELOC_NUMBER (R_V850_TPHWLO, 0x7e)
261 RELOC_NUMBER (R_V850_TPBLO, 0x7f)
262 RELOC_NUMBER (R_V810_TPWLO_1, 0x80)
263 RELOC_NUMBER (R_V850_TPBLO_1, 0x81)
264 RELOC_NUMBER (R_V850_TPHWLO_1, 0x82)
265 RELOC_NUMBER (R_V850_TP23BIT, 0x83)
266 RELOC_NUMBER (R_V850_TPW23BIT, 0x84)
267 RELOC_NUMBER (R_V850_TPDW8, 0x85)
268
269/* These are defined by the RH850 ABI, but not used. */
270 RELOC_NUMBER (R_V810_ABS32, 0xa0)
271 RELOC_NUMBER (R_V850_SYM, 0xe0)
272 RELOC_NUMBER (R_V850_OPadd, 0xe1)
273 RELOC_NUMBER (R_V850_OPsub, 0xe2)
274 RELOC_NUMBER (R_V850_OPsctsize, 0xe3)
275 RELOC_NUMBER (R_V850_OPscttop, 0xe4)
276
277END_RELOC_NUMBERS (R_V800_max)
278
685080f2
NC
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#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#define V850_NOTE_SECNAME ".note.renesas"
300#define SIZEOF_V850_NOTE 20
301#define V850_NOTE_NAME "REL"
302
303enum v850_notes
304{
305 V850_NOTE_ALIGNMENT = 1, /* Alignment of 8-byte entities. */
306#define EF_RH850_DATA_ALIGN4 0x0001 /* Aligned to 4-byte bounadries. */
307#define EF_RH850_DATA_ALIGN8 0x0002 /* Aligned to 8-byte bounadries. */
308
309 V850_NOTE_DATA_SIZE = 2, /* Sizeof double and long double. */
310#define EF_RH850_DOUBLE32 0x0001 /* 32-bits in size. */
311#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#define EF_RH850_FPU20 0x0001 /* Set if [N]]M{ADD|SUB}F.S are used. */
315#define EF_RH850_FPU30 0x0002 /* Set if ADSF.D or ADDF.D is used. */
316
317 V850_NOTE_SIMD_INFO = 4,
318#define EF_RH850_SIMD 0x0001
319
320 V850_NOTE_CACHE_INFO = 5,
321#define EF_RH850_CACHE 0x0001
322
323 V850_NOTE_MMU_INFO = 6
324#define EF_RH850_MMU 0x0001
325};
326
327#define NUM_V850_NOTES V850_NOTE_MMU_INFO
328
252b5132 329#endif /* _ELF_V850_H */