]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - include/elf/ppc.h
Implement generic SHF_EXCLUDE.
[thirdparty/binutils-gdb.git] / include / elf / ppc.h
1 /* PPC ELF support for BFD.
2 Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2008,
3 2009, 2010 Free Software Foundation, Inc.
4
5 By Michael Meissner, Cygnus Support, <meissner@cygnus.com>,
6 from information in the System V Application Binary Interface,
7 PowerPC Processor Supplement and the PowerPC Embedded Application
8 Binary Interface (eabi).
9
10 This file is part of BFD, the Binary File Descriptor library.
11
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 3 of the License, or
15 (at your option) any later version.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
25 MA 02110-1301, USA. */
26
27 /* This file holds definitions specific to the PPC ELF ABI. Note
28 that most of this is not actually implemented by BFD. */
29
30 #ifndef _ELF_PPC_H
31 #define _ELF_PPC_H
32
33 #include "elf/reloc-macros.h"
34
35 /* Relocations. */
36 START_RELOC_NUMBERS (elf_ppc_reloc_type)
37 RELOC_NUMBER (R_PPC_NONE, 0)
38 RELOC_NUMBER (R_PPC_ADDR32, 1)
39 RELOC_NUMBER (R_PPC_ADDR24, 2)
40 RELOC_NUMBER (R_PPC_ADDR16, 3)
41 RELOC_NUMBER (R_PPC_ADDR16_LO, 4)
42 RELOC_NUMBER (R_PPC_ADDR16_HI, 5)
43 RELOC_NUMBER (R_PPC_ADDR16_HA, 6)
44 RELOC_NUMBER (R_PPC_ADDR14, 7)
45 RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8)
46 RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9)
47 RELOC_NUMBER (R_PPC_REL24, 10)
48 RELOC_NUMBER (R_PPC_REL14, 11)
49 RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12)
50 RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13)
51 RELOC_NUMBER (R_PPC_GOT16, 14)
52 RELOC_NUMBER (R_PPC_GOT16_LO, 15)
53 RELOC_NUMBER (R_PPC_GOT16_HI, 16)
54 RELOC_NUMBER (R_PPC_GOT16_HA, 17)
55 RELOC_NUMBER (R_PPC_PLTREL24, 18)
56 RELOC_NUMBER (R_PPC_COPY, 19)
57 RELOC_NUMBER (R_PPC_GLOB_DAT, 20)
58 RELOC_NUMBER (R_PPC_JMP_SLOT, 21)
59 RELOC_NUMBER (R_PPC_RELATIVE, 22)
60 RELOC_NUMBER (R_PPC_LOCAL24PC, 23)
61 RELOC_NUMBER (R_PPC_UADDR32, 24)
62 RELOC_NUMBER (R_PPC_UADDR16, 25)
63 RELOC_NUMBER (R_PPC_REL32, 26)
64 RELOC_NUMBER (R_PPC_PLT32, 27)
65 RELOC_NUMBER (R_PPC_PLTREL32, 28)
66 RELOC_NUMBER (R_PPC_PLT16_LO, 29)
67 RELOC_NUMBER (R_PPC_PLT16_HI, 30)
68 RELOC_NUMBER (R_PPC_PLT16_HA, 31)
69 RELOC_NUMBER (R_PPC_SDAREL16, 32)
70 RELOC_NUMBER (R_PPC_SECTOFF, 33)
71 RELOC_NUMBER (R_PPC_SECTOFF_LO, 34)
72 RELOC_NUMBER (R_PPC_SECTOFF_HI, 35)
73 RELOC_NUMBER (R_PPC_SECTOFF_HA, 36)
74 RELOC_NUMBER (R_PPC_ADDR30, 37)
75
76 #ifndef RELOC_MACROS_GEN_FUNC
77 /* Fake relocations for branch stubs, only used internally by ld. */
78 RELOC_NUMBER (R_PPC_RELAX, 48)
79 RELOC_NUMBER (R_PPC_RELAX_PLT, 49)
80 RELOC_NUMBER (R_PPC_RELAX_PLTREL24, 50)
81 #endif
82
83 /* Relocs added to support TLS. */
84 RELOC_NUMBER (R_PPC_TLS, 67)
85 RELOC_NUMBER (R_PPC_DTPMOD32, 68)
86 RELOC_NUMBER (R_PPC_TPREL16, 69)
87 RELOC_NUMBER (R_PPC_TPREL16_LO, 70)
88 RELOC_NUMBER (R_PPC_TPREL16_HI, 71)
89 RELOC_NUMBER (R_PPC_TPREL16_HA, 72)
90 RELOC_NUMBER (R_PPC_TPREL32, 73)
91 RELOC_NUMBER (R_PPC_DTPREL16, 74)
92 RELOC_NUMBER (R_PPC_DTPREL16_LO, 75)
93 RELOC_NUMBER (R_PPC_DTPREL16_HI, 76)
94 RELOC_NUMBER (R_PPC_DTPREL16_HA, 77)
95 RELOC_NUMBER (R_PPC_DTPREL32, 78)
96 RELOC_NUMBER (R_PPC_GOT_TLSGD16, 79)
97 RELOC_NUMBER (R_PPC_GOT_TLSGD16_LO, 80)
98 RELOC_NUMBER (R_PPC_GOT_TLSGD16_HI, 81)
99 RELOC_NUMBER (R_PPC_GOT_TLSGD16_HA, 82)
100 RELOC_NUMBER (R_PPC_GOT_TLSLD16, 83)
101 RELOC_NUMBER (R_PPC_GOT_TLSLD16_LO, 84)
102 RELOC_NUMBER (R_PPC_GOT_TLSLD16_HI, 85)
103 RELOC_NUMBER (R_PPC_GOT_TLSLD16_HA, 86)
104 RELOC_NUMBER (R_PPC_GOT_TPREL16, 87)
105 RELOC_NUMBER (R_PPC_GOT_TPREL16_LO, 88)
106 RELOC_NUMBER (R_PPC_GOT_TPREL16_HI, 89)
107 RELOC_NUMBER (R_PPC_GOT_TPREL16_HA, 90)
108 RELOC_NUMBER (R_PPC_GOT_DTPREL16, 91)
109 RELOC_NUMBER (R_PPC_GOT_DTPREL16_LO, 92)
110 RELOC_NUMBER (R_PPC_GOT_DTPREL16_HI, 93)
111 RELOC_NUMBER (R_PPC_GOT_DTPREL16_HA, 94)
112 RELOC_NUMBER (R_PPC_TLSGD, 95)
113 RELOC_NUMBER (R_PPC_TLSLD, 96)
114
115 /* The remaining relocs are from the Embedded ELF ABI, and are not
116 in the SVR4 ELF ABI. */
117 RELOC_NUMBER (R_PPC_EMB_NADDR32, 101)
118 RELOC_NUMBER (R_PPC_EMB_NADDR16, 102)
119 RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103)
120 RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104)
121 RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105)
122 RELOC_NUMBER (R_PPC_EMB_SDAI16, 106)
123 RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107)
124 RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108)
125 RELOC_NUMBER (R_PPC_EMB_SDA21, 109)
126 RELOC_NUMBER (R_PPC_EMB_MRKREF, 110)
127 RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111)
128 RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112)
129 RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113)
130 RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114)
131 RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115)
132 RELOC_NUMBER (R_PPC_EMB_RELSDA, 116)
133
134 /* Support STT_GNU_IFUNC plt calls. */
135 RELOC_NUMBER (R_PPC_IRELATIVE, 248)
136
137 /* These are GNU extensions used in PIC code sequences. */
138 RELOC_NUMBER (R_PPC_REL16, 249)
139 RELOC_NUMBER (R_PPC_REL16_LO, 250)
140 RELOC_NUMBER (R_PPC_REL16_HI, 251)
141 RELOC_NUMBER (R_PPC_REL16_HA, 252)
142
143 /* These are GNU extensions to enable C++ vtable garbage collection. */
144 RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253)
145 RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254)
146
147 /* This is a phony reloc to handle any old fashioned TOC16 references
148 that may still be in object files. */
149 RELOC_NUMBER (R_PPC_TOC16, 255)
150
151 END_RELOC_NUMBERS (R_PPC_max)
152
153 #define IS_PPC_TLS_RELOC(R) \
154 ((R) >= R_PPC_TLS && (R) <= R_PPC_GOT_DTPREL16_HA)
155
156 /* Specify the value of _GLOBAL_OFFSET_TABLE_. */
157 #define DT_PPC_GOT (DT_LOPROC)
158
159 /* Specify that tls descriptors should be optimized. */
160 #define DT_PPC_TLSOPT (DT_LOPROC + 1)
161
162 /* Processor specific flags for the ELF header e_flags field. */
163
164 #define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */
165
166 #define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag. */
167 #define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag. */
168
169 /* Processor specific section headers, sh_type field. */
170
171 #define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \
172 entries in this section \
173 based on the address \
174 specified in the associated \
175 symbol table entry. */
176
177 /* Object attribute tags. */
178 enum
179 {
180 /* 0-3 are generic. */
181 Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for
182 soft-float, 3 for single=precision
183 hard-float; 0 for not tagged or not
184 using any ABIs affected by the
185 differences. */
186
187 /* Value 1 for general purpose registers only, 2 for AltiVec
188 registers, 3 for SPE registers; 0 for not tagged or not using any
189 ABIs affected by the differences. */
190 Tag_GNU_Power_ABI_Vector = 8,
191
192 /* Value 1 for ABIs using r3/r4 for returning structures <= 8 bytes,
193 2 for ABIs using memory; 0 for not tagged or not using any ABIs
194 affected by the differences. */
195 Tag_GNU_Power_ABI_Struct_Return = 12
196 };
197
198 #endif /* _ELF_PPC_H */