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