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) \ 73 __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym)) 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 95