xref: /linux/arch/riscv/include/asm/vdso.h (revision 570f7e331f5febb30f1384817463c7e42b65ca7d)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2012 ARM Limited
4  * Copyright (C) 2014 Regents of the University of California
5  * Copyright (C) 2017 SiFive
6  */
7 
8 #ifndef _ASM_RISCV_VDSO_H
9 #define _ASM_RISCV_VDSO_H
10 
11 /*
12  * All systems with an MMU have a VDSO, but systems without an MMU don't
13  * support shared libraries and therefore don't have one.
14  */
15 
16 #define __VDSO_PAGES    4
17 
18 #ifndef __ASSEMBLER__
19 
20 #ifdef CONFIG_MMU
21 #include <generated/vdso-offsets.h>
22 #else
23 extern size_t __vdso_alternatives_start_offset, __vdso_alternatives_end_offset;
24 #endif
25 
26 #ifdef CONFIG_RISCV_USER_CFI
27 #include <generated/vdso-cfi-offsets.h>
28 #else
29 extern size_t __vdso_alternatives_start_cfi_offset, __vdso_alternatives_end_cfi_offset;
30 #endif
31 
32 #ifdef CONFIG_RISCV_USER_CFI
33 #define VDSO_SYMBOL(base, name)							\
34 	  (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZIMOP) ?			\
35 	  (void __user *)((unsigned long)(base) + __vdso_##name##_cfi_offset) :	\
36 	  (void __user *)((unsigned long)(base) + __vdso_##name##_offset))
37 #else
38 #define VDSO_SYMBOL(base, name)							\
39 	  ((void __user *)((unsigned long)(base) + __vdso_##name##_offset))
40 #endif
41 
42 #ifdef CONFIG_COMPAT
43 #include <generated/compat_vdso-offsets.h>
44 
45 #define COMPAT_VDSO_SYMBOL(base, name)						\
46 	(void __user *)((unsigned long)(base) + compat__vdso_##name##_offset)
47 
48 #else
49 extern size_t compat__vdso_alternatives_start_offset, compat__vdso_alternatives_end_offset;
50 #endif /* CONFIG_COMPAT */
51 
52 extern char vdso_start[], vdso_end[];
53 extern char vdso_cfi_start[], vdso_cfi_end[];
54 extern char compat_vdso_start[], compat_vdso_end[];
55 
56 #endif /* !__ASSEMBLER__ */
57 
58 #endif /* _ASM_RISCV_VDSO_H */
59