source: branches/libc-0.6/src/binutils/include/elf/arm.h

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 6.3 KB
Line 
1/* ARM ELF support for BFD.
2 Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20#ifndef _ELF_ARM_H
21#define _ELF_ARM_H
22
23#include "elf/reloc-macros.h"
24
25/* Processor specific flags for the ELF header e_flags field. */
26#define EF_ARM_RELEXEC 0x01
27#define EF_ARM_HASENTRY 0x02
28#define EF_ARM_INTERWORK 0x04
29#define EF_ARM_APCS_26 0x08
30#define EF_ARM_APCS_FLOAT 0x10
31#define EF_ARM_PIC 0x20
32#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use. */
33#define EF_ARM_NEW_ABI 0x80
34#define EF_ARM_OLD_ABI 0x100
35#define EF_ARM_SOFT_FLOAT 0x200
36#define EF_ARM_VFP_FLOAT 0x400
37#define EF_ARM_MAVERICK_FLOAT 0x800
38
39/* Other constants defined in the ARM ELF spec. version B-01. */
40#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK */
41#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26 */
42#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT */
43#define EF_ARM_EABIMASK 0xFF000000
44
45#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
46#define EF_ARM_EABI_UNKNOWN 0x00000000
47#define EF_ARM_EABI_VER1 0x01000000
48#define EF_ARM_EABI_VER2 0x02000000
49
50/* Local aliases for some flags to match names used by COFF port. */
51#define F_INTERWORK EF_ARM_INTERWORK
52#define F_APCS26 EF_ARM_APCS_26
53#define F_APCS_FLOAT EF_ARM_APCS_FLOAT
54#define F_PIC EF_ARM_PIC
55#define F_SOFT_FLOAT EF_ARM_SOFT_FLOAT
56#define F_VFP_FLOAT EF_ARM_VFP_FLOAT
57
58/* Additional symbol types for Thumb. */
59#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
60#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
61
62/* ARM-specific values for sh_flags. */
63#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */
64#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */
65
66/* ARM-specific program header flags. */
67#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */
68#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */
69#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */
70
71/* Relocation types. */
72
73START_RELOC_NUMBERS (elf_arm_reloc_type)
74 RELOC_NUMBER (R_ARM_NONE, 0)
75 RELOC_NUMBER (R_ARM_PC24, 1)
76 RELOC_NUMBER (R_ARM_ABS32, 2)
77 RELOC_NUMBER (R_ARM_REL32, 3)
78#ifdef OLD_ARM_ABI
79 RELOC_NUMBER (R_ARM_ABS8, 4)
80 RELOC_NUMBER (R_ARM_ABS16, 5)
81 RELOC_NUMBER (R_ARM_ABS12, 6)
82 RELOC_NUMBER (R_ARM_THM_ABS5, 7)
83 RELOC_NUMBER (R_ARM_THM_PC22, 8)
84 RELOC_NUMBER (R_ARM_SBREL32, 9)
85 RELOC_NUMBER (R_ARM_AMP_VCALL9, 10)
86 RELOC_NUMBER (R_ARM_THM_PC11, 11) /* Cygnus extension to abi: Thumb unconditional branch. */
87 RELOC_NUMBER (R_ARM_THM_PC9, 12) /* Cygnus extension to abi: Thumb conditional branch. */
88 RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 13)
89 RELOC_NUMBER (R_ARM_GNU_VTENTRY, 14)
90#else /* not OLD_ARM_ABI */
91 RELOC_NUMBER (R_ARM_PC13, 4)
92 RELOC_NUMBER (R_ARM_ABS16, 5)
93 RELOC_NUMBER (R_ARM_ABS12, 6)
94 RELOC_NUMBER (R_ARM_THM_ABS5, 7)
95 RELOC_NUMBER (R_ARM_ABS8, 8)
96 RELOC_NUMBER (R_ARM_SBREL32, 9)
97 RELOC_NUMBER (R_ARM_THM_PC22, 10)
98 RELOC_NUMBER (R_ARM_THM_PC8, 11)
99 RELOC_NUMBER (R_ARM_AMP_VCALL9, 12)
100 RELOC_NUMBER (R_ARM_SWI24, 13)
101 RELOC_NUMBER (R_ARM_THM_SWI8, 14)
102 RELOC_NUMBER (R_ARM_XPC25, 15)
103 RELOC_NUMBER (R_ARM_THM_XPC22, 16)
104#endif /* not OLD_ARM_ABI */
105 RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */
106 RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */
107 RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */
108 RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */
109 RELOC_NUMBER (R_ARM_GOTOFF, 24) /* 32 bit offset to GOT. */
110 RELOC_NUMBER (R_ARM_GOTPC, 25) /* 32 bit PC relative offset to GOT. */
111 RELOC_NUMBER (R_ARM_GOT32, 26) /* 32 bit GOT entry. */
112 RELOC_NUMBER (R_ARM_PLT32, 27) /* 32 bit PLT address. */
113#ifdef OLD_ARM_ABI
114 FAKE_RELOC (FIRST_INVALID_RELOC, 28)
115 FAKE_RELOC (LAST_INVALID_RELOC, 249)
116#else /* not OLD_ARM_ABI */
117 FAKE_RELOC (FIRST_INVALID_RELOC1, 28)
118 FAKE_RELOC (LAST_INVALID_RELOC1, 31)
119 RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32)
120 RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33)
121 RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34)
122 RELOC_NUMBER (R_ARM_LDR_SBREL11_0, 35)
123 RELOC_NUMBER (R_ARM_ALU_SBREL19_12, 36)
124 RELOC_NUMBER (R_ARM_ALU_SBREL27_20, 37)
125 FAKE_RELOC (FIRST_INVALID_RELOC2, 38)
126 FAKE_RELOC (LAST_INVALID_RELOC2, 99)
127 RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100)
128 RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101)
129 RELOC_NUMBER (R_ARM_THM_PC11, 102) /* Cygnus extension to abi: Thumb unconditional branch. */
130 RELOC_NUMBER (R_ARM_THM_PC9, 103) /* Cygnus extension to abi: Thumb conditional branch. */
131 FAKE_RELOC (FIRST_INVALID_RELOC3, 104)
132 FAKE_RELOC (LAST_INVALID_RELOC3, 248)
133 RELOC_NUMBER (R_ARM_RXPC25, 249)
134#endif /* not OLD_ARM_ABI */
135 RELOC_NUMBER (R_ARM_RSBREL32, 250)
136 RELOC_NUMBER (R_ARM_THM_RPC22, 251)
137 RELOC_NUMBER (R_ARM_RREL32, 252)
138 RELOC_NUMBER (R_ARM_RABS32, 253)
139 RELOC_NUMBER (R_ARM_RPC24, 254)
140 RELOC_NUMBER (R_ARM_RBASE, 255)
141END_RELOC_NUMBERS (R_ARM_max)
142
143/* The name of the note section used to identify arm variants. */
144#define ARM_NOTE_SECTION ".note.gnu.arm.ident"
145
146#endif /* _ELF_ARM_H */
Note: See TracBrowser for help on using the repository browser.