handle absolute indirect syms in mach-o
[deliverable/binutils-gdb.git] / include / elf / sparc.h
CommitLineData
252b5132 1/* SPARC ELF support for BFD.
9e8c70f9
DM
2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2008, 2010,
3 2011
c3aa17e9 4 Free Software Foundation, Inc.
252b5132
RH
5 By Doug Evans, Cygnus Support, <dje@cygnus.com>.
6
e4e42b45 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
e4e42b45
NC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
252b5132 13
e4e42b45
NC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
e4e42b45
NC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132
RH
23
24#ifndef _ELF_SPARC_H
25#define _ELF_SPARC_H
26
27/* Processor specific flags for the ELF header e_flags field. */
28
29/* These are defined by Sun. */
30
31#define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */
32#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
33#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
34#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
97272b32 35#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */
252b5132
RH
36
37#define EF_SPARC_LEDATA 0x800000 /* little endian data */
38
39/* This name is used in the V9 ABI. */
40#define EF_SPARC_EXT_MASK 0xffff00 /* reserved for vendor extensions */
41
42/* V9 memory models */
43#define EF_SPARCV9_MM 0x3 /* memory model mask */
44#define EF_SPARCV9_TSO 0x0 /* total store ordering */
45#define EF_SPARCV9_PSO 0x1 /* partial store ordering */
46#define EF_SPARCV9_RMO 0x2 /* relaxed store ordering */
47
48/* Section indices. */
49
a50b1753
NC
50#define SHN_BEFORE SHN_LORESERVE /* Used with SHF_ORDERED and... */
51#define SHN_AFTER (SHN_LORESERVE + 1) /* SHF_LINK_ORDER section flags. */
252b5132
RH
52
53/* Section flags. */
54
252b5132
RH
55#define SHF_ORDERED 0x40000000 /* treat sh_link,sh_info specially */
56
57/* Symbol types. */
58
59#define STT_REGISTER 13 /* global reg reserved to app. */
60
61#include "elf/reloc-macros.h"
62
63/* Relocation types. */
64START_RELOC_NUMBERS (elf_sparc_reloc_type)
65 RELOC_NUMBER (R_SPARC_NONE, 0)
66 RELOC_NUMBER (R_SPARC_8, 1)
67 RELOC_NUMBER (R_SPARC_16, 2)
68 RELOC_NUMBER (R_SPARC_32, 3)
69 RELOC_NUMBER (R_SPARC_DISP8, 4)
70 RELOC_NUMBER (R_SPARC_DISP16, 5)
71 RELOC_NUMBER (R_SPARC_DISP32, 6)
72 RELOC_NUMBER (R_SPARC_WDISP30, 7)
73 RELOC_NUMBER (R_SPARC_WDISP22, 8)
74 RELOC_NUMBER (R_SPARC_HI22, 9)
75 RELOC_NUMBER (R_SPARC_22, 10)
76 RELOC_NUMBER (R_SPARC_13, 11)
77 RELOC_NUMBER (R_SPARC_LO10, 12)
78 RELOC_NUMBER (R_SPARC_GOT10, 13)
79 RELOC_NUMBER (R_SPARC_GOT13, 14)
80 RELOC_NUMBER (R_SPARC_GOT22, 15)
81 RELOC_NUMBER (R_SPARC_PC10, 16)
82 RELOC_NUMBER (R_SPARC_PC22, 17)
83 RELOC_NUMBER (R_SPARC_WPLT30, 18)
84 RELOC_NUMBER (R_SPARC_COPY, 19)
85 RELOC_NUMBER (R_SPARC_GLOB_DAT, 20)
86 RELOC_NUMBER (R_SPARC_JMP_SLOT, 21)
87 RELOC_NUMBER (R_SPARC_RELATIVE, 22)
88 RELOC_NUMBER (R_SPARC_UA32, 23)
89
90 /* ??? These 6 relocs are new but not currently used. For binary
7674a3df 91 compatibility in the sparc64-elf toolchain, we leave them out.
252b5132
RH
92 A non-binary upward compatible change is expected for sparc64-elf. */
93#ifndef SPARC64_OLD_RELOCS
94 /* ??? New relocs on the UltraSPARC. Not sure what they're for yet. */
95 RELOC_NUMBER (R_SPARC_PLT32, 24)
96 RELOC_NUMBER (R_SPARC_HIPLT22, 25)
97 RELOC_NUMBER (R_SPARC_LOPLT10, 26)
98 RELOC_NUMBER (R_SPARC_PCPLT32, 27)
99 RELOC_NUMBER (R_SPARC_PCPLT22, 28)
100 RELOC_NUMBER (R_SPARC_PCPLT10, 29)
101#endif
102
103 /* v9 relocs */
104 RELOC_NUMBER (R_SPARC_10, 30)
105 RELOC_NUMBER (R_SPARC_11, 31)
106 RELOC_NUMBER (R_SPARC_64, 32)
107 RELOC_NUMBER (R_SPARC_OLO10, 33)
108 RELOC_NUMBER (R_SPARC_HH22, 34)
109 RELOC_NUMBER (R_SPARC_HM10, 35)
110 RELOC_NUMBER (R_SPARC_LM22, 36)
111 RELOC_NUMBER (R_SPARC_PC_HH22, 37)
112 RELOC_NUMBER (R_SPARC_PC_HM10, 38)
113 RELOC_NUMBER (R_SPARC_PC_LM22, 39)
114 RELOC_NUMBER (R_SPARC_WDISP16, 40)
115 RELOC_NUMBER (R_SPARC_WDISP19, 41)
116 RELOC_NUMBER (R_SPARC_UNUSED_42, 42)
117 RELOC_NUMBER (R_SPARC_7, 43)
118 RELOC_NUMBER (R_SPARC_5, 44)
119 RELOC_NUMBER (R_SPARC_6, 45)
120 RELOC_NUMBER (R_SPARC_DISP64, 46)
121 RELOC_NUMBER (R_SPARC_PLT64, 47)
122 RELOC_NUMBER (R_SPARC_HIX22, 48)
123 RELOC_NUMBER (R_SPARC_LOX10, 49)
124 RELOC_NUMBER (R_SPARC_H44, 50)
125 RELOC_NUMBER (R_SPARC_M44, 51)
126 RELOC_NUMBER (R_SPARC_L44, 52)
127 RELOC_NUMBER (R_SPARC_REGISTER, 53)
128 RELOC_NUMBER (R_SPARC_UA64, 54)
129 RELOC_NUMBER (R_SPARC_UA16, 55)
130
b9734f35
JJ
131 RELOC_NUMBER (R_SPARC_TLS_GD_HI22, 56)
132 RELOC_NUMBER (R_SPARC_TLS_GD_LO10, 57)
133 RELOC_NUMBER (R_SPARC_TLS_GD_ADD, 58)
134 RELOC_NUMBER (R_SPARC_TLS_GD_CALL, 59)
135 RELOC_NUMBER (R_SPARC_TLS_LDM_HI22, 60)
136 RELOC_NUMBER (R_SPARC_TLS_LDM_LO10, 61)
137 RELOC_NUMBER (R_SPARC_TLS_LDM_ADD, 62)
138 RELOC_NUMBER (R_SPARC_TLS_LDM_CALL, 63)
139 RELOC_NUMBER (R_SPARC_TLS_LDO_HIX22, 64)
140 RELOC_NUMBER (R_SPARC_TLS_LDO_LOX10, 65)
141 RELOC_NUMBER (R_SPARC_TLS_LDO_ADD, 66)
142 RELOC_NUMBER (R_SPARC_TLS_IE_HI22, 67)
143 RELOC_NUMBER (R_SPARC_TLS_IE_LO10, 68)
144 RELOC_NUMBER (R_SPARC_TLS_IE_LD, 69)
145 RELOC_NUMBER (R_SPARC_TLS_IE_LDX, 70)
146 RELOC_NUMBER (R_SPARC_TLS_IE_ADD, 71)
147 RELOC_NUMBER (R_SPARC_TLS_LE_HIX22, 72)
148 RELOC_NUMBER (R_SPARC_TLS_LE_LOX10, 73)
149 RELOC_NUMBER (R_SPARC_TLS_DTPMOD32, 74)
150 RELOC_NUMBER (R_SPARC_TLS_DTPMOD64, 75)
151 RELOC_NUMBER (R_SPARC_TLS_DTPOFF32, 76)
152 RELOC_NUMBER (R_SPARC_TLS_DTPOFF64, 77)
153 RELOC_NUMBER (R_SPARC_TLS_TPOFF32, 78)
154 RELOC_NUMBER (R_SPARC_TLS_TPOFF64, 79)
14a6d8e0
DM
155
156 RELOC_NUMBER (R_SPARC_GOTDATA_HIX22, 80)
157 RELOC_NUMBER (R_SPARC_GOTDATA_LOX10, 81)
158 RELOC_NUMBER (R_SPARC_GOTDATA_OP_HIX22, 82)
159 RELOC_NUMBER (R_SPARC_GOTDATA_OP_LOX10, 83)
160 RELOC_NUMBER (R_SPARC_GOTDATA_OP, 84)
161
162 RELOC_NUMBER (R_SPARC_H34, 85)
163 RELOC_NUMBER (R_SPARC_SIZE32, 86)
164 RELOC_NUMBER (R_SPARC_SIZE64, 87)
b9734f35 165
09cb30ac
RH
166 EMPTY_RELOC (R_SPARC_max_std)
167
d0c9aeb3
DM
168 RELOC_NUMBER (R_SPARC_JMP_IREL, 248)
169 RELOC_NUMBER (R_SPARC_IRELATIVE, 249)
252b5132
RH
170 RELOC_NUMBER (R_SPARC_GNU_VTINHERIT, 250)
171 RELOC_NUMBER (R_SPARC_GNU_VTENTRY, 251)
b9734f35 172 RELOC_NUMBER (R_SPARC_REV32, 252)
252b5132 173
1b452ec6 174END_RELOC_NUMBERS (R_SPARC_max)
252b5132
RH
175
176/* Relocation macros. */
177
feb90132 178#define ELF64_R_TYPE_DATA(info) \
437d5cf0 179 (((bfd_signed_vma)(ELF64_R_TYPE(info) >> 8) ^ 0x800000) - 0x800000)
feb90132
RH
180#define ELF64_R_TYPE_ID(info) \
181 ((info) & 0xff)
182#define ELF64_R_TYPE_INFO(data, type) \
183 (((bfd_vma) ((data) & 0xffffff) << 8) | (bfd_vma) (type))
252b5132 184
feb90132 185/* Values for Elf64_Dyn.d_tag. */
252b5132 186
feb90132 187#define DT_SPARC_REGISTER 0x70000001
252b5132 188
9e8c70f9
DM
189/* Object attribute tags. */
190enum
191{
192 /* 0-3 are generic. */
193 Tag_GNU_Sparc_HWCAPS = 4,
194};
195
196/* These values match the AV_SPARC_* hwcap bits defined under Solaris. */
197#define ELF_SPARC_HWCAP_MUL32 0x00000001 /* umul/umulcc/smul/smulcc insns */
198#define ELF_SPARC_HWCAP_DIV32 0x00000002 /* udiv/udivcc/sdiv/sdivcc insns */
199#define ELF_SPARC_HWCAP_FSMULD 0x00000004 /* 'fsmuld' insn */
200#define ELF_SPARC_HWCAP_V8PLUS 0x00000008 /* v9 insns available to 32bit */
201#define ELF_SPARC_HWCAP_POPC 0x00000010 /* 'popc' insn */
202#define ELF_SPARC_HWCAP_VIS 0x00000020 /* VIS insns */
203#define ELF_SPARC_HWCAP_VIS2 0x00000040 /* VIS2 insns */
204#define ELF_SPARC_HWCAP_ASI_BLK_INIT \
205 0x00000080 /* block init ASIs */
206#define ELF_SPARC_HWCAP_FMAF 0x00000100 /* fused multiply-add */
207#define ELF_SPARC_HWCAP_VIS3 0x00000400 /* VIS3 insns */
208#define ELF_SPARC_HWCAP_HPC 0x00000800 /* HPC insns */
209#define ELF_SPARC_HWCAP_RANDOM 0x00001000 /* 'random' insn */
210#define ELF_SPARC_HWCAP_TRANS 0x00002000 /* transaction insns */
211#define ELF_SPARC_HWCAP_FJFMAU 0x00004000 /* unfused multiply-add */
212#define ELF_SPARC_HWCAP_IMA 0x00008000 /* integer multiply-add */
213#define ELF_SPARC_HWCAP_ASI_CACHE_SPARING \
214 0x00010000 /* cache sparing ASIs */
215
252b5132 216#endif /* _ELF_SPARC_H */
This page took 0.474268 seconds and 4 git commands to generate.