Commit | Line | Data |
---|---|---|
bf49d9dd | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
f5016932 PG |
2 | #ifndef _LINUX_EXPORT_H |
3 | #define _LINUX_EXPORT_H | |
b67067f1 | 4 | |
ddb5cdba MY |
5 | #include <linux/compiler.h> |
6 | #include <linux/linkage.h> | |
d143b9db GKH |
7 | #include <linux/stringify.h> |
8 | ||
7b453719 MY |
9 | /* |
10 | * This comment block is used by fixdep. Please do not remove. | |
11 | * | |
12 | * When CONFIG_MODVERSIONS is changed from n to y, all source files having | |
13 | * EXPORT_SYMBOL variants must be re-compiled because genksyms is run as a | |
14 | * side effect of the *.o build rule. | |
15 | */ | |
16 | ||
ddb5cdba MY |
17 | #ifdef CONFIG_64BIT |
18 | #define __EXPORT_SYMBOL_REF(sym) \ | |
19 | .balign 8 ASM_NL \ | |
20 | .quad sym | |
7290d580 | 21 | #else |
ddb5cdba MY |
22 | #define __EXPORT_SYMBOL_REF(sym) \ |
23 | .balign 4 ASM_NL \ | |
24 | .long sym | |
7290d580 AB |
25 | #endif |
26 | ||
5e9e95cc | 27 | #define ___EXPORT_SYMBOL(sym, license, ns) \ |
ddb5cdba MY |
28 | .section ".export_symbol","a" ASM_NL \ |
29 | __export_symbol_##sym: ASM_NL \ | |
30 | .asciz license ASM_NL \ | |
31 | .asciz ns ASM_NL \ | |
32 | __EXPORT_SYMBOL_REF(sym) ASM_NL \ | |
33 | .previous | |
34 | ||
481461f5 | 35 | #if defined(__DISABLE_EXPORTS) |
f922c4ab AB |
36 | |
37 | /* | |
38 | * Allow symbol exports to be disabled completely so that C code may | |
39 | * be reused in other execution contexts such as the UEFI stub or the | |
40 | * decompressor. | |
41 | */ | |
8ed7e33a | 42 | #define __EXPORT_SYMBOL(sym, license, ns) |
f922c4ab | 43 | |
5e9e95cc | 44 | #elif defined(__GENKSYMS__) |
bbda5ec6 | 45 | |
8ed7e33a | 46 | #define __EXPORT_SYMBOL(sym, license, ns) __GENKSYMS_EXPORT_SYMBOL(sym) |
c1a95fda | 47 | |
5e9e95cc | 48 | #elif defined(__ASSEMBLY__) |
ddb5cdba | 49 | |
5e9e95cc MY |
50 | #define __EXPORT_SYMBOL(sym, license, ns) \ |
51 | ___EXPORT_SYMBOL(sym, license, ns) | |
8651ec01 | 52 | |
f2355416 | 53 | #else |
f2355416 | 54 | |
5e9e95cc MY |
55 | #define __EXPORT_SYMBOL(sym, license, ns) \ |
56 | extern typeof(sym) sym; \ | |
57 | __ADDRESSABLE(sym) \ | |
58 | asm(__stringify(___EXPORT_SYMBOL(sym, license, ns))) | |
f5016932 | 59 | |
481461f5 | 60 | #endif |
f5016932 | 61 | |
8e2adc6a | 62 | #ifdef DEFAULT_SYMBOL_NAMESPACE |
8ed7e33a | 63 | #define _EXPORT_SYMBOL(sym, license) __EXPORT_SYMBOL(sym, license, __stringify(DEFAULT_SYMBOL_NAMESPACE)) |
c3a6cf19 | 64 | #else |
8ed7e33a | 65 | #define _EXPORT_SYMBOL(sym, license) __EXPORT_SYMBOL(sym, license, "") |
8e2adc6a MM |
66 | #endif |
67 | ||
c3a6cf19 | 68 | #define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "") |
ddb5cdba | 69 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "GPL") |
d143b9db | 70 | #define EXPORT_SYMBOL_NS(sym, ns) __EXPORT_SYMBOL(sym, "", __stringify(ns)) |
ddb5cdba | 71 | #define EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, "GPL", __stringify(ns)) |
f5016932 PG |
72 | |
73 | #endif /* _LINUX_EXPORT_H */ |