2010-05-21 Daniel Jacobowitz <dan@codesourcery.com>
[deliverable/binutils-gdb.git] / include / elf / sh.h
CommitLineData
252b5132 1/* SH ELF support for BFD.
e4e42b45
NC
2 Copyright 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2010
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_SH_H
22#define _ELF_SH_H
23
d4845d57
JR
24/* Processor specific flags for the ELF header e_flags field. */
25
26#define EF_SH_MACH_MASK 0x1f
27#define EF_SH_UNKNOWN 0 /* For backwards compatibility. */
28#define EF_SH1 1
29#define EF_SH2 2
30#define EF_SH3 3
d4845d57
JR
31#define EF_SH_DSP 4
32#define EF_SH3_DSP 5
a9178a2f 33#define EF_SH4AL_DSP 6
d4845d57
JR
34#define EF_SH3E 8
35#define EF_SH4 9
5177500f 36#define EF_SH2E 11
a9178a2f 37#define EF_SH4A 12
1d70c7fb 38#define EF_SH2A 13
a9178a2f 39
f6f9408f
JR
40#define EF_SH4_NOFPU 16
41#define EF_SH4A_NOFPU 17
42#define EF_SH4_NOMMU_NOFPU 18
1d70c7fb 43#define EF_SH2A_NOFPU 19
f6f9408f 44#define EF_SH3_NOMMU 20
d4845d57 45
e38bc3b5
NC
46#define EF_SH2A_SH4_NOFPU 21
47#define EF_SH2A_SH3_NOFPU 22
48#define EF_SH2A_SH4 23
49#define EF_SH2A_SH3E 24
50
61e31d88
AO
51/* This one can only mix in objects from other EF_SH5 objects. */
52#define EF_SH5 10
53
f6f9408f
JR
54/* Define the mapping from ELF to bfd mach numbers.
55 bfd_mach_* are defined in bfd_in2.h (generated from
56 archures.c). */
57#define EF_SH_BFD_TABLE \
a23ede3d 58/* EF_SH_UNKNOWN */ bfd_mach_sh , \
f6f9408f
JR
59/* EF_SH1 */ bfd_mach_sh , \
60/* EF_SH2 */ bfd_mach_sh2 , \
61/* EF_SH3 */ bfd_mach_sh3 , \
62/* EF_SH_DSP */ bfd_mach_sh_dsp , \
63/* EF_SH3_DSP */ bfd_mach_sh3_dsp , \
64/* EF_SHAL_DSP */ bfd_mach_sh4al_dsp , \
65/* 7 */ 0, \
66/* EF_SH3E */ bfd_mach_sh3e , \
67/* EF_SH4 */ bfd_mach_sh4 , \
68/* EF_SH5 */ 0, \
69/* EF_SH2E */ bfd_mach_sh2e , \
70/* EF_SH4A */ bfd_mach_sh4a , \
1d70c7fb
AO
71/* EF_SH2A */ bfd_mach_sh2a , \
72/* 14, 15 */ 0, 0, \
f6f9408f
JR
73/* EF_SH4_NOFPU */ bfd_mach_sh4_nofpu , \
74/* EF_SH4A_NOFPU */ bfd_mach_sh4a_nofpu , \
75/* EF_SH4_NOMMU_NOFPU */ bfd_mach_sh4_nommu_nofpu, \
1d70c7fb 76/* EF_SH2A_NOFPU */ bfd_mach_sh2a_nofpu , \
e38bc3b5
NC
77/* EF_SH3_NOMMU */ bfd_mach_sh3_nommu , \
78/* EF_SH2A_SH4_NOFPU */ bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, \
79/* EF_SH2A_SH3_NOFPU */ bfd_mach_sh2a_nofpu_or_sh3_nommu, \
80/* EF_SH2A_SH4 */ bfd_mach_sh2a_or_sh4 , \
81/* EF_SH2A_SH3E */ bfd_mach_sh2a_or_sh3e
f6f9408f
JR
82
83/* Convert arch_sh* into EF_SH*. */
84int sh_find_elf_flags (unsigned int arch_set);
85
86/* Convert bfd_mach_* into EF_SH*. */
87int sh_elf_get_flags_from_mach (unsigned long mach);
d4845d57 88
8e45593f
NC
89/* Other e_flags bits. */
90
91#define EF_SH_PIC 0x100 /* Segments of an FDPIC binary may
92 be relocated independently. */
93#define EF_SH_FDPIC 0x8000 /* Uses the FDPIC ABI. */
94
61e31d88
AO
95/* Flags for the st_other symbol field.
96 Keep away from the STV_ visibility flags (bit 0..1). */
97
98/* A reference to this symbol should by default add 1. */
99#define STO_SH5_ISA32 (1 << 2)
100
101/* Section contains only SHmedia code (no SHcompact code). */
102#define SHF_SH5_ISA32 0x40000000
103
104/* Section contains both SHmedia and SHcompact code, and possibly also
105 constants. */
106#define SHF_SH5_ISA32_MIXED 0x20000000
107
108/* If applied to a .cranges section, marks that the section is sorted by
109 increasing cr_addr values. */
110#define SHT_SH5_CR_SORTED 0x80000001
111
112/* Symbol should be handled as DataLabel (attached to global SHN_UNDEF
113 symbols). */
114#define STT_DATALABEL STT_LOPROC
115
252b5132
RH
116#include "elf/reloc-macros.h"
117
118/* Relocations. */
d38eb334
DD
119/* Relocations 10-32 and 128-255 are GNU extensions.
120 25..32 and 10 are used for relaxation. */
252b5132
RH
121START_RELOC_NUMBERS (elf_sh_reloc_type)
122 RELOC_NUMBER (R_SH_NONE, 0)
123 RELOC_NUMBER (R_SH_DIR32, 1)
124 RELOC_NUMBER (R_SH_REL32, 2)
125 RELOC_NUMBER (R_SH_DIR8WPN, 3)
126 RELOC_NUMBER (R_SH_IND12W, 4)
127 RELOC_NUMBER (R_SH_DIR8WPL, 5)
128 RELOC_NUMBER (R_SH_DIR8WPZ, 6)
129 RELOC_NUMBER (R_SH_DIR8BP, 7)
130 RELOC_NUMBER (R_SH_DIR8W, 8)
131 RELOC_NUMBER (R_SH_DIR8L, 9)
d38eb334
DD
132
133 RELOC_NUMBER (R_SH_LOOP_START, 10)
134 RELOC_NUMBER (R_SH_LOOP_END, 11)
135
136 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12)
137 FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21)
138
139 RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22)
140 RELOC_NUMBER (R_SH_GNU_VTENTRY, 23)
141 RELOC_NUMBER (R_SH_SWITCH8, 24)
252b5132
RH
142 RELOC_NUMBER (R_SH_SWITCH16, 25)
143 RELOC_NUMBER (R_SH_SWITCH32, 26)
144 RELOC_NUMBER (R_SH_USES, 27)
145 RELOC_NUMBER (R_SH_COUNT, 28)
146 RELOC_NUMBER (R_SH_ALIGN, 29)
147 RELOC_NUMBER (R_SH_CODE, 30)
148 RELOC_NUMBER (R_SH_DATA, 31)
149 RELOC_NUMBER (R_SH_LABEL, 32)
d38eb334
DD
150
151 RELOC_NUMBER (R_SH_DIR16, 33)
152 RELOC_NUMBER (R_SH_DIR8, 34)
153 RELOC_NUMBER (R_SH_DIR8UL, 35)
154 RELOC_NUMBER (R_SH_DIR8UW, 36)
155 RELOC_NUMBER (R_SH_DIR8U, 37)
156 RELOC_NUMBER (R_SH_DIR8SW, 38)
157 RELOC_NUMBER (R_SH_DIR8S, 39)
158 RELOC_NUMBER (R_SH_DIR4UL, 40)
159 RELOC_NUMBER (R_SH_DIR4UW, 41)
160 RELOC_NUMBER (R_SH_DIR4U, 42)
161 RELOC_NUMBER (R_SH_PSHA, 43)
162 RELOC_NUMBER (R_SH_PSHL, 44)
61e31d88
AO
163 RELOC_NUMBER (R_SH_DIR5U, 45)
164 RELOC_NUMBER (R_SH_DIR6U, 46)
165 RELOC_NUMBER (R_SH_DIR6S, 47)
166 RELOC_NUMBER (R_SH_DIR10S, 48)
167 RELOC_NUMBER (R_SH_DIR10SW, 49)
168 RELOC_NUMBER (R_SH_DIR10SL, 50)
169 RELOC_NUMBER (R_SH_DIR10SQ, 51)
d38eb334
DD
170 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52)
171 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52)
172 RELOC_NUMBER (R_SH_DIR16S, 53)
173 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54)
041bed02
KK
174 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143)
175 RELOC_NUMBER (R_SH_TLS_GD_32, 144)
176 RELOC_NUMBER (R_SH_TLS_LD_32, 145)
177 RELOC_NUMBER (R_SH_TLS_LDO_32, 146)
178 RELOC_NUMBER (R_SH_TLS_IE_32, 147)
179 RELOC_NUMBER (R_SH_TLS_LE_32, 148)
180 RELOC_NUMBER (R_SH_TLS_DTPMOD32, 149)
181 RELOC_NUMBER (R_SH_TLS_DTPOFF32, 150)
182 RELOC_NUMBER (R_SH_TLS_TPOFF32, 151)
183 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_4, 152)
184 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_4, 159)
32d070f0
AO
185 RELOC_NUMBER (R_SH_GOT32, 160)
186 RELOC_NUMBER (R_SH_PLT32, 161)
187 RELOC_NUMBER (R_SH_COPY, 162)
188 RELOC_NUMBER (R_SH_GLOB_DAT, 163)
189 RELOC_NUMBER (R_SH_JMP_SLOT, 164)
190 RELOC_NUMBER (R_SH_RELATIVE, 165)
191 RELOC_NUMBER (R_SH_GOTOFF, 166)
192 RELOC_NUMBER (R_SH_GOTPC, 167)
61e31d88
AO
193 RELOC_NUMBER (R_SH_GOTPLT32, 168)
194 RELOC_NUMBER (R_SH_GOT_LOW16, 169)
195 RELOC_NUMBER (R_SH_GOT_MEDLOW16, 170)
196 RELOC_NUMBER (R_SH_GOT_MEDHI16, 171)
197 RELOC_NUMBER (R_SH_GOT_HI16, 172)
198 RELOC_NUMBER (R_SH_GOTPLT_LOW16, 173)
199 RELOC_NUMBER (R_SH_GOTPLT_MEDLOW16, 174)
200 RELOC_NUMBER (R_SH_GOTPLT_MEDHI16, 175)
201 RELOC_NUMBER (R_SH_GOTPLT_HI16, 176)
202 RELOC_NUMBER (R_SH_PLT_LOW16, 177)
203 RELOC_NUMBER (R_SH_PLT_MEDLOW16, 178)
204 RELOC_NUMBER (R_SH_PLT_MEDHI16, 179)
205 RELOC_NUMBER (R_SH_PLT_HI16, 180)
206 RELOC_NUMBER (R_SH_GOTOFF_LOW16, 181)
207 RELOC_NUMBER (R_SH_GOTOFF_MEDLOW16, 182)
208 RELOC_NUMBER (R_SH_GOTOFF_MEDHI16, 183)
209 RELOC_NUMBER (R_SH_GOTOFF_HI16, 184)
210 RELOC_NUMBER (R_SH_GOTPC_LOW16, 185)
211 RELOC_NUMBER (R_SH_GOTPC_MEDLOW16, 186)
212 RELOC_NUMBER (R_SH_GOTPC_MEDHI16, 187)
213 RELOC_NUMBER (R_SH_GOTPC_HI16, 188)
214 RELOC_NUMBER (R_SH_GOT10BY4, 189)
215 RELOC_NUMBER (R_SH_GOTPLT10BY4, 190)
216 RELOC_NUMBER (R_SH_GOT10BY8, 191)
217 RELOC_NUMBER (R_SH_GOTPLT10BY8, 192)
218 RELOC_NUMBER (R_SH_COPY64, 193)
219 RELOC_NUMBER (R_SH_GLOB_DAT64, 194)
220 RELOC_NUMBER (R_SH_JMP_SLOT64, 195)
221 RELOC_NUMBER (R_SH_RELATIVE64, 196)
041bed02 222 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_5, 197)
8e45593f
NC
223 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_5, 200)
224 RELOC_NUMBER (R_SH_GOT20, 201)
225 RELOC_NUMBER (R_SH_GOTOFF20, 202)
226 RELOC_NUMBER (R_SH_GOTFUNCDESC, 203)
227 RELOC_NUMBER (R_SH_GOTFUNCDESC20, 204)
228 RELOC_NUMBER (R_SH_GOTOFFFUNCDESC, 205)
229 RELOC_NUMBER (R_SH_GOTOFFFUNCDESC20, 206)
230 RELOC_NUMBER (R_SH_FUNCDESC, 207)
231 RELOC_NUMBER (R_SH_FUNCDESC_VALUE, 208)
232 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_6, 209)
233 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_6, 241)
61e31d88
AO
234 RELOC_NUMBER (R_SH_SHMEDIA_CODE, 242)
235 RELOC_NUMBER (R_SH_PT_16, 243)
236 RELOC_NUMBER (R_SH_IMMS16, 244)
237 RELOC_NUMBER (R_SH_IMMU16, 245)
238 RELOC_NUMBER (R_SH_IMM_LOW16, 246)
239 RELOC_NUMBER (R_SH_IMM_LOW16_PCREL, 247)
240 RELOC_NUMBER (R_SH_IMM_MEDLOW16, 248)
241 RELOC_NUMBER (R_SH_IMM_MEDLOW16_PCREL, 249)
242 RELOC_NUMBER (R_SH_IMM_MEDHI16, 250)
243 RELOC_NUMBER (R_SH_IMM_MEDHI16_PCREL, 251)
244 RELOC_NUMBER (R_SH_IMM_HI16, 252)
245 RELOC_NUMBER (R_SH_IMM_HI16_PCREL, 253)
246 RELOC_NUMBER (R_SH_64, 254)
247 RELOC_NUMBER (R_SH_64_PCREL, 255)
1b452ec6 248END_RELOC_NUMBERS (R_SH_max)
252b5132
RH
249
250#endif
This page took 0.456711 seconds and 4 git commands to generate.