Commit | Line | Data |
---|---|---|
2129a235 PD |
1 | /* |
2 | * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> | |
3 | * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> | |
4 | * Copyright (C) 2012 Regents of the University of California | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | */ | |
11 | ||
12 | #ifndef _ASM_RISCV_ELF_H | |
13 | #define _ASM_RISCV_ELF_H | |
14 | ||
15 | #include <uapi/asm/elf.h> | |
16 | #include <asm/auxvec.h> | |
17 | #include <asm/byteorder.h> | |
18 | ||
19 | /* TODO: Move definition into include/uapi/linux/elf-em.h */ | |
20 | #define EM_RISCV 0xF3 | |
21 | ||
22 | /* | |
23 | * These are used to set parameters in the core dumps. | |
24 | */ | |
25 | #define ELF_ARCH EM_RISCV | |
26 | ||
27 | #ifdef CONFIG_64BIT | |
28 | #define ELF_CLASS ELFCLASS64 | |
29 | #else | |
30 | #define ELF_CLASS ELFCLASS32 | |
31 | #endif | |
32 | ||
33 | #if defined(__LITTLE_ENDIAN) | |
34 | #define ELF_DATA ELFDATA2LSB | |
35 | #elif defined(__BIG_ENDIAN) | |
36 | #define ELF_DATA ELFDATA2MSB | |
37 | #else | |
38 | #error "Unknown endianness" | |
39 | #endif | |
40 | ||
41 | /* | |
42 | * This is used to ensure we don't load something for the wrong architecture. | |
43 | */ | |
44 | #define elf_check_arch(x) ((x)->e_machine == EM_RISCV) | |
45 | ||
46 | #define CORE_DUMP_USE_REGSET | |
47 | #define ELF_EXEC_PAGESIZE (PAGE_SIZE) | |
48 | ||
49 | /* | |
50 | * This is the location that an ET_DYN program is loaded if exec'ed. Typical | |
51 | * use of this is to invoke "./ld.so someprog" to test out a new version of | |
52 | * the loader. We need to make sure that it is out of the way of the program | |
53 | * that it will "exec", and that there is sufficient room for the brk. | |
54 | */ | |
55 | #define ELF_ET_DYN_BASE ((TASK_SIZE / 3) * 2) | |
56 | ||
57 | /* | |
58 | * This yields a mask that user programs can use to figure out what | |
59 | * instruction set this CPU supports. This could be done in user space, | |
60 | * but it's not easy, and we've already done it here. | |
61 | */ | |
62 | #define ELF_HWCAP (elf_hwcap) | |
63 | extern unsigned long elf_hwcap; | |
64 | ||
65 | /* | |
66 | * This yields a string that ld.so will use to load implementation | |
67 | * specific libraries for optimization. This is more specific in | |
68 | * intent than poking at uname or /proc/cpuinfo. | |
69 | */ | |
70 | #define ELF_PLATFORM (NULL) | |
71 | ||
72 | #define ARCH_DLINFO \ | |
73 | do { \ | |
74 | NEW_AUX_ENT(AT_SYSINFO_EHDR, \ | |
75 | (elf_addr_t)current->mm->context.vdso); \ | |
76 | } while (0) | |
77 | ||
78 | ||
79 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES | |
80 | struct linux_binprm; | |
81 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, | |
82 | int uses_interp); | |
83 | ||
84 | #endif /* _ASM_RISCV_ELF_H */ |