xref: /openbmc/linux/arch/riscv/include/asm/elf.h (revision 3e30a927)
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 #ifdef CONFIG_MMU
60 #define ARCH_DLINFO						\
61 do {								\
62 	NEW_AUX_ENT(AT_SYSINFO_EHDR,				\
63 		(elf_addr_t)current->mm->context.vdso);		\
64 } while (0)
65 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
66 struct linux_binprm;
67 extern int arch_setup_additional_pages(struct linux_binprm *bprm,
68 	int uses_interp);
69 #endif /* CONFIG_MMU */
70 
71 #endif /* _ASM_RISCV_ELF_H */
72