Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm64
include
asm
elf.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2012 ARM Ltd.
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License version 2 as
6
* published by the Free Software Foundation.
7
*
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
12
*
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
15
*/
16
#ifndef __ASM_ELF_H
17
#define __ASM_ELF_H
18
19
#include <asm/hwcap.h>
20
21
/*
22
* ELF register definitions..
23
*/
24
#include <asm/ptrace.h>
25
#include <asm/user.h>
26
27
typedef
unsigned
long
elf_greg_t
;
28
29
#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
30
typedef
elf_greg_t
elf_gregset_t
[
ELF_NGREG
];
31
typedef
struct
user_fpsimd_state
elf_fpregset_t
;
32
33
#define EM_AARCH64 183
34
35
/*
36
* AArch64 static relocation types.
37
*/
38
39
/* Miscellaneous. */
40
#define R_ARM_NONE 0
41
#define R_AARCH64_NONE 256
42
43
/* Data. */
44
#define R_AARCH64_ABS64 257
45
#define R_AARCH64_ABS32 258
46
#define R_AARCH64_ABS16 259
47
#define R_AARCH64_PREL64 260
48
#define R_AARCH64_PREL32 261
49
#define R_AARCH64_PREL16 262
50
51
/* Instructions. */
52
#define R_AARCH64_MOVW_UABS_G0 263
53
#define R_AARCH64_MOVW_UABS_G0_NC 264
54
#define R_AARCH64_MOVW_UABS_G1 265
55
#define R_AARCH64_MOVW_UABS_G1_NC 266
56
#define R_AARCH64_MOVW_UABS_G2 267
57
#define R_AARCH64_MOVW_UABS_G2_NC 268
58
#define R_AARCH64_MOVW_UABS_G3 269
59
60
#define R_AARCH64_MOVW_SABS_G0 270
61
#define R_AARCH64_MOVW_SABS_G1 271
62
#define R_AARCH64_MOVW_SABS_G2 272
63
64
#define R_AARCH64_LD_PREL_LO19 273
65
#define R_AARCH64_ADR_PREL_LO21 274
66
#define R_AARCH64_ADR_PREL_PG_HI21 275
67
#define R_AARCH64_ADR_PREL_PG_HI21_NC 276
68
#define R_AARCH64_ADD_ABS_LO12_NC 277
69
#define R_AARCH64_LDST8_ABS_LO12_NC 278
70
71
#define R_AARCH64_TSTBR14 279
72
#define R_AARCH64_CONDBR19 280
73
#define R_AARCH64_JUMP26 282
74
#define R_AARCH64_CALL26 283
75
#define R_AARCH64_LDST16_ABS_LO12_NC 284
76
#define R_AARCH64_LDST32_ABS_LO12_NC 285
77
#define R_AARCH64_LDST64_ABS_LO12_NC 286
78
#define R_AARCH64_LDST128_ABS_LO12_NC 299
79
80
#define R_AARCH64_MOVW_PREL_G0 287
81
#define R_AARCH64_MOVW_PREL_G0_NC 288
82
#define R_AARCH64_MOVW_PREL_G1 289
83
#define R_AARCH64_MOVW_PREL_G1_NC 290
84
#define R_AARCH64_MOVW_PREL_G2 291
85
#define R_AARCH64_MOVW_PREL_G2_NC 292
86
#define R_AARCH64_MOVW_PREL_G3 293
87
88
/*
89
* These are used to set parameters in the core dumps.
90
*/
91
#define ELF_CLASS ELFCLASS64
92
#define ELF_DATA ELFDATA2LSB
93
#define ELF_ARCH EM_AARCH64
94
95
#define ELF_PLATFORM_SIZE 16
96
#define ELF_PLATFORM ("aarch64")
97
98
/*
99
* This is used to ensure we don't load something for the wrong architecture.
100
*/
101
#define elf_check_arch(x) ((x)->e_machine == EM_AARCH64)
102
103
#define elf_read_implies_exec(ex,stk) (stk != EXSTACK_DISABLE_X)
104
105
#define CORE_DUMP_USE_REGSET
106
#define ELF_EXEC_PAGESIZE PAGE_SIZE
107
108
/*
109
* This is the location that an ET_DYN program is loaded if exec'ed. Typical
110
* use of this is to invoke "./ld.so someprog" to test out a new version of
111
* the loader. We need to make sure that it is out of the way of the program
112
* that it will "exec", and that there is sufficient room for the brk.
113
*/
114
extern
unsigned
long
randomize_et_dyn
(
unsigned
long
base);
115
#define ELF_ET_DYN_BASE (randomize_et_dyn(2 * TASK_SIZE_64 / 3))
116
117
/*
118
* When the program starts, a1 contains a pointer to a function to be
119
* registered with atexit, as per the SVR4 ABI. A value of 0 means we have no
120
* such handler.
121
*/
122
#define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] = 0
123
124
#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT);
125
126
#define ARCH_DLINFO \
127
do { \
128
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
129
(elf_addr_t)current->mm->context.vdso); \
130
} while (0)
131
132
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
133
struct
linux_binprm
;
134
extern
int
arch_setup_additional_pages
(
struct
linux_binprm
*bprm,
135
int
uses_interp);
136
137
/* 1GB of VA */
138
#ifdef CONFIG_COMPAT
139
#define STACK_RND_MASK (test_thread_flag(TIF_32BIT) ? \
140
0x7ff >> (PAGE_SHIFT - 12) : \
141
0x3ffff >> (PAGE_SHIFT - 12))
142
#else
143
#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12))
144
#endif
145
146
struct
mm_struct
;
147
extern
unsigned
long
arch_randomize_brk
(
struct
mm_struct
*mm);
148
#define arch_randomize_brk arch_randomize_brk
149
150
#ifdef CONFIG_COMPAT
151
#define EM_ARM 40
152
#define COMPAT_ELF_PLATFORM ("v8l")
153
154
#define COMPAT_ELF_ET_DYN_BASE (randomize_et_dyn(2 * TASK_SIZE_32 / 3))
155
156
/* AArch32 registers. */
157
#define COMPAT_ELF_NGREG 18
158
typedef
unsigned
int
compat_elf_greg_t
;
159
typedef
compat_elf_greg_t
compat_elf_gregset_t
[
COMPAT_ELF_NGREG
];
160
161
/* AArch32 EABI. */
162
#define EF_ARM_EABI_MASK 0xff000000
163
#define compat_elf_check_arch(x) (((x)->e_machine == EM_ARM) && \
164
((x)->e_flags & EF_ARM_EABI_MASK))
165
166
#define compat_start_thread compat_start_thread
167
#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT);
168
#define COMPAT_ARCH_DLINFO
169
extern
int
aarch32_setup_vectors_page(
struct
linux_binprm
*bprm,
170
int
uses_interp);
171
#define compat_arch_setup_additional_pages \
172
aarch32_setup_vectors_page
173
174
#endif
/* CONFIG_COMPAT */
175
176
#endif
Generated on Thu Jan 10 2013 12:49:32 for Linux Kernel by
1.8.2