source: branches/libc-0.6/src/binutils/include/elf/sh.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.8 KB
Line 
1/* SH ELF support for BFD.
2 Copyright 1998, 2000, 2001, 2002, 2003 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_SH_H
21#define _ELF_SH_H
22
23/* Processor specific flags for the ELF header e_flags field. */
24
25#define EF_SH_MACH_MASK 0x1f
26#define EF_SH_UNKNOWN 0 /* For backwards compatibility. */
27#define EF_SH1 1
28#define EF_SH2 2
29#define EF_SH3 3
30#define EF_SH_HAS_DSP(flags) ((flags) & 4)
31#define EF_SH_DSP 4
32#define EF_SH3_DSP 5
33#define EF_SH_HAS_FP(flags) ((flags) & 8)
34#define EF_SH3E 8
35#define EF_SH4 9
36#define EF_SH2E 11
37
38/* This one can only mix in objects from other EF_SH5 objects. */
39#define EF_SH5 10
40
41#define EF_SH_MERGE_MACH(mach1, mach2) \
42 (((((mach1) == EF_SH3 || (mach1) == EF_SH_UNKNOWN) && (mach2) == EF_SH_DSP) \
43 || ((mach1) == EF_SH_DSP \
44 && ((mach2) == EF_SH3 || (mach2) == EF_SH_UNKNOWN))) \
45 ? EF_SH3_DSP \
46 : (((mach1) < EF_SH3 && (mach2) == EF_SH_UNKNOWN) \
47 || ((mach2) < EF_SH3 && (mach1) == EF_SH_UNKNOWN)) \
48 ? EF_SH3 \
49 : ((mach1) == EF_SH2E && EF_SH_HAS_FP (mach2)) \
50 ? (mach2) \
51 : ((mach2) == EF_SH2E && EF_SH_HAS_FP (mach1)) \
52 ? (mach1) \
53 : (((mach1) == EF_SH2E && (mach2) == EF_SH_UNKNOWN) \
54 || ((mach2) == EF_SH2E && (mach1) == EF_SH_UNKNOWN)) \
55 ? EF_SH2E \
56 : (((mach1) == EF_SH3E && (mach2) == EF_SH_UNKNOWN) \
57 || ((mach2) == EF_SH3E && (mach1) == EF_SH_UNKNOWN)) \
58 ? EF_SH4 \
59 : (((mach1) == EF_SH2E ? 7 : (mach1)) > ((mach2) == EF_SH2E ? 7 : (mach2)) \
60 ? (mach1) : (mach2)))
61
62/* Flags for the st_other symbol field.
63 Keep away from the STV_ visibility flags (bit 0..1). */
64
65/* A reference to this symbol should by default add 1. */
66#define STO_SH5_ISA32 (1 << 2)
67
68/* Section contains only SHmedia code (no SHcompact code). */
69#define SHF_SH5_ISA32 0x40000000
70
71/* Section contains both SHmedia and SHcompact code, and possibly also
72 constants. */
73#define SHF_SH5_ISA32_MIXED 0x20000000
74
75/* If applied to a .cranges section, marks that the section is sorted by
76 increasing cr_addr values. */
77#define SHT_SH5_CR_SORTED 0x80000001
78
79/* Symbol should be handled as DataLabel (attached to global SHN_UNDEF
80 symbols). */
81#define STT_DATALABEL STT_LOPROC
82
83#include "elf/reloc-macros.h"
84
85/* Relocations. */
86/* Relocations 25ff are GNU extensions.
87 25..33 are used for relaxation and use the same constants as COFF uses. */
88START_RELOC_NUMBERS (elf_sh_reloc_type)
89 RELOC_NUMBER (R_SH_NONE, 0)
90 RELOC_NUMBER (R_SH_DIR32, 1)
91 RELOC_NUMBER (R_SH_REL32, 2)
92 RELOC_NUMBER (R_SH_DIR8WPN, 3)
93 RELOC_NUMBER (R_SH_IND12W, 4)
94 RELOC_NUMBER (R_SH_DIR8WPL, 5)
95 RELOC_NUMBER (R_SH_DIR8WPZ, 6)
96 RELOC_NUMBER (R_SH_DIR8BP, 7)
97 RELOC_NUMBER (R_SH_DIR8W, 8)
98 RELOC_NUMBER (R_SH_DIR8L, 9)
99 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 10)
100 FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 24)
101 RELOC_NUMBER (R_SH_SWITCH16, 25)
102 RELOC_NUMBER (R_SH_SWITCH32, 26)
103 RELOC_NUMBER (R_SH_USES, 27)
104 RELOC_NUMBER (R_SH_COUNT, 28)
105 RELOC_NUMBER (R_SH_ALIGN, 29)
106 RELOC_NUMBER (R_SH_CODE, 30)
107 RELOC_NUMBER (R_SH_DATA, 31)
108 RELOC_NUMBER (R_SH_LABEL, 32)
109 RELOC_NUMBER (R_SH_SWITCH8, 33)
110 RELOC_NUMBER (R_SH_GNU_VTINHERIT, 34)
111 RELOC_NUMBER (R_SH_GNU_VTENTRY, 35)
112 RELOC_NUMBER (R_SH_LOOP_START, 36)
113 RELOC_NUMBER (R_SH_LOOP_END, 37)
114 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 38)
115 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 44)
116 RELOC_NUMBER (R_SH_DIR5U, 45)
117 RELOC_NUMBER (R_SH_DIR6U, 46)
118 RELOC_NUMBER (R_SH_DIR6S, 47)
119 RELOC_NUMBER (R_SH_DIR10S, 48)
120 RELOC_NUMBER (R_SH_DIR10SW, 49)
121 RELOC_NUMBER (R_SH_DIR10SL, 50)
122 RELOC_NUMBER (R_SH_DIR10SQ, 51)
123 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 52)
124 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143)
125 RELOC_NUMBER (R_SH_TLS_GD_32, 144)
126 RELOC_NUMBER (R_SH_TLS_LD_32, 145)
127 RELOC_NUMBER (R_SH_TLS_LDO_32, 146)
128 RELOC_NUMBER (R_SH_TLS_IE_32, 147)
129 RELOC_NUMBER (R_SH_TLS_LE_32, 148)
130 RELOC_NUMBER (R_SH_TLS_DTPMOD32, 149)
131 RELOC_NUMBER (R_SH_TLS_DTPOFF32, 150)
132 RELOC_NUMBER (R_SH_TLS_TPOFF32, 151)
133 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_4, 152)
134 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_4, 159)
135 RELOC_NUMBER (R_SH_GOT32, 160)
136 RELOC_NUMBER (R_SH_PLT32, 161)
137 RELOC_NUMBER (R_SH_COPY, 162)
138 RELOC_NUMBER (R_SH_GLOB_DAT, 163)
139 RELOC_NUMBER (R_SH_JMP_SLOT, 164)
140 RELOC_NUMBER (R_SH_RELATIVE, 165)
141 RELOC_NUMBER (R_SH_GOTOFF, 166)
142 RELOC_NUMBER (R_SH_GOTPC, 167)
143 RELOC_NUMBER (R_SH_GOTPLT32, 168)
144 RELOC_NUMBER (R_SH_GOT_LOW16, 169)
145 RELOC_NUMBER (R_SH_GOT_MEDLOW16, 170)
146 RELOC_NUMBER (R_SH_GOT_MEDHI16, 171)
147 RELOC_NUMBER (R_SH_GOT_HI16, 172)
148 RELOC_NUMBER (R_SH_GOTPLT_LOW16, 173)
149 RELOC_NUMBER (R_SH_GOTPLT_MEDLOW16, 174)
150 RELOC_NUMBER (R_SH_GOTPLT_MEDHI16, 175)
151 RELOC_NUMBER (R_SH_GOTPLT_HI16, 176)
152 RELOC_NUMBER (R_SH_PLT_LOW16, 177)
153 RELOC_NUMBER (R_SH_PLT_MEDLOW16, 178)
154 RELOC_NUMBER (R_SH_PLT_MEDHI16, 179)
155 RELOC_NUMBER (R_SH_PLT_HI16, 180)
156 RELOC_NUMBER (R_SH_GOTOFF_LOW16, 181)
157 RELOC_NUMBER (R_SH_GOTOFF_MEDLOW16, 182)
158 RELOC_NUMBER (R_SH_GOTOFF_MEDHI16, 183)
159 RELOC_NUMBER (R_SH_GOTOFF_HI16, 184)
160 RELOC_NUMBER (R_SH_GOTPC_LOW16, 185)
161 RELOC_NUMBER (R_SH_GOTPC_MEDLOW16, 186)
162 RELOC_NUMBER (R_SH_GOTPC_MEDHI16, 187)
163 RELOC_NUMBER (R_SH_GOTPC_HI16, 188)
164 RELOC_NUMBER (R_SH_GOT10BY4, 189)
165 RELOC_NUMBER (R_SH_GOTPLT10BY4, 190)
166 RELOC_NUMBER (R_SH_GOT10BY8, 191)
167 RELOC_NUMBER (R_SH_GOTPLT10BY8, 192)
168 RELOC_NUMBER (R_SH_COPY64, 193)
169 RELOC_NUMBER (R_SH_GLOB_DAT64, 194)
170 RELOC_NUMBER (R_SH_JMP_SLOT64, 195)
171 RELOC_NUMBER (R_SH_RELATIVE64, 196)
172 FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_5, 197)
173 FAKE_RELOC (R_SH_LAST_INVALID_RELOC_5, 241)
174 RELOC_NUMBER (R_SH_SHMEDIA_CODE, 242)
175 RELOC_NUMBER (R_SH_PT_16, 243)
176 RELOC_NUMBER (R_SH_IMMS16, 244)
177 RELOC_NUMBER (R_SH_IMMU16, 245)
178 RELOC_NUMBER (R_SH_IMM_LOW16, 246)
179 RELOC_NUMBER (R_SH_IMM_LOW16_PCREL, 247)
180 RELOC_NUMBER (R_SH_IMM_MEDLOW16, 248)
181 RELOC_NUMBER (R_SH_IMM_MEDLOW16_PCREL, 249)
182 RELOC_NUMBER (R_SH_IMM_MEDHI16, 250)
183 RELOC_NUMBER (R_SH_IMM_MEDHI16_PCREL, 251)
184 RELOC_NUMBER (R_SH_IMM_HI16, 252)
185 RELOC_NUMBER (R_SH_IMM_HI16_PCREL, 253)
186 RELOC_NUMBER (R_SH_64, 254)
187 RELOC_NUMBER (R_SH_64_PCREL, 255)
188END_RELOC_NUMBERS (R_SH_max)
189
190#endif
Note: See TracBrowser for help on using the repository browser.