]>
Commit | Line | Data |
---|---|---|
22823ab4 AV |
1 | #ifndef __ASM_GENERIC_EXPORT_H |
2 | #define __ASM_GENERIC_EXPORT_H | |
3 | ||
4 | #ifndef KSYM_FUNC | |
5 | #define KSYM_FUNC(x) x | |
6 | #endif | |
7 | #ifdef CONFIG_64BIT | |
8 | #define __put .quad | |
9 | #ifndef KSYM_ALIGN | |
10 | #define KSYM_ALIGN 8 | |
11 | #endif | |
12 | #ifndef KCRC_ALIGN | |
13 | #define KCRC_ALIGN 8 | |
14 | #endif | |
15 | #else | |
16 | #define __put .long | |
17 | #ifndef KSYM_ALIGN | |
18 | #define KSYM_ALIGN 4 | |
19 | #endif | |
20 | #ifndef KCRC_ALIGN | |
21 | #define KCRC_ALIGN 4 | |
22 | #endif | |
23 | #endif | |
24 | ||
25 | #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX | |
26 | #define KSYM(name) _##name | |
27 | #else | |
28 | #define KSYM(name) name | |
29 | #endif | |
30 | ||
31 | /* | |
32 | * note on .section use: @progbits vs %progbits nastiness doesn't matter, | |
33 | * since we immediately emit into those sections anyway. | |
34 | */ | |
35 | .macro ___EXPORT_SYMBOL name,val,sec | |
36 | #ifdef CONFIG_MODULES | |
37 | .globl KSYM(__ksymtab_\name) | |
38 | .section ___ksymtab\sec+\name,"a" | |
39 | .balign KSYM_ALIGN | |
40 | KSYM(__ksymtab_\name): | |
41 | __put \val, KSYM(__kstrtab_\name) | |
42 | .previous | |
43 | .section __ksymtab_strings,"a" | |
44 | KSYM(__kstrtab_\name): | |
45 | #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX | |
46 | .asciz "_\name" | |
47 | #else | |
48 | .asciz "\name" | |
49 | #endif | |
50 | .previous | |
51 | #ifdef CONFIG_MODVERSIONS | |
52 | .section ___kcrctab\sec+\name,"a" | |
53 | .balign KCRC_ALIGN | |
54 | KSYM(__kcrctab_\name): | |
55 | __put KSYM(__crc_\name) | |
56 | .weak KSYM(__crc_\name) | |
57 | .previous | |
58 | #endif | |
59 | #endif | |
60 | .endm | |
61 | #undef __put | |
62 | ||
63 | #if defined(__KSYM_DEPS__) | |
64 | ||
65 | #define __EXPORT_SYMBOL(sym, val, sec) === __KSYM_##sym === | |
66 | ||
67 | #elif defined(CONFIG_TRIM_UNUSED_KSYMS) | |
68 | ||
69 | #include <linux/kconfig.h> | |
70 | #include <generated/autoksyms.h> | |
71 | ||
72 | #define __EXPORT_SYMBOL(sym, val, sec) \ | |
c0a0aba8 | 73 | __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym)) |
22823ab4 AV |
74 | #define __cond_export_sym(sym, val, sec, conf) \ |
75 | ___cond_export_sym(sym, val, sec, conf) | |
76 | #define ___cond_export_sym(sym, val, sec, enabled) \ | |
77 | __cond_export_sym_##enabled(sym, val, sec) | |
78 | #define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec | |
79 | #define __cond_export_sym_0(sym, val, sec) /* nothing */ | |
80 | ||
81 | #else | |
82 | #define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec | |
83 | #endif | |
84 | ||
85 | #define EXPORT_SYMBOL(name) \ | |
86 | __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)),) | |
87 | #define EXPORT_SYMBOL_GPL(name) \ | |
88 | __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)), _gpl) | |
89 | #define EXPORT_DATA_SYMBOL(name) \ | |
90 | __EXPORT_SYMBOL(name, KSYM(name),) | |
91 | #define EXPORT_DATA_SYMBOL_GPL(name) \ | |
92 | __EXPORT_SYMBOL(name, KSYM(name),_gpl) | |
93 | ||
94 | #endif |