1
2#ifndef __ASMPARISC_ELF_H
3#define __ASMPARISC_ELF_H
4
5
6
7
8
9#include <asm/ptrace.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
159typedef struct elf32_fdesc {
160 __u32 addr;
161 __u32 gp;
162} Elf32_Fdesc;
163
164
165typedef struct elf64_fdesc {
166 __u64 dummy[2];
167
168 __u64 addr;
169 __u64 gp;
170} Elf64_Fdesc;
171
172#ifdef __KERNEL__
173
174#ifdef CONFIG_64BIT
175#define Elf_Fdesc Elf64_Fdesc
176#else
177#define Elf_Fdesc Elf32_Fdesc
178#endif
179
180#endif
181
182
183
184#define PT_HP_TLS (PT_LOOS + 0x0)
185#define PT_HP_CORE_NONE (PT_LOOS + 0x1)
186#define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
187#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
188#define PT_HP_CORE_COMM (PT_LOOS + 0x4)
189#define PT_HP_CORE_PROC (PT_LOOS + 0x5)
190#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
191#define PT_HP_CORE_STACK (PT_LOOS + 0x7)
192#define PT_HP_CORE_SHM (PT_LOOS + 0x8)
193#define PT_HP_CORE_MMF (PT_LOOS + 0x9)
194#define PT_HP_PARALLEL (PT_LOOS + 0x10)
195#define PT_HP_FASTBIND (PT_LOOS + 0x11)
196#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
197#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
198#define PT_HP_STACK (PT_LOOS + 0x14)
199
200#define PT_PARISC_ARCHEXT 0x70000000
201#define PT_PARISC_UNWIND 0x70000001
202
203
204
205#define PF_PARISC_SBP 0x08000000
206
207#define PF_HP_PAGE_SIZE 0x00100000
208#define PF_HP_FAR_SHARED 0x00200000
209#define PF_HP_NEAR_SHARED 0x00400000
210#define PF_HP_CODE 0x01000000
211#define PF_HP_MODIFY 0x02000000
212#define PF_HP_LAZYSWAP 0x04000000
213#define PF_HP_SBP 0x08000000
214
215
216
217
218
219
220
221
222#ifndef ELF_CLASS
223
224
225
226
227
228
229
230
231
232
233
234#ifdef CONFIG_64BIT
235#define ELF_CLASS ELFCLASS64
236#else
237#define ELF_CLASS ELFCLASS32
238#endif
239
240typedef unsigned long elf_greg_t;
241
242
243
244
245
246
247
248#define ELF_PLATFORM ("PARISC\0")
249
250#define SET_PERSONALITY(ex) \
251 set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
252 current->thread.map_base = DEFAULT_MAP_BASE; \
253 current->thread.task_size = DEFAULT_TASK_SIZE \
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278#define ELF_CORE_COPY_REGS(dst, pt) \
279 memset(dst, 0, sizeof(dst)); \
280 memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); \
281 memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); \
282 memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); \
283 memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); \
284 dst[44] = pt->sar; dst[45] = pt->iir; \
285 dst[46] = pt->isr; dst[47] = pt->ior; \
286 dst[48] = mfctl(22); dst[49] = mfctl(0); \
287 dst[50] = mfctl(24); dst[51] = mfctl(25); \
288 dst[52] = mfctl(26); dst[53] = mfctl(27); \
289 dst[54] = mfctl(28); dst[55] = mfctl(29); \
290 dst[56] = mfctl(30); dst[57] = mfctl(31); \
291 dst[58] = mfctl( 8); dst[59] = mfctl( 9); \
292 dst[60] = mfctl(12); dst[61] = mfctl(13); \
293 dst[62] = mfctl(10); dst[63] = mfctl(15);
294
295#endif
296
297#define ELF_NGREG 80
298
299typedef elf_greg_t elf_gregset_t[ELF_NGREG];
300
301#define ELF_NFPREG 32
302typedef double elf_fpreg_t;
303typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
304
305struct task_struct;
306
307extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);
308#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
309
310struct pt_regs;
311
312
313#define elf_check_arch(x) ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS)
314
315
316
317
318#define ELF_DATA ELFDATA2MSB
319#define ELF_ARCH EM_PARISC
320#define ELF_OSABI ELFOSABI_LINUX
321
322
323
324
325
326
327
328
329
330#define ELF_PLAT_INIT(_r, load_addr) _r->gr[23] = 0
331
332#define ELF_EXEC_PAGESIZE 4096
333
334
335
336
337
338
339
340
341
342
343
344#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x01000000)
345
346
347
348
349
350#define ELF_HWCAP 0
351
352
353#define BRK_RND_MASK (is_32bit_task() ? 0x07ffUL : 0x3ffffUL)
354#define MMAP_RND_MASK (is_32bit_task() ? 0x1fffUL : 0x3ffffUL)
355#define STACK_RND_MASK MMAP_RND_MASK
356
357struct mm_struct;
358extern unsigned long arch_randomize_brk(struct mm_struct *);
359#define arch_randomize_brk arch_randomize_brk
360
361#endif
362