1
2 #ifndef __ASMPARISC_ELF_H
3 #define __ASMPARISC_ELF_H
4
5
6
7
8
9 #include <linux/types.h>
10
11 #define EM_PARISC 15
12
13
14
15
16
17 #define EF_PARISC_TRAPNIL 0x00010000
18 #define EF_PARISC_EXT 0x00020000
19 #define EF_PARISC_LSB 0x00040000
20 #define EF_PARISC_WIDE 0x00080000
21 #define EF_PARISC_NO_KABP 0x00100000
22
23 #define EF_PARISC_LAZYSWAP 0x00400000
24 #define EF_PARISC_ARCH 0x0000ffff
25
26
27
28 #define EFA_PARISC_1_0 0x020b
29 #define EFA_PARISC_1_1 0x0210
30 #define EFA_PARISC_2_0 0x0214
31
32
33
34 #define SHN_PARISC_ANSI_COMMON 0xff00
35
36 #define SHN_PARISC_HUGE_COMMON 0xff01
37
38
39
40 #define SHT_PARISC_EXT 0x70000000
41 #define SHT_PARISC_UNWIND 0x70000001
42 #define SHT_PARISC_DOC 0x70000002
43
44
45
46 #define SHF_PARISC_SHORT 0x20000000
47 #define SHF_PARISC_HUGE 0x40000000
48 #define SHF_PARISC_SBP 0x80000000
49
50
51
52 #define STT_PARISC_MILLICODE 13
53
54 #define STT_HP_OPAQUE (STT_LOOS + 0x1)
55 #define STT_HP_STUB (STT_LOOS + 0x2)
56
57
58
59 #define R_PARISC_NONE 0
60 #define R_PARISC_DIR32 1
61 #define R_PARISC_DIR21L 2
62 #define R_PARISC_DIR17R 3
63 #define R_PARISC_DIR17F 4
64 #define R_PARISC_DIR14R 6
65 #define R_PARISC_PCREL32 9
66 #define R_PARISC_PCREL21L 10
67 #define R_PARISC_PCREL17R 11
68 #define R_PARISC_PCREL17F 12
69 #define R_PARISC_PCREL14R 14
70 #define R_PARISC_DPREL21L 18
71 #define R_PARISC_DPREL14R 22
72 #define R_PARISC_GPREL21L 26
73 #define R_PARISC_GPREL14R 30
74 #define R_PARISC_LTOFF21L 34
75 #define R_PARISC_LTOFF14R 38
76 #define R_PARISC_SECREL32 41
77 #define R_PARISC_SEGBASE 48
78 #define R_PARISC_SEGREL32 49
79 #define R_PARISC_PLTOFF21L 50
80 #define R_PARISC_PLTOFF14R 54
81 #define R_PARISC_LTOFF_FPTR32 57
82 #define R_PARISC_LTOFF_FPTR21L 58
83 #define R_PARISC_LTOFF_FPTR14R 62
84 #define R_PARISC_FPTR64 64
85 #define R_PARISC_PLABEL32 65
86 #define R_PARISC_PCREL64 72
87 #define R_PARISC_PCREL22F 74
88 #define R_PARISC_PCREL14WR 75
89 #define R_PARISC_PCREL14DR 76
90 #define R_PARISC_PCREL16F 77
91 #define R_PARISC_PCREL16WF 78
92 #define R_PARISC_PCREL16DF 79
93 #define R_PARISC_DIR64 80
94 #define R_PARISC_DIR14WR 83
95 #define R_PARISC_DIR14DR 84
96 #define R_PARISC_DIR16F 85
97 #define R_PARISC_DIR16WF 86
98 #define R_PARISC_DIR16DF 87
99 #define R_PARISC_GPREL64 88
100 #define R_PARISC_GPREL14WR 91
101 #define R_PARISC_GPREL14DR 92
102 #define R_PARISC_GPREL16F 93
103 #define R_PARISC_GPREL16WF 94
104 #define R_PARISC_GPREL16DF 95
105 #define R_PARISC_LTOFF64 96
106 #define R_PARISC_LTOFF14WR 99
107 #define R_PARISC_LTOFF14DR 100
108 #define R_PARISC_LTOFF16F 101
109 #define R_PARISC_LTOFF16WF 102
110 #define R_PARISC_LTOFF16DF 103
111 #define R_PARISC_SECREL64 104
112 #define R_PARISC_SEGREL64 112
113 #define R_PARISC_PLTOFF14WR 115
114 #define R_PARISC_PLTOFF14DR 116
115 #define R_PARISC_PLTOFF16F 117
116 #define R_PARISC_PLTOFF16WF 118
117 #define R_PARISC_PLTOFF16DF 119
118 #define R_PARISC_LTOFF_FPTR64 120
119 #define R_PARISC_LTOFF_FPTR14WR 123
120 #define R_PARISC_LTOFF_FPTR14DR 124
121 #define R_PARISC_LTOFF_FPTR16F 125
122 #define R_PARISC_LTOFF_FPTR16WF 126
123 #define R_PARISC_LTOFF_FPTR16DF 127
124 #define R_PARISC_LORESERVE 128
125 #define R_PARISC_COPY 128
126 #define R_PARISC_IPLT 129
127 #define R_PARISC_EPLT 130
128 #define R_PARISC_TPREL32 153
129 #define R_PARISC_TPREL21L 154
130 #define R_PARISC_TPREL14R 158
131 #define R_PARISC_LTOFF_TP21L 162
132 #define R_PARISC_LTOFF_TP14R 166
133 #define R_PARISC_LTOFF_TP14F 167
134 #define R_PARISC_TPREL64 216
135 #define R_PARISC_TPREL14WR 219
136 #define R_PARISC_TPREL14DR 220
137 #define R_PARISC_TPREL16F 221
138 #define R_PARISC_TPREL16WF 222
139 #define R_PARISC_TPREL16DF 223
140 #define R_PARISC_LTOFF_TP64 224
141 #define R_PARISC_LTOFF_TP14WR 227
142 #define R_PARISC_LTOFF_TP14DR 228
143 #define R_PARISC_LTOFF_TP16F 229
144 #define R_PARISC_LTOFF_TP16WF 230
145 #define R_PARISC_LTOFF_TP16DF 231
146 #define R_PARISC_HIRESERVE 255
147
148 #define PA_PLABEL_FDESC 0x02
149
150
151
152
153
154
155
156
157
158
159 typedef struct elf32_fdesc {
160 __u32 addr;
161 __u32 gp;
162 } Elf32_Fdesc;
163
164
165 typedef struct elf64_fdesc {
166 __u64 dummy[2];
167
168 __u64 addr;
169 __u64 gp;
170 } Elf64_Fdesc;
171
172 #ifdef CONFIG_64BIT
173 #define Elf_Fdesc Elf64_Fdesc
174 #else
175 #define Elf_Fdesc Elf32_Fdesc
176 #endif
177
178
179
180 #define PT_HP_TLS (PT_LOOS + 0x0)
181 #define PT_HP_CORE_NONE (PT_LOOS + 0x1)
182 #define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
183 #define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
184 #define PT_HP_CORE_COMM (PT_LOOS + 0x4)
185 #define PT_HP_CORE_PROC (PT_LOOS + 0x5)
186 #define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
187 #define PT_HP_CORE_STACK (PT_LOOS + 0x7)
188 #define PT_HP_CORE_SHM (PT_LOOS + 0x8)
189 #define PT_HP_CORE_MMF (PT_LOOS + 0x9)
190 #define PT_HP_PARALLEL (PT_LOOS + 0x10)
191 #define PT_HP_FASTBIND (PT_LOOS + 0x11)
192 #define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
193 #define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
194 #define PT_HP_STACK (PT_LOOS + 0x14)
195
196 #define PT_PARISC_ARCHEXT 0x70000000
197 #define PT_PARISC_UNWIND 0x70000001
198
199
200
201 #define PF_PARISC_SBP 0x08000000
202
203 #define PF_HP_PAGE_SIZE 0x00100000
204 #define PF_HP_FAR_SHARED 0x00200000
205 #define PF_HP_NEAR_SHARED 0x00400000
206 #define PF_HP_CODE 0x01000000
207 #define PF_HP_MODIFY 0x02000000
208 #define PF_HP_LAZYSWAP 0x04000000
209 #define PF_HP_SBP 0x08000000
210
211
212
213
214
215
216
217 #define ELF_PLATFORM ("PARISC")
218
219
220
221
222
223
224
225 #ifndef ELF_CLASS
226
227 #ifdef CONFIG_64BIT
228 #define ELF_CLASS ELFCLASS64
229 #else
230 #define ELF_CLASS ELFCLASS32
231 #endif
232
233 typedef unsigned long elf_greg_t;
234
235 #define SET_PERSONALITY(ex) \
236 ({ \
237 set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
238 clear_thread_flag(TIF_32BIT); \
239 current->thread.map_base = DEFAULT_MAP_BASE; \
240 current->thread.task_size = DEFAULT_TASK_SIZE; \
241 })
242
243 #endif
244
245 #define COMPAT_SET_PERSONALITY(ex) \
246 ({ \
247 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) { \
248 set_thread_flag(TIF_32BIT); \
249 current->thread.map_base = DEFAULT_MAP_BASE32; \
250 current->thread.task_size = DEFAULT_TASK_SIZE32; \
251 } else clear_thread_flag(TIF_32BIT); \
252 })
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277 #define ELF_CORE_COPY_REGS(dst, pt) \
278 memset(dst, 0, sizeof(dst)); \
279 { int i; \
280 for (i = 0; i < 32; i++) dst[i] = pt->gr[i]; \
281 for (i = 0; i < 8; i++) dst[32 + i] = pt->sr[i]; \
282 } \
283 dst[40] = pt->iaoq[0]; dst[41] = pt->iaoq[1]; \
284 dst[42] = pt->iasq[0]; dst[43] = pt->iasq[1]; \
285 dst[44] = pt->sar; dst[45] = pt->iir; \
286 dst[46] = pt->isr; dst[47] = pt->ior; \
287 dst[48] = mfctl(22); dst[49] = mfctl(0); \
288 dst[50] = mfctl(24); dst[51] = mfctl(25); \
289 dst[52] = mfctl(26); dst[53] = mfctl(27); \
290 dst[54] = mfctl(28); dst[55] = mfctl(29); \
291 dst[56] = mfctl(30); dst[57] = mfctl(31); \
292 dst[58] = mfctl( 8); dst[59] = mfctl( 9); \
293 dst[60] = mfctl(12); dst[61] = mfctl(13); \
294 dst[62] = mfctl(10); dst[63] = mfctl(15);
295
296 #define CORE_DUMP_USE_REGSET
297
298 #define ELF_NGREG 80
299
300 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
301
302 #define ELF_NFPREG 32
303 typedef double elf_fpreg_t;
304 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
305
306 struct task_struct;
307
308 extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);
309 #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
310
311 struct pt_regs;
312
313
314 #define elf_check_arch(x) \
315 ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS)
316 #define compat_elf_check_arch(x) \
317 ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELFCLASS32)
318
319
320
321
322 #define ELF_DATA ELFDATA2MSB
323 #define ELF_ARCH EM_PARISC
324 #define ELF_OSABI ELFOSABI_LINUX
325
326
327
328
329
330
331
332
333
334 #define ELF_PLAT_INIT(_r, load_addr) _r->gr[23] = 0
335
336 #define ELF_EXEC_PAGESIZE 4096
337
338
339
340
341
342
343
344
345
346
347
348 #define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x01000000)
349
350
351
352
353
354 #define ELF_HWCAP 0
355
356
357 #define BRK_RND_MASK (is_32bit_task() ? 0x07ffUL : 0x3ffffUL)
358 #define MMAP_RND_MASK (is_32bit_task() ? 0x1fffUL : 0x3ffffUL)
359 #define STACK_RND_MASK MMAP_RND_MASK
360
361 struct mm_struct;
362 extern unsigned long arch_randomize_brk(struct mm_struct *);
363 #define arch_randomize_brk arch_randomize_brk
364
365 #endif