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 .set KSYM(__crc_\name), 0 58 .previous 59 #endif 60 #endif 61 .endm 62 #undef __put 63 64 #if defined(__KSYM_DEPS__) 65 66 #define __EXPORT_SYMBOL(sym, val, sec) === __KSYM_##sym === 67 68 #elif defined(CONFIG_TRIM_UNUSED_KSYMS) 69 70 #include <linux/kconfig.h> 71 #include <generated/autoksyms.h> 72 73 #define __EXPORT_SYMBOL(sym, val, sec) \ 74 __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym)) 75 #define __cond_export_sym(sym, val, sec, conf) \ 76 ___cond_export_sym(sym, val, sec, conf) 77 #define ___cond_export_sym(sym, val, sec, enabled) \ 78 __cond_export_sym_##enabled(sym, val, sec) 79 #define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec 80 #define __cond_export_sym_0(sym, val, sec) /* nothing */ 81 82 #else 83 #define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec 84 #endif 85 86 #define EXPORT_SYMBOL(name) \ 87 __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)),) 88 #define EXPORT_SYMBOL_GPL(name) \ 89 __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)), _gpl) 90 #define EXPORT_DATA_SYMBOL(name) \ 91 __EXPORT_SYMBOL(name, KSYM(name),) 92 #define EXPORT_DATA_SYMBOL_GPL(name) \ 93 __EXPORT_SYMBOL(name, KSYM(name),_gpl) 94 95 #endif 96