Merge tag 'gpio-v5.2-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux...
[linux-2.6-microblaze.git] / arch / riscv / include / asm / elf.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
4  * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
5  * Copyright (C) 2012 Regents of the University of California
6  */
7
8 #ifndef _ASM_RISCV_ELF_H
9 #define _ASM_RISCV_ELF_H
10
11 #include <uapi/asm/elf.h>
12 #include <asm/auxvec.h>
13 #include <asm/byteorder.h>
14
15 /*
16  * These are used to set parameters in the core dumps.
17  */
18 #define ELF_ARCH        EM_RISCV
19
20 #ifdef CONFIG_64BIT
21 #define ELF_CLASS       ELFCLASS64
22 #else
23 #define ELF_CLASS       ELFCLASS32
24 #endif
25
26 #define ELF_DATA        ELFDATA2LSB
27
28 /*
29  * This is used to ensure we don't load something for the wrong architecture.
30  */
31 #define elf_check_arch(x) ((x)->e_machine == EM_RISCV)
32
33 #define CORE_DUMP_USE_REGSET
34 #define ELF_EXEC_PAGESIZE       (PAGE_SIZE)
35
36 /*
37  * This is the location that an ET_DYN program is loaded if exec'ed.  Typical
38  * use of this is to invoke "./ld.so someprog" to test out a new version of
39  * the loader.  We need to make sure that it is out of the way of the program
40  * that it will "exec", and that there is sufficient room for the brk.
41  */
42 #define ELF_ET_DYN_BASE         ((TASK_SIZE / 3) * 2)
43
44 /*
45  * This yields a mask that user programs can use to figure out what
46  * instruction set this CPU supports.  This could be done in user space,
47  * but it's not easy, and we've already done it here.
48  */
49 #define ELF_HWCAP       (elf_hwcap)
50 extern unsigned long elf_hwcap;
51
52 /*
53  * This yields a string that ld.so will use to load implementation
54  * specific libraries for optimization.  This is more specific in
55  * intent than poking at uname or /proc/cpuinfo.
56  */
57 #define ELF_PLATFORM    (NULL)
58
59 #define ARCH_DLINFO                                             \
60 do {                                                            \
61         NEW_AUX_ENT(AT_SYSINFO_EHDR,                            \
62                 (elf_addr_t)current->mm->context.vdso);         \
63 } while (0)
64
65
66 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
67 struct linux_binprm;
68 extern int arch_setup_additional_pages(struct linux_binprm *bprm,
69         int uses_interp);
70
71 #endif /* _ASM_RISCV_ELF_H */