at v4.9 2.2 kB view raw
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 40KSYM(__ksymtab_\name): 41 __put \val, KSYM(__kstrtab_\name) 42 .previous 43 .section __ksymtab_strings,"a" 44KSYM(__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 54KSYM(__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