Commit | Line | Data |
---|---|---|
e84e008e ST |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* | |
3 | * Clang Control Flow Integrity (CFI) type definitions. | |
4 | */ | |
5 | #ifndef _LINUX_CFI_TYPES_H | |
6 | #define _LINUX_CFI_TYPES_H | |
7 | ||
8 | #ifdef __ASSEMBLY__ | |
9 | #include <linux/linkage.h> | |
10 | ||
11 | #ifdef CONFIG_CFI_CLANG | |
12 | /* | |
13 | * Use the __kcfi_typeid_<function> type identifier symbol to | |
14 | * annotate indirectly called assembly functions. The compiler emits | |
15 | * these symbols for all address-taken function declarations in C | |
16 | * code. | |
17 | */ | |
18 | #ifndef __CFI_TYPE | |
19 | #define __CFI_TYPE(name) \ | |
20 | .4byte __kcfi_typeid_##name | |
21 | #endif | |
22 | ||
23 | #define SYM_TYPED_ENTRY(name, linkage, align...) \ | |
24 | linkage(name) ASM_NL \ | |
25 | align ASM_NL \ | |
26 | __CFI_TYPE(name) ASM_NL \ | |
27 | name: | |
28 | ||
29 | #define SYM_TYPED_START(name, linkage, align...) \ | |
30 | SYM_TYPED_ENTRY(name, linkage, align) | |
31 | ||
32 | #else /* CONFIG_CFI_CLANG */ | |
33 | ||
34 | #define SYM_TYPED_START(name, linkage, align...) \ | |
35 | SYM_START(name, linkage, align) | |
36 | ||
37 | #endif /* CONFIG_CFI_CLANG */ | |
38 | ||
39 | #ifndef SYM_TYPED_FUNC_START | |
40 | #define SYM_TYPED_FUNC_START(name) \ | |
41 | SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN) | |
42 | #endif | |
43 | ||
44 | #endif /* __ASSEMBLY__ */ | |
45 | #endif /* _LINUX_CFI_TYPES_H */ |