@@ -27,32 +27,42 @@
#endif
.endm
+#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
+#define KSYM(name) _##name
+#else
+#define KSYM(name) name
+#endif
+
/*
* note on .section use: @progbits vs %progbits nastiness doesn't matter,
* since we immediately emit into those sections anyway.
*/
.macro ___EXPORT_SYMBOL name,val,sec
#ifdef CONFIG_MODULES
- .globl __ksymtab_\name
+ .globl KSYM(__ksymtab_\name)
.section ___ksymtab\sec+\name,"a"
.balign KSYM_ALIGN
-__ksymtab_\name:
- __put \val, __kstrtab_\name
+KSYM(__ksymtab_\name):
+ __put \val, KSYM(__kstrtab_\name)
.previous
.section __ksymtab_strings,"a"
-__kstrtab_\name:
+KSYM(__kstrtab_\name):
+#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
+ .asciz "_\name"
+#else
.asciz "\name"
+#endif
.previous
#ifdef CONFIG_MODVERSIONS
.section ___kcrctab\sec+\name,"a"
.balign KCRC_ALIGN
-__kcrctab_\name:
+KSYM(__kcrctab_\name):
#if defined(CONFIG_MODULE_REL_CRCS)
- .long __crc_\name - .
+ .long KSYM(__crc_\name) - .
#else
- .long __crc_\name
+ .long KSYM(__crc_\name)
#endif
- .weak __crc_\name
+ .weak KSYM(__crc_\name)
.previous
#endif
#endif
@@ -85,12 +95,12 @@ __ksym_marker_\sym:
#endif
#define EXPORT_SYMBOL(name) \
- __EXPORT_SYMBOL(name, KSYM_FUNC(name),)
+ __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)),)
#define EXPORT_SYMBOL_GPL(name) \
- __EXPORT_SYMBOL(name, KSYM_FUNC(name), _gpl)
+ __EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)), _gpl)
#define EXPORT_DATA_SYMBOL(name) \
- __EXPORT_SYMBOL(name, name,)
+ __EXPORT_SYMBOL(name, KSYM(name),)
#define EXPORT_DATA_SYMBOL_GPL(name) \
- __EXPORT_SYMBOL(name, name,_gpl)
+ __EXPORT_SYMBOL(name, KSYM(name),_gpl)
#endif
@@ -10,6 +10,19 @@
* hackers place grumpy comments in header files.
*/
+/* Some toolchains use a `_' prefix for all user symbols. */
+#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
+#define __VMLINUX_SYMBOL(x) _##x
+#define __VMLINUX_SYMBOL_STR(x) "_" #x
+#else
+#define __VMLINUX_SYMBOL(x) x
+#define __VMLINUX_SYMBOL_STR(x) #x
+#endif
+
+/* Indirect, so macros are expanded before pasting. */
+#define VMLINUX_SYMBOL(x) __VMLINUX_SYMBOL(x)
+#define VMLINUX_SYMBOL_STR(x) __VMLINUX_SYMBOL_STR(x)
+
#ifndef __ASSEMBLY__
#ifdef MODULE
extern struct module __this_module;
@@ -27,14 +40,14 @@ extern struct module __this_module;
#if defined(CONFIG_MODULE_REL_CRCS)
#define __CRC_SYMBOL(sym, sec) \
asm(" .section \"___kcrctab" sec "+" #sym "\", \"a\" \n" \
- " .weak __crc_" #sym " \n" \
- " .long __crc_" #sym " - . \n" \
+ " .weak " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
+ " .long " VMLINUX_SYMBOL_STR(__crc_##sym) " - . \n" \
" .previous \n");
#else
#define __CRC_SYMBOL(sym, sec) \
asm(" .section \"___kcrctab" sec "+" #sym "\", \"a\" \n" \
- " .weak __crc_" #sym " \n" \
- " .long __crc_" #sym " \n" \
+ " .weak " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
+ " .long " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
" .previous \n");
#endif
#else
@@ -80,7 +93,7 @@ struct kernel_symbol {
__CRC_SYMBOL(sym, sec) \
static const char __kstrtab_##sym[] \
__attribute__((section("__ksymtab_strings"), used, aligned(1))) \
- = #sym; \
+ = VMLINUX_SYMBOL_STR(#sym); \
__KSYMTAB_ENTRY(sym, sec)
#if defined(__DISABLE_EXPORTS)
for lkl, mingw32 requires underscore-ed symbols. This reverts commit 94e58e0ac31284fa26597c0e00a9b1d87a691d02. Signed-off-by: Hajime Tazaki <thehajime@gmail.com> --- include/asm-generic/export.h | 34 ++++++++++++++++++++++------------ include/linux/export.h | 23 ++++++++++++++++++----- 2 files changed, 40 insertions(+), 17 deletions(-)