1
2 #ifndef __ASM_SPARC64_ELF_H
3 #define __ASM_SPARC64_ELF_H
4
5
6
7
8
9 #include <asm/ptrace.h>
10 #include <asm/processor.h>
11 #include <asm/extable_64.h>
12 #include <asm/spitfire.h>
13 #include <asm/adi.h>
14
15
16
17
18 #define STT_REGISTER 13
19
20
21
22
23 #define R_SPARC_NONE 0
24 #define R_SPARC_8 1
25 #define R_SPARC_16 2
26 #define R_SPARC_32 3
27 #define R_SPARC_DISP8 4
28 #define R_SPARC_DISP16 5
29 #define R_SPARC_DISP32 6
30 #define R_SPARC_WDISP30 7
31 #define R_SPARC_WDISP22 8
32 #define R_SPARC_HI22 9
33 #define R_SPARC_22 10
34 #define R_SPARC_13 11
35 #define R_SPARC_LO10 12
36 #define R_SPARC_GOT10 13
37 #define R_SPARC_GOT13 14
38 #define R_SPARC_GOT22 15
39 #define R_SPARC_PC10 16
40 #define R_SPARC_PC22 17
41 #define R_SPARC_WPLT30 18
42 #define R_SPARC_COPY 19
43 #define R_SPARC_GLOB_DAT 20
44 #define R_SPARC_JMP_SLOT 21
45 #define R_SPARC_RELATIVE 22
46 #define R_SPARC_UA32 23
47 #define R_SPARC_PLT32 24
48 #define R_SPARC_HIPLT22 25
49 #define R_SPARC_LOPLT10 26
50 #define R_SPARC_PCPLT32 27
51 #define R_SPARC_PCPLT22 28
52 #define R_SPARC_PCPLT10 29
53 #define R_SPARC_10 30
54 #define R_SPARC_11 31
55 #define R_SPARC_64 32
56 #define R_SPARC_OLO10 33
57 #define R_SPARC_WDISP16 40
58 #define R_SPARC_WDISP19 41
59 #define R_SPARC_7 43
60 #define R_SPARC_5 44
61 #define R_SPARC_6 45
62
63
64 #define HWCAP_SPARC_FLUSH 0x00000001
65 #define HWCAP_SPARC_STBAR 0x00000002
66 #define HWCAP_SPARC_SWAP 0x00000004
67 #define HWCAP_SPARC_MULDIV 0x00000008
68 #define HWCAP_SPARC_V9 0x00000010
69 #define HWCAP_SPARC_ULTRA3 0x00000020
70 #define HWCAP_SPARC_BLKINIT 0x00000040
71 #define HWCAP_SPARC_N2 0x00000080
72
73
74 #define AV_SPARC_MUL32 0x00000100
75 #define AV_SPARC_DIV32 0x00000200
76 #define AV_SPARC_FSMULD 0x00000400
77 #define AV_SPARC_V8PLUS 0x00000800
78 #define AV_SPARC_POPC 0x00001000
79 #define AV_SPARC_VIS 0x00002000
80 #define AV_SPARC_VIS2 0x00004000
81 #define AV_SPARC_ASI_BLK_INIT 0x00008000
82 #define AV_SPARC_FMAF 0x00010000
83 #define AV_SPARC_VIS3 0x00020000
84 #define AV_SPARC_HPC 0x00040000
85 #define AV_SPARC_RANDOM 0x00080000
86 #define AV_SPARC_TRANS 0x00100000
87 #define AV_SPARC_FJFMAU 0x00200000
88 #define AV_SPARC_IMA 0x00400000
89 #define AV_SPARC_ASI_CACHE_SPARING \
90 0x00800000
91 #define AV_SPARC_PAUSE 0x01000000
92 #define AV_SPARC_CBCOND 0x02000000
93
94
95
96
97
98
99 #define HWCAP_SPARC_CRYPTO 0x04000000
100 #define HWCAP_SPARC_ADI 0x08000000
101
102 #define CORE_DUMP_USE_REGSET
103
104
105
106
107 #define ELF_ARCH EM_SPARCV9
108 #define ELF_CLASS ELFCLASS64
109 #define ELF_DATA ELFDATA2MSB
110
111
112
113
114
115
116
117
118
119
120
121 typedef unsigned long elf_greg_t;
122 #define ELF_NGREG 36
123 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
124
125 typedef struct {
126 unsigned long pr_regs[32];
127 unsigned long pr_fsr;
128 unsigned long pr_gsr;
129 unsigned long pr_fprs;
130 } elf_fpregset_t;
131
132
133
134
135
136
137
138
139 typedef unsigned int compat_elf_greg_t;
140 #define COMPAT_ELF_NGREG 38
141 typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG];
142
143 typedef struct {
144 union {
145 unsigned int pr_regs[32];
146 unsigned long pr_dregs[16];
147 } pr_fr;
148 unsigned int __unused;
149 unsigned int pr_fsr;
150 unsigned char pr_qcnt;
151 unsigned char pr_q_entrysize;
152 unsigned char pr_en;
153 unsigned int pr_q[64];
154 } compat_elf_fpregset_t;
155
156
157 typedef struct {
158 unsigned int pr_type;
159 unsigned int pr_align;
160 union {
161 struct {
162 union {
163 unsigned int pr_regs[32];
164 unsigned long pr_dregs[16];
165 long double pr_qregs[8];
166 } pr_xfr;
167 } pr_v8p;
168 unsigned int pr_xfsr;
169 unsigned int pr_fprs;
170 unsigned int pr_xg[8];
171 unsigned int pr_xo[8];
172 unsigned long pr_tstate;
173 unsigned int pr_filler[8];
174 } pr_un;
175 } elf_xregset_t;
176
177
178
179
180 #define elf_check_arch(x) ((x)->e_machine == ELF_ARCH)
181 #define compat_elf_check_arch(x) ((x)->e_machine == EM_SPARC || \
182 (x)->e_machine == EM_SPARC32PLUS)
183 #define compat_start_thread start_thread32
184
185 #define ELF_EXEC_PAGESIZE PAGE_SIZE
186
187
188
189
190
191
192 #define ELF_ET_DYN_BASE 0x0000010000000000UL
193 #define COMPAT_ELF_ET_DYN_BASE 0x0000000070000000UL
194
195 extern unsigned long sparc64_elf_hwcap;
196 #define ELF_HWCAP sparc64_elf_hwcap
197
198
199
200
201
202 #define ELF_PLATFORM (NULL)
203
204 #define SET_PERSONALITY(ex) \
205 do { if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \
206 set_thread_flag(TIF_32BIT); \
207 else \
208 clear_thread_flag(TIF_32BIT); \
209 \
210 if (personality(current->personality) != PER_LINUX32) \
211 set_personality(PER_LINUX | \
212 (current->personality & (~PER_MASK))); \
213 } while (0)
214
215 extern unsigned int vdso_enabled;
216
217 #define ARCH_DLINFO \
218 do { \
219 extern struct adi_config adi_state; \
220 if (vdso_enabled) \
221 NEW_AUX_ENT(AT_SYSINFO_EHDR, \
222 (unsigned long)current->mm->context.vdso); \
223 NEW_AUX_ENT(AT_ADI_BLKSZ, adi_state.caps.blksz); \
224 NEW_AUX_ENT(AT_ADI_NBITS, adi_state.caps.nbits); \
225 NEW_AUX_ENT(AT_ADI_UEONADI, adi_state.caps.ue_on_adi); \
226 } while (0)
227
228 struct linux_binprm;
229
230 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
231 extern int arch_setup_additional_pages(struct linux_binprm *bprm,
232 int uses_interp);
233 #endif