diff options
Diffstat (limited to 'include/asm-generic/export.h')
-rw-r--r-- | include/asm-generic/export.h | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h index 719db1968d81..294d6ae785d4 100644 --- a/include/asm-generic/export.h +++ b/include/asm-generic/export.h @@ -5,12 +5,10 @@ #define KSYM_FUNC(x) x #endif #ifdef CONFIG_64BIT -#define __put .quad #ifndef KSYM_ALIGN #define KSYM_ALIGN 8 #endif #else -#define __put .long #ifndef KSYM_ALIGN #define KSYM_ALIGN 4 #endif @@ -19,11 +17,15 @@ #define KCRC_ALIGN 4 #endif -#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX -#define KSYM(name) _##name +.macro __put, val, name +#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS + .long \val - ., \name - . +#elif defined(CONFIG_64BIT) + .quad \val, \name #else -#define KSYM(name) name + .long \val, \name #endif +.endm /* * note on .section use: @progbits vs %progbits nastiness doesn't matter, @@ -31,46 +33,45 @@ */ .macro ___EXPORT_SYMBOL name,val,sec #ifdef CONFIG_MODULES - .globl KSYM(__ksymtab_\name) + .globl __ksymtab_\name .section ___ksymtab\sec+\name,"a" .balign KSYM_ALIGN -KSYM(__ksymtab_\name): - __put \val, KSYM(__kstrtab_\name) +__ksymtab_\name: + __put \val, __kstrtab_\name .previous .section __ksymtab_strings,"a" -KSYM(__kstrtab_\name): -#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX - .asciz "_\name" -#else +__kstrtab_\name: .asciz "\name" -#endif .previous #ifdef CONFIG_MODVERSIONS .section ___kcrctab\sec+\name,"a" .balign KCRC_ALIGN -KSYM(__kcrctab_\name): +__kcrctab_\name: #if defined(CONFIG_MODULE_REL_CRCS) - .long KSYM(__crc_\name) - . + .long __crc_\name - . #else - .long KSYM(__crc_\name) + .long __crc_\name #endif - .weak KSYM(__crc_\name) + .weak __crc_\name .previous #endif #endif .endm #undef __put -#if defined(__KSYM_DEPS__) - -#define __EXPORT_SYMBOL(sym, val, sec) === __KSYM_##sym === - -#elif defined(CONFIG_TRIM_UNUSED_KSYMS) +#if defined(CONFIG_TRIM_UNUSED_KSYMS) #include <linux/kconfig.h> #include <generated/autoksyms.h> +.macro __ksym_marker sym + .section ".discard.ksym","a" +__ksym_marker_\sym: + .previous +.endm + #define __EXPORT_SYMBOL(sym, val, sec) \ + __ksym_marker sym; \ __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym)) #define __cond_export_sym(sym, val, sec, conf) \ ___cond_export_sym(sym, val, sec, conf) @@ -84,12 +85,12 @@ KSYM(__kcrctab_\name): #endif #define EXPORT_SYMBOL(name) \ - __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)),) + __EXPORT_SYMBOL(name, KSYM_FUNC(name),) #define EXPORT_SYMBOL_GPL(name) \ - __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)), _gpl) + __EXPORT_SYMBOL(name, KSYM_FUNC(name), _gpl) #define EXPORT_DATA_SYMBOL(name) \ - __EXPORT_SYMBOL(name, KSYM(name),) + __EXPORT_SYMBOL(name, name,) #define EXPORT_DATA_SYMBOL_GPL(name) \ - __EXPORT_SYMBOL(name, KSYM(name),_gpl) + __EXPORT_SYMBOL(name, name,_gpl) #endif |