* symbols.c (report_op_error): Remove unnecessary forward declaration.
[deliverable/binutils-gdb.git] / include / elf / arm.h
CommitLineData
252b5132 1/* ARM ELF support for BFD.
e4e42b45 2 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
c3aa17e9 3 Free Software Foundation, Inc.
252b5132
RH
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
e4e42b45 9 the Free Software Foundation; either version 3 of the License, or
252b5132
RH
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 Foundation,
e172dbf8 19 Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
252b5132
RH
20
21#ifndef _ELF_ARM_H
22#define _ELF_ARM_H
23
24#include "elf/reloc-macros.h"
25
26/* Processor specific flags for the ELF header e_flags field. */
27#define EF_ARM_RELEXEC 0x01
28#define EF_ARM_HASENTRY 0x02
2a7a4624
PB
29#define EF_ARM_INTERWORK 0x04
30#define EF_ARM_APCS_26 0x08
31#define EF_ARM_APCS_FLOAT 0x10
32#define EF_ARM_PIC 0x20
33#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use. */
34#define EF_ARM_NEW_ABI 0x80
35#define EF_ARM_OLD_ABI 0x100
36#define EF_ARM_SOFT_FLOAT 0x200
ca4ebd1e 37#define EF_ARM_VFP_FLOAT 0x400
fde78edd 38#define EF_ARM_MAVERICK_FLOAT 0x800
2a7a4624 39
b294bdf8 40/* Frame unwind information */
c19d1205 41#define PT_ARM_EXIDX (PT_LOPROC + 1)
b294bdf8 42
2a7a4624 43/* Other constants defined in the ARM ELF spec. version B-01. */
7f6fed87
NC
44#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK. */
45#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26. */
46#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT. */
ff1c4e0d
NC
47#define EF_ARM_EABIMASK 0xFF000000
48
d507cf36
PB
49/* Constants defined in AAELF. */
50#define EF_ARM_BE8 0x00800000
51#define EF_ARM_LE8 0x00400000
52
ff1c4e0d
NC
53#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
54#define EF_ARM_EABI_UNKNOWN 0x00000000
55#define EF_ARM_EABI_VER1 0x01000000
2a7a4624 56#define EF_ARM_EABI_VER2 0x02000000
d507cf36 57#define EF_ARM_EABI_VER3 0x03000000
8cb51566 58#define EF_ARM_EABI_VER4 0x04000000
3a4a14e9 59#define EF_ARM_EABI_VER5 0x05000000
ff1c4e0d 60
252b5132 61/* Local aliases for some flags to match names used by COFF port. */
2a7a4624
PB
62#define F_INTERWORK EF_ARM_INTERWORK
63#define F_APCS26 EF_ARM_APCS_26
64#define F_APCS_FLOAT EF_ARM_APCS_FLOAT
65#define F_PIC EF_ARM_PIC
66#define F_SOFT_FLOAT EF_ARM_SOFT_FLOAT
ca4ebd1e 67#define F_VFP_FLOAT EF_ARM_VFP_FLOAT
252b5132 68
2f0ca46a
NC
69/* Additional symbol types for Thumb. */
70#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
71#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
252b5132 72
40a18ebd 73/* Additional section types. */
7f6fed87
NC
74#define SHT_ARM_EXIDX 0x70000001 /* Section holds ARM unwind info. */
75#define SHT_ARM_PREEMPTMAP 0x70000002 /* Section pre-emption details. */
76#define SHT_ARM_ATTRIBUTES 0x70000003 /* Section holds attributes. */
77#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* Section holds overlay debug info. */
78#define SHT_ARM_OVERLAYSECTION 0x70000005 /* Section holds GDB and overlay integration info. */
40a18ebd 79
2f0ca46a
NC
80/* ARM-specific values for sh_flags. */
81#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */
82#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */
252b5132 83
2f0ca46a
NC
84/* ARM-specific program header flags. */
85#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */
ff1c4e0d
NC
86#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */
87#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */
252b5132 88
e95de063 89/* Values for the Tag_CPU_arch EABI attribute. */
91e22acd
AS
90#define TAG_CPU_ARCH_PRE_V4 0
91#define TAG_CPU_ARCH_V4 1
92#define TAG_CPU_ARCH_V4T 2
93#define TAG_CPU_ARCH_V5T 3
94#define TAG_CPU_ARCH_V5TE 4
95#define TAG_CPU_ARCH_V5TEJ 5
96#define TAG_CPU_ARCH_V6 6
97#define TAG_CPU_ARCH_V6KZ 7
98#define TAG_CPU_ARCH_V6T2 8
99#define TAG_CPU_ARCH_V6K 9
100#define TAG_CPU_ARCH_V7 10
101#define TAG_CPU_ARCH_V6_M 11
102#define TAG_CPU_ARCH_V6S_M 12
9e3c6df6
PB
103#define TAG_CPU_ARCH_V7E_M 13
104#define MAX_TAG_CPU_ARCH 13
91e22acd
AS
105/* Pseudo-architecture to allow objects to be compatible with the subset of
106 armv4t and armv6-m. This value should never be stored in object files. */
107#define TAG_CPU_ARCH_V4T_PLUS_V6_M (MAX_TAG_CPU_ARCH + 1)
e95de063 108
252b5132 109/* Relocation types. */
8725b940 110
252b5132 111START_RELOC_NUMBERS (elf_arm_reloc_type)
c19d1205
ZW
112/* AAELF official names and numbers. */
113 RELOC_NUMBER (R_ARM_NONE, 0)
114 RELOC_NUMBER (R_ARM_PC24, 1) /* deprecated */
115 RELOC_NUMBER (R_ARM_ABS32, 2)
116 RELOC_NUMBER (R_ARM_REL32, 3)
c19d1205
ZW
117 RELOC_NUMBER (R_ARM_LDR_PC_G0, 4)
118 RELOC_NUMBER (R_ARM_ABS16, 5)
119 RELOC_NUMBER (R_ARM_ABS12, 6)
120 RELOC_NUMBER (R_ARM_THM_ABS5, 7)
121 RELOC_NUMBER (R_ARM_ABS8, 8)
122 RELOC_NUMBER (R_ARM_SBREL32, 9)
123 RELOC_NUMBER (R_ARM_THM_CALL, 10)
124 RELOC_NUMBER (R_ARM_THM_PC8, 11)
125 RELOC_NUMBER (R_ARM_BREL_ADJ, 12)
0855e32b 126 RELOC_NUMBER (R_ARM_TLS_DESC, 13)
c19d1205 127 RELOC_NUMBER (R_ARM_THM_SWI8, 14) /* obsolete */
c19d1205
ZW
128 RELOC_NUMBER (R_ARM_XPC25, 15) /* obsolete */
129 RELOC_NUMBER (R_ARM_THM_XPC22, 16) /* obsolete */
130 RELOC_NUMBER (R_ARM_TLS_DTPMOD32, 17)
131 RELOC_NUMBER (R_ARM_TLS_DTPOFF32, 18)
132 RELOC_NUMBER (R_ARM_TLS_TPOFF32, 19)
133 RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */
134 RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */
135 RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */
136 RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */
137 RELOC_NUMBER (R_ARM_GOTOFF32, 24) /* 32 bit offset to GOT. */
138 RELOC_NUMBER (R_ARM_BASE_PREL, 25) /* 32 bit PC relative offset to GOT. */
139 RELOC_NUMBER (R_ARM_GOT_BREL, 26) /* 32 bit GOT entry. */
140 RELOC_NUMBER (R_ARM_PLT32, 27) /* deprecated - 32 bit PLT address. */
141 RELOC_NUMBER (R_ARM_CALL, 28)
142 RELOC_NUMBER (R_ARM_JUMP24, 29)
143 RELOC_NUMBER (R_ARM_THM_JUMP24, 30)
144 RELOC_NUMBER (R_ARM_BASE_ABS, 31)
145 RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32) /* obsolete */
146 RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33) /* obsolete */
147 RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34) /* obsolete */
148 RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35) /* deprecated, should have _NC suffix */
149 RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36) /* deprecated, should have _NC suffix */
150 RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37) /* deprecated, should have _CK suffix */
151 RELOC_NUMBER (R_ARM_TARGET1, 38)
152 RELOC_NUMBER (R_ARM_SBREL31, 39) /* deprecated */
153 RELOC_NUMBER (R_ARM_V4BX, 40)
154 RELOC_NUMBER (R_ARM_TARGET2, 41)
155 RELOC_NUMBER (R_ARM_PREL31, 42)
156 RELOC_NUMBER (R_ARM_MOVW_ABS_NC, 43)
157 RELOC_NUMBER (R_ARM_MOVT_ABS, 44)
158 RELOC_NUMBER (R_ARM_MOVW_PREL_NC, 45)
159 RELOC_NUMBER (R_ARM_MOVT_PREL, 46)
160 RELOC_NUMBER (R_ARM_THM_MOVW_ABS_NC, 47)
161 RELOC_NUMBER (R_ARM_THM_MOVT_ABS, 48)
162 RELOC_NUMBER (R_ARM_THM_MOVW_PREL_NC, 49)
163 RELOC_NUMBER (R_ARM_THM_MOVT_PREL, 50)
164 RELOC_NUMBER (R_ARM_THM_JUMP19, 51)
165 RELOC_NUMBER (R_ARM_THM_JUMP6, 52)
166 RELOC_NUMBER (R_ARM_THM_ALU_PREL_11_0, 53)
167 RELOC_NUMBER (R_ARM_THM_PC12, 54)
168 RELOC_NUMBER (R_ARM_ABS32_NOI, 55)
169 RELOC_NUMBER (R_ARM_REL32_NOI, 56)
170 RELOC_NUMBER (R_ARM_ALU_PC_G0_NC, 57)
171 RELOC_NUMBER (R_ARM_ALU_PC_G0, 58)
172 RELOC_NUMBER (R_ARM_ALU_PC_G1_NC, 59)
173 RELOC_NUMBER (R_ARM_ALU_PC_G1, 60)
174 RELOC_NUMBER (R_ARM_ALU_PC_G2, 61)
175 RELOC_NUMBER (R_ARM_LDR_PC_G1, 62)
176 RELOC_NUMBER (R_ARM_LDR_PC_G2, 63)
177 RELOC_NUMBER (R_ARM_LDRS_PC_G0, 64)
178 RELOC_NUMBER (R_ARM_LDRS_PC_G1, 65)
179 RELOC_NUMBER (R_ARM_LDRS_PC_G2, 66)
180 RELOC_NUMBER (R_ARM_LDC_PC_G0, 67)
181 RELOC_NUMBER (R_ARM_LDC_PC_G1, 68)
182 RELOC_NUMBER (R_ARM_LDC_PC_G2, 69)
183 RELOC_NUMBER (R_ARM_ALU_SB_G0_NC, 70)
184 RELOC_NUMBER (R_ARM_ALU_SB_G0, 71)
185 RELOC_NUMBER (R_ARM_ALU_SB_G1_NC, 72)
186 RELOC_NUMBER (R_ARM_ALU_SB_G1, 73)
187 RELOC_NUMBER (R_ARM_ALU_SB_G2, 74)
188 RELOC_NUMBER (R_ARM_LDR_SB_G0, 75)
189 RELOC_NUMBER (R_ARM_LDR_SB_G1, 76)
190 RELOC_NUMBER (R_ARM_LDR_SB_G2, 77)
191 RELOC_NUMBER (R_ARM_LDRS_SB_G0, 78)
192 RELOC_NUMBER (R_ARM_LDRS_SB_G1, 79)
193 RELOC_NUMBER (R_ARM_LDRS_SB_G2, 80)
4962c51a
MS
194 RELOC_NUMBER (R_ARM_LDC_SB_G0, 81)
195 RELOC_NUMBER (R_ARM_LDC_SB_G1, 82)
196 RELOC_NUMBER (R_ARM_LDC_SB_G2, 83)
c19d1205
ZW
197 RELOC_NUMBER (R_ARM_MOVW_BREL_NC, 84)
198 RELOC_NUMBER (R_ARM_MOVT_BREL, 85)
199 RELOC_NUMBER (R_ARM_MOVW_BREL, 86)
200 RELOC_NUMBER (R_ARM_THM_MOVW_BREL_NC, 87)
201 RELOC_NUMBER (R_ARM_THM_MOVT_BREL, 88)
202 RELOC_NUMBER (R_ARM_THM_MOVW_BREL, 89)
0855e32b
NS
203 RELOC_NUMBER (R_ARM_TLS_GOTDESC, 90)
204 RELOC_NUMBER (R_ARM_TLS_CALL, 91)
205 RELOC_NUMBER (R_ARM_TLS_DESCSEQ, 92)
206 RELOC_NUMBER (R_ARM_THM_TLS_CALL, 93)
c19d1205
ZW
207 RELOC_NUMBER (R_ARM_PLT32_ABS, 94)
208 RELOC_NUMBER (R_ARM_GOT_ABS, 95)
209 RELOC_NUMBER (R_ARM_GOT_PREL, 96)
210 RELOC_NUMBER (R_ARM_GOT_BREL12, 97)
211 RELOC_NUMBER (R_ARM_GOTOFF12, 98)
212 RELOC_NUMBER (R_ARM_GOTRELAX, 99)
c19d1205
ZW
213 RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100) /* deprecated - old C++ abi */
214 RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101) /* deprecated - old C++ abi */
215 RELOC_NUMBER (R_ARM_THM_JUMP11, 102)
216 RELOC_NUMBER (R_ARM_THM_JUMP8, 103)
c19d1205
ZW
217 RELOC_NUMBER (R_ARM_TLS_GD32, 104)
218 RELOC_NUMBER (R_ARM_TLS_LDM32, 105)
219 RELOC_NUMBER (R_ARM_TLS_LDO32, 106)
220 RELOC_NUMBER (R_ARM_TLS_IE32, 107)
221 RELOC_NUMBER (R_ARM_TLS_LE32, 108)
222 RELOC_NUMBER (R_ARM_TLS_LDO12, 109)
223 RELOC_NUMBER (R_ARM_TLS_LE12, 110)
224 RELOC_NUMBER (R_ARM_TLS_IE12GP, 111)
225 /* 112 - 127 private range */
226 RELOC_NUMBER (R_ARM_ME_TOO, 128) /* obsolete */
0855e32b 227 RELOC_NUMBER (R_ARM_THM_TLS_DESCSEQ ,129)
c19d1205
ZW
228
229 /* Extensions? R=read-only? */
230 RELOC_NUMBER (R_ARM_RXPC25, 249)
231 RELOC_NUMBER (R_ARM_RSBREL32, 250)
232 RELOC_NUMBER (R_ARM_THM_RPC22, 251)
233 RELOC_NUMBER (R_ARM_RREL32, 252)
234 RELOC_NUMBER (R_ARM_RABS32, 253)
235 RELOC_NUMBER (R_ARM_RPC24, 254)
236 RELOC_NUMBER (R_ARM_RBASE, 255)
237
238 /* Unofficial names for some of the relocs. */
239 FAKE_RELOC (R_ARM_GOTOFF, R_ARM_GOTOFF32) /* 32 bit offset to GOT. */
240 FAKE_RELOC (R_ARM_THM_PC22, R_ARM_THM_CALL)
241 FAKE_RELOC (R_ARM_THM_PC11, R_ARM_THM_JUMP11)
242 FAKE_RELOC (R_ARM_THM_PC9, R_ARM_THM_JUMP8)
243
244 /* Relocs with both a different name, and (apparently) different meaning in
245 GNU usage. */
246 FAKE_RELOC (R_ARM_GOTPC, R_ARM_BASE_PREL) /* 32 bit PC relative offset to GOT. */
247 FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
248 FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
249 FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
7c90103b
NC
250
251END_RELOC_NUMBERS (R_ARM_max = 256)
252b5132 252
ee065d83 253#ifdef BFD_ARCH_SIZE
104d59d1 254/* EABI object attributes. */
ee065d83
PB
255
256enum
257{
104d59d1
JM
258 /* 0-3 are generic. */
259 Tag_CPU_raw_name = 4,
ee065d83
PB
260 Tag_CPU_name,
261 Tag_CPU_arch,
262 Tag_CPU_arch_profile,
263 Tag_ARM_ISA_use,
264 Tag_THUMB_ISA_use,
75375b3e 265 Tag_FP_arch,
ee065d83 266 Tag_WMMX_arch,
91e22acd 267 Tag_Advanced_SIMD_arch,
ee065d83
PB
268 Tag_PCS_config,
269 Tag_ABI_PCS_R9_use,
270 Tag_ABI_PCS_RW_data,
271 Tag_ABI_PCS_RO_data,
272 Tag_ABI_PCS_GOT_use,
273 Tag_ABI_PCS_wchar_t,
274 Tag_ABI_FP_rounding,
275 Tag_ABI_FP_denormal,
276 Tag_ABI_FP_exceptions,
277 Tag_ABI_FP_user_exceptions,
278 Tag_ABI_FP_number_model,
75375b3e
MGD
279 Tag_ABI_align_needed,
280 Tag_ABI_align_preserved,
ee065d83
PB
281 Tag_ABI_enum_size,
282 Tag_ABI_HardFP_use,
283 Tag_ABI_VFP_args,
284 Tag_ABI_WMMX_args,
285 Tag_ABI_optimization_goals,
286 Tag_ABI_FP_optimization_goals,
91e22acd 287 /* 32 is generic (Tag_compatibility). */
8e79c3df
CM
288 Tag_undefined33 = 33,
289 Tag_CPU_unaligned_access,
91e22acd 290 Tag_undefined35,
75375b3e 291 Tag_FP_HP_extension,
8e79c3df 292 Tag_undefined37,
91e22acd
AS
293 Tag_ABI_FP_16bit_format,
294 Tag_undefined39,
cd21e546
MGD
295 Tag_undefined40,
296 Tag_undefined41,
297 Tag_MPextension_use,
298 Tag_undefined_43,
299 Tag_DIV_use,
91e22acd
AS
300 Tag_nodefaults = 64,
301 Tag_also_compatible_with,
302 Tag_T2EE_use,
303 Tag_conformance,
304 Tag_Virtualization_use,
305 Tag_undefined69,
75375b3e
MGD
306 Tag_MPextension_use_legacy,
307
308 /* The following tags are legacy names for other tags. */
309 Tag_VFP_arch = Tag_FP_arch,
310 Tag_ABI_align8_needed = Tag_ABI_align_needed,
311 Tag_ABI_align8_preserved = Tag_ABI_align_preserved,
312 Tag_VFP_HP_extension = Tag_FP_HP_extension
ee065d83
PB
313};
314
315#endif
316
e16bb312 317/* The name of the note section used to identify arm variants. */
5a6c6817 318#define ARM_NOTE_SECTION ".note.gnu.arm.ident"
40a18ebd
NC
319
320/* Special section names. */
321#define ELF_STRING_ARM_unwind ".ARM.exidx"
322#define ELF_STRING_ARM_unwind_info ".ARM.extab"
323#define ELF_STRING_ARM_unwind_once ".gnu.linkonce.armexidx."
324#define ELF_STRING_ARM_unwind_info_once ".gnu.linkonce.armextab."
325
8725b940 326#endif /* _ELF_ARM_H */
This page took 0.445287 seconds and 4 git commands to generate.