2012-11-09 Nick Clifton <nickc@redhat.com>
[deliverable/binutils-gdb.git] / include / elf / v850.h
CommitLineData
252b5132 1/* V850 ELF support for BFD.
de863c74 2 Copyright 1997, 1998, 2000, 2002, 2003, 2004, 2007, 2008, 2010, 2012
c3aa17e9 3 Free Software Foundation, Inc.
252b5132
RH
4 Created by Michael Meissner, Cygnus Support <meissner@cygnus.com>
5
86aba9db 6 This file is part of BFD, the Binary File Descriptor library.
252b5132 7
86aba9db
NC
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
e4e42b45 10 the Free Software Foundation; either version 3 of the License, or
86aba9db 11 (at your option) any later version.
252b5132 12
86aba9db
NC
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
252b5132 17
86aba9db
NC
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
e4e42b45
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
252b5132
RH
22
23/* This file holds definitions specific to the MIPS ELF ABI. Note
24 that most of this is not actually implemented by BFD. */
25
26#ifndef _ELF_V850_H
27#define _ELF_V850_H
28
29/* Processor specific flags for the ELF header e_flags field. */
30
31/* Four bit V850 architecture field. */
32#define EF_V850_ARCH 0xf0000000
33
34/* v850 code. */
35#define E_V850_ARCH 0x00000000
36
37/* v850e code. */
38#define E_V850E_ARCH 0x10000000
39
8ad30312
NC
40/* v850e1 code. */
41#define E_V850E1_ARCH 0x20000000
42
1cd986c5
NC
43/* v850e2 code. */
44#define E_V850E2_ARCH 0x30000000
45
46/* v850e2v3 code. */
47#define E_V850E2V3_ARCH 0x40000000
252b5132 48
86aba9db 49/* Flags for the st_other field. */
d4c87fc1
AM
50#define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */
51#define V850_OTHER_ZDA 0x20 /* Symbol had ZDA relocations. */
52#define V850_OTHER_TDA 0x40 /* Symbol had TDA relocations. */
86aba9db 53#define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */
252b5132 54
86aba9db 55/* V850 relocations. */
252b5132
RH
56#include "elf/reloc-macros.h"
57
58START_RELOC_NUMBERS (v850_reloc_type)
59 RELOC_NUMBER (R_V850_NONE, 0)
60 RELOC_NUMBER (R_V850_9_PCREL, 1)
61 RELOC_NUMBER (R_V850_22_PCREL, 2)
62 RELOC_NUMBER (R_V850_HI16_S, 3)
63 RELOC_NUMBER (R_V850_HI16, 4)
64 RELOC_NUMBER (R_V850_LO16, 5)
e30ddb24 65 RELOC_NUMBER (R_V850_ABS32, 6)
252b5132
RH
66 RELOC_NUMBER (R_V850_16, 7)
67 RELOC_NUMBER (R_V850_8, 8)
68 RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
69 RELOC_NUMBER( R_V850_SDA_15_16_OFFSET, 10) /* For ld.w, ld.h, ld.hu, st.w, st.h */
70 RELOC_NUMBER( R_V850_ZDA_16_16_OFFSET, 11) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
71 RELOC_NUMBER( R_V850_ZDA_15_16_OFFSET, 12) /* For ld.w, ld.h, ld.hu, st.w, st.h */
72 RELOC_NUMBER( R_V850_TDA_6_8_OFFSET, 13) /* For sst.w, sld.w */
73 RELOC_NUMBER( R_V850_TDA_7_8_OFFSET, 14) /* For sst.h, sld.h */
74 RELOC_NUMBER( R_V850_TDA_7_7_OFFSET, 15) /* For sst.b, sld.b */
75 RELOC_NUMBER( R_V850_TDA_16_16_OFFSET, 16) /* For set1, clr1, not1, tst1, movea, movhi */
252b5132
RH
76 RELOC_NUMBER( R_V850_TDA_4_5_OFFSET, 17) /* For sld.hu */
77 RELOC_NUMBER( R_V850_TDA_4_4_OFFSET, 18) /* For sld.bu */
78 RELOC_NUMBER( R_V850_SDA_16_16_SPLIT_OFFSET, 19) /* For ld.bu */
79 RELOC_NUMBER( R_V850_ZDA_16_16_SPLIT_OFFSET, 20) /* For ld.bu */
80 RELOC_NUMBER( R_V850_CALLT_6_7_OFFSET, 21) /* For callt */
81 RELOC_NUMBER( R_V850_CALLT_16_16_OFFSET, 22) /* For callt */
252b5132
RH
82 RELOC_NUMBER (R_V850_GNU_VTINHERIT, 23)
83 RELOC_NUMBER (R_V850_GNU_VTENTRY, 24)
86aba9db
NC
84 RELOC_NUMBER (R_V850_LONGCALL, 25)
85 RELOC_NUMBER (R_V850_LONGJUMP, 26)
86 RELOC_NUMBER (R_V850_ALIGN, 27)
e30ddb24 87 RELOC_NUMBER (R_V850_REL32, 28)
1e50d24d 88 RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */
1cd986c5
NC
89 RELOC_NUMBER (R_V850_16_PCREL, 30) /* For loop */
90 RELOC_NUMBER (R_V850_17_PCREL, 31) /* For br */
91 RELOC_NUMBER (R_V850_23, 32) /* For 23bit ld.[w,h,hu,b,bu],st.[w,h,b] */
92 RELOC_NUMBER (R_V850_32_PCREL, 33) /* For jr32, jarl32 */
93 RELOC_NUMBER (R_V850_32_ABS, 34) /* For jmp32 */
94 RELOC_NUMBER (R_V850_16_SPLIT_OFFSET, 35) /* For ld.bu */
95 RELOC_NUMBER (R_V850_16_S1, 36) /* For ld.w, ld.h st.w st.h */
96 RELOC_NUMBER (R_V850_LO16_S1, 37) /* For ld.w, ld.h st.w st.h */
97 RELOC_NUMBER (R_V850_CALLT_15_16_OFFSET, 38) /* For ld.w, ld.h, ld.hu, st.w, st.h */
98 RELOC_NUMBER (R_V850_32_GOTPCREL, 39) /* GLOBAL_OFFSET_TABLE from pc */
99 RELOC_NUMBER (R_V850_16_GOT, 40) /* GOT ENTRY from gp */
100 RELOC_NUMBER (R_V850_32_GOT, 41)
101 RELOC_NUMBER (R_V850_22_PLT, 42) /* For jr */
102 RELOC_NUMBER (R_V850_32_PLT, 43) /* For jr32 */
103 RELOC_NUMBER (R_V850_COPY, 44)
104 RELOC_NUMBER (R_V850_GLOB_DAT, 45)
105 RELOC_NUMBER (R_V850_JMP_SLOT, 46)
106 RELOC_NUMBER (R_V850_RELATIVE, 47)
107 RELOC_NUMBER (R_V850_16_GOTOFF, 48) /* From gp */
108 RELOC_NUMBER (R_V850_32_GOTOFF, 49)
109 RELOC_NUMBER (R_V850_CODE, 50)
110 RELOC_NUMBER (R_V850_DATA, 51) /* For loop */
111
1b452ec6 112END_RELOC_NUMBERS (R_V850_max)
252b5132
RH
113
114\f
115/* Processor specific section indices. These sections do not actually
116 exist. Symbols with a st_shndx field corresponding to one of these
117 values have a special meaning. */
118
119/* Small data area common symbol. */
1bce5d2c 120#define SHN_V850_SCOMMON SHN_LORESERVE
252b5132
RH
121
122/* Tiny data area common symbol. */
1bce5d2c 123#define SHN_V850_TCOMMON (SHN_LORESERVE + 1)
252b5132
RH
124
125/* Zero data area common symbol. */
1bce5d2c 126#define SHN_V850_ZCOMMON (SHN_LORESERVE + 2)
252b5132
RH
127
128\f
129/* Processor specific section types. */
130
131/* Section contains the .scommon data. */
132#define SHT_V850_SCOMMON 0x70000000
133
134/* Section contains the .scommon data. */
135#define SHT_V850_TCOMMON 0x70000001
136
137/* Section contains the .scommon data. */
138#define SHT_V850_ZCOMMON 0x70000002
139
2f89ff8d
L
140/* Processor specific section flags. */
141
142/* This section must be in the small data area (pointed to by GP). */
143#define SHF_V850_GPREL 0x10000000
144
145/* This section must be in the tiny data area (pointed to by EP). */
146#define SHF_V850_EPREL 0x20000000
147
148/* This section must be in the zero data area (pointed to by R0). */
149#define SHF_V850_R0REL 0x40000000
150
de863c74
NC
151/* Alternative versions of the above definitions, as specified by the RH850 ABI. */
152
153#define EF_RH850_ABI 0xF0000000
154
155#define EF_V800_850E3 0x00100000
156
157#define EF_RH850_FPU_DOUBLE 0x00000001 /* sizeof(double) == 8. */
158#define EF_RH850_FPU_SINGLE 0x00000002 /* sizeof(double) == 4. */
159#define EF_RH850_SIMD 0x00000004
160#define EF_RH850_CACHE 0x00000008
161#define EF_RH850_MMU 0x00000010
162#define EF_RH850_REGMODE22 0x00000020 /* Registers r15-r24 (inclusive) are not used. */
163#define EF_RH850_REGMODE32 0x00000040
164#define EF_RH850_DATA_ALIGN8 0x00000080 /* 8-byte alignment supported. */
165#define EF_RH850_GP_FIX 0x00000100 /* r4 is fixed. */
166#define EF_RH850_GP_NOFIX 0x00000200 /* r4 is callee save. */
167#define EF_RH850_EP_FIX 0x00000400 /* r30 is fixed. */
168#define EF_RH850_EP_NOFIX 0x00000800 /* r30 is callee save. */
169#define EF_RH850_TP_FIX 0x00001000 /* r5 is fixed. */
170#define EF_RH850_TP_NOFIX 0x00002000 /* r5 is callee save. */
171#define EF_RH850_REG2_RESERVE 0x00004000 /* r2 is fixed. */
172#define EF_RH850_REG2_NORESERVE 0x00008000 /* r2 is callee saved. */
173
174#define SHT_RNESAS_IOP SHT_LOUSER /* Used by Renesas linker. */
175
176#define SHF_RENESAS_ABS 0x80000000 /* Absolute section. */
177#define SHF_GHS_ABS 0x00000400 /* Use unknown. */
178
179#define STT_RENESAS_ENTRY 14 /* Set for functions called at reset time. */
180
181START_RELOC_NUMBERS (v800_reloc_type)
182
183 RELOC_NUMBER (R_V800_NONE, 0x00)
184 RELOC_NUMBER (R_V810_NONE, 0x30)
185 RELOC_NUMBER (R_V810_BYTE, 0x31)
186 RELOC_NUMBER (R_V810_HWORD, 0x32)
187 RELOC_NUMBER (R_V810_WORD, 0x33)
188 RELOC_NUMBER (R_V810_WLO, 0x34)
189 RELOC_NUMBER (R_V810_WHI, 0x35)
190 RELOC_NUMBER (R_V810_WHI1, 0x36)
191 RELOC_NUMBER (R_V810_GPBYTE, 0x37)
192 RELOC_NUMBER (R_V810_GPHWORD, 0x38)
193 RELOC_NUMBER (R_V810_GPWORD, 0x39)
194 RELOC_NUMBER (R_V810_GPWLO, 0x3a)
195 RELOC_NUMBER (R_V810_GPWHI, 0x3b)
196 RELOC_NUMBER (R_V810_GPWHI1, 0x3c)
197 RELOC_NUMBER (R_V850_HWLO, 0x3d)
198 FAKE_RELOC (R_V810_reserved1, 0x3e)
199 RELOC_NUMBER (R_V850_EP7BIT, 0x3f)
200 RELOC_NUMBER (R_V850_EPHBYTE, 0x40)
201 RELOC_NUMBER (R_V850_EPWBYTE, 0x41)
202 RELOC_NUMBER (R_V850_REGHWLO, 0x42)
203 FAKE_RELOC (R_V810_reserved2, 0x43)
204 RELOC_NUMBER (R_V850_GPHWLO, 0x44)
205 FAKE_RELOC (R_V810_reserved3, 0x45)
206 RELOC_NUMBER (R_V850_PCR22, 0x46)
207 RELOC_NUMBER (R_V850_BLO, 0x47)
208 RELOC_NUMBER (R_V850_EP4BIT, 0x48)
209 RELOC_NUMBER (R_V850_EP5BIT, 0x49)
210 RELOC_NUMBER (R_V850_REGBLO, 0x4a)
211 RELOC_NUMBER (R_V850_GPBLO, 0x4b)
212 RELOC_NUMBER (R_V810_WLO_1, 0x4c)
213 RELOC_NUMBER (R_V810_GPWLO_1, 0x4d)
214 RELOC_NUMBER (R_V850_BLO_1, 0x4e)
215 RELOC_NUMBER (R_V850_HWLO_1, 0x4f)
216 FAKE_RELOC (R_V810_reserved4, 0x50)
217 RELOC_NUMBER (R_V850_GPBLO_1, 0x51)
218 RELOC_NUMBER (R_V850_GPHWLO_1, 0x52)
219 FAKE_RELOC (R_V810_reserved5, 0x53)
220 RELOC_NUMBER (R_V850_EPBLO, 0x54)
221 RELOC_NUMBER (R_V850_EPHWLO, 0x55)
222 FAKE_RELOC (R_V810_reserved6, 0x56)
223 RELOC_NUMBER (R_V850_EPWLO_N, 0x57)
224 RELOC_NUMBER (R_V850_PC32, 0x58)
225 RELOC_NUMBER (R_V850_W23BIT, 0x59)
226 RELOC_NUMBER (R_V850_GPW23BIT, 0x5a)
227 RELOC_NUMBER (R_V850_EPW23BIT, 0x5b)
228 RELOC_NUMBER (R_V850_B23BIT, 0x5c)
229 RELOC_NUMBER (R_V850_GPB23BIT, 0x5d)
230 RELOC_NUMBER (R_V850_EPB23BIT, 0x5e)
231 RELOC_NUMBER (R_V850_PC16U, 0x5f)
232 RELOC_NUMBER (R_V850_PC17, 0x60)
233 RELOC_NUMBER (R_V850_DW8, 0x61)
234 RELOC_NUMBER (R_V850_GPDW8, 0x62)
235 RELOC_NUMBER (R_V850_EPDW8, 0x63)
236 RELOC_NUMBER (R_V850_PC9, 0x64)
237 RELOC_NUMBER (R_V810_REGBYTE, 0x65)
238 RELOC_NUMBER (R_V810_REGHWORD, 0x66)
239 RELOC_NUMBER (R_V810_REGWORD, 0x67)
240 RELOC_NUMBER (R_V810_REGWLO, 0x68)
241 RELOC_NUMBER (R_V810_REGWHI, 0x69)
242 RELOC_NUMBER (R_V810_REGWHI1, 0x6a)
243 RELOC_NUMBER (R_V850_REGW23BIT, 0x6b)
244 RELOC_NUMBER (R_V850_REGB23BIT, 0x6c)
245 RELOC_NUMBER (R_V850_REGDW8, 0x6d)
246 RELOC_NUMBER (R_V810_EPBYTE, 0x6e)
247 RELOC_NUMBER (R_V810_EPHWORD, 0x6f)
248 RELOC_NUMBER (R_V810_EPWORD, 0x70)
249 RELOC_NUMBER (R_V850_WLO23, 0x71)
250 RELOC_NUMBER (R_V850_WORD_E, 0x72)
251 RELOC_NUMBER (R_V850_REGWORD_E, 0x73)
252 RELOC_NUMBER (R_V850_WORD, 0x74)
253 RELOC_NUMBER (R_V850_GPWORD, 0x75)
254 RELOC_NUMBER (R_V850_REGWORD, 0x76)
255 RELOC_NUMBER (R_V850_EPWORD, 0x77)
256 RELOC_NUMBER (R_V810_TPBYTE, 0x78)
257 RELOC_NUMBER (R_V810_TPHWORD, 0x79)
258 RELOC_NUMBER (R_V810_TPWORD, 0x7a)
259 RELOC_NUMBER (R_V810_TPWLO, 0x7b)
260 RELOC_NUMBER (R_V810_TPWHI, 0x7c)
261 RELOC_NUMBER (R_V810_TPWHI1, 0x7d)
262 RELOC_NUMBER (R_V850_TPHWLO, 0x7e)
263 RELOC_NUMBER (R_V850_TPBLO, 0x7f)
264 RELOC_NUMBER (R_V810_TPWLO_1, 0x80)
265 RELOC_NUMBER (R_V850_TPBLO_1, 0x81)
266 RELOC_NUMBER (R_V850_TPHWLO_1, 0x82)
267 RELOC_NUMBER (R_V850_TP23BIT, 0x83)
268 RELOC_NUMBER (R_V850_TPW23BIT, 0x84)
269 RELOC_NUMBER (R_V850_TPDW8, 0x85)
270
271/* These are defined by the RH850 ABI, but not used. */
272 RELOC_NUMBER (R_V810_ABS32, 0xa0)
273 RELOC_NUMBER (R_V850_SYM, 0xe0)
274 RELOC_NUMBER (R_V850_OPadd, 0xe1)
275 RELOC_NUMBER (R_V850_OPsub, 0xe2)
276 RELOC_NUMBER (R_V850_OPsctsize, 0xe3)
277 RELOC_NUMBER (R_V850_OPscttop, 0xe4)
278
279END_RELOC_NUMBERS (R_V800_max)
280
252b5132 281#endif /* _ELF_V850_H */
This page took 0.510988 seconds and 4 git commands to generate.