1
2
3
4
5
6
7
8
9#ifndef _ASM_POWERPC_ELF_H
10#define _ASM_POWERPC_ELF_H
11
12#include <linux/sched.h>
13#include <asm/page.h>
14#include <asm/string.h>
15#include <uapi/asm/elf.h>
16
17
18
19
20#define elf_check_arch(x) ((x)->e_machine == ELF_ARCH)
21#define compat_elf_check_arch(x) ((x)->e_machine == EM_PPC)
22
23#define CORE_DUMP_USE_REGSET
24#define ELF_EXEC_PAGESIZE PAGE_SIZE
25
26
27
28
29
30
31extern unsigned long randomize_et_dyn(unsigned long base);
32#define ELF_ET_DYN_BASE (randomize_et_dyn(0x20000000))
33
34
35
36
37
38
39
40
41
42
43#define PPC_ELF_CORE_COPY_REGS(elf_regs, regs) \
44 int i, nregs = min(sizeof(*regs) / sizeof(unsigned long), \
45 (size_t)ELF_NGREG); \
46 for (i = 0; i < nregs; i++) \
47 elf_regs[i] = ((unsigned long *) regs)[i]; \
48 memset(&elf_regs[i], 0, (ELF_NGREG - i) * sizeof(elf_regs[0]))
49
50
51static inline void ppc_elf_core_copy_regs(elf_gregset_t elf_regs,
52 struct pt_regs *regs)
53{
54 PPC_ELF_CORE_COPY_REGS(elf_regs, regs);
55}
56#define ELF_CORE_COPY_REGS(gregs, regs) ppc_elf_core_copy_regs(gregs, regs);
57
58typedef elf_vrregset_t elf_fpxregset_t;
59
60
61
62
63# define ELF_HWCAP (cur_cpu_spec->cpu_user_features)
64# define ELF_HWCAP2 (cur_cpu_spec->cpu_user_features2)
65
66
67
68
69
70#define ELF_PLATFORM (cur_cpu_spec->platform)
71
72
73
74
75
76
77
78#define ELF_BASE_PLATFORM (powerpc_base_platform)
79
80#ifdef __powerpc64__
81# define ELF_PLAT_INIT(_r, load_addr) do { \
82 _r->gpr[2] = load_addr; \
83} while (0)
84#endif
85
86#ifdef __powerpc64__
87# define SET_PERSONALITY(ex) \
88do { \
89 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \
90 set_thread_flag(TIF_32BIT); \
91 else \
92 clear_thread_flag(TIF_32BIT); \
93 if (personality(current->personality) != PER_LINUX32) \
94 set_personality(PER_LINUX | \
95 (current->personality & (~PER_MASK))); \
96} while (0)
97
98
99
100
101
102
103
104# define elf_read_implies_exec(ex, exec_stk) (is_32bit_task() ? \
105 (exec_stk == EXSTACK_DEFAULT) : 0)
106#else
107# define elf_read_implies_exec(ex, exec_stk) (exec_stk == EXSTACK_DEFAULT)
108#endif
109
110extern int dcache_bsize;
111extern int icache_bsize;
112extern int ucache_bsize;
113
114
115#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
116struct linux_binprm;
117extern int arch_setup_additional_pages(struct linux_binprm *bprm,
118 int uses_interp);
119#define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b)
120
121
122#define STACK_RND_MASK (is_32bit_task() ? \
123 (0x7ff >> (PAGE_SHIFT - 12)) : \
124 (0x3ffff >> (PAGE_SHIFT - 12)))
125
126extern unsigned long arch_randomize_brk(struct mm_struct *mm);
127#define arch_randomize_brk arch_randomize_brk
128
129
130#ifdef CONFIG_SPU_BASE
131
132#define NT_SPU 1
133
134#define ARCH_HAVE_EXTRA_ELF_NOTES
135
136#endif
137
138#endif
139