blob: 4d73e6e3c66c6977acd08e97fa93e2e229a9b283 [file] [log] [blame]
Al Viro22823ab2016-01-11 10:54:54 -05001#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
Al Viro22823ab2016-01-11 10:54:54 -05008#ifndef KSYM_ALIGN
9#define KSYM_ALIGN 8
10#endif
Al Viro22823ab2016-01-11 10:54:54 -050011#else
Al Viro22823ab2016-01-11 10:54:54 -050012#ifndef KSYM_ALIGN
13#define KSYM_ALIGN 4
14#endif
Ard Biesheuvel71810db2017-02-03 09:54:06 +000015#endif
Al Viro22823ab2016-01-11 10:54:54 -050016#ifndef KCRC_ALIGN
17#define KCRC_ALIGN 4
18#endif
Al Viro22823ab2016-01-11 10:54:54 -050019
Ard Biesheuvel7290d582018-08-21 21:56:09 -070020.macro __put, val, name
21#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
22 .long \val - ., \name - .
23#elif defined(CONFIG_64BIT)
24 .quad \val, \name
25#else
26 .long \val, \name
27#endif
28.endm
29
Al Viro22823ab2016-01-11 10:54:54 -050030/*
31 * note on .section use: @progbits vs %progbits nastiness doesn't matter,
32 * since we immediately emit into those sections anyway.
33 */
34.macro ___EXPORT_SYMBOL name,val,sec
35#ifdef CONFIG_MODULES
Masahiro Yamada94e58e02018-05-09 16:23:49 +090036 .globl __ksymtab_\name
Al Viro22823ab2016-01-11 10:54:54 -050037 .section ___ksymtab\sec+\name,"a"
38 .balign KSYM_ALIGN
Masahiro Yamada94e58e02018-05-09 16:23:49 +090039__ksymtab_\name:
40 __put \val, __kstrtab_\name
Al Viro22823ab2016-01-11 10:54:54 -050041 .previous
42 .section __ksymtab_strings,"a"
Masahiro Yamada94e58e02018-05-09 16:23:49 +090043__kstrtab_\name:
Al Viro22823ab2016-01-11 10:54:54 -050044 .asciz "\name"
Al Viro22823ab2016-01-11 10:54:54 -050045 .previous
46#ifdef CONFIG_MODVERSIONS
47 .section ___kcrctab\sec+\name,"a"
48 .balign KCRC_ALIGN
Masahiro Yamada94e58e02018-05-09 16:23:49 +090049__kcrctab_\name:
Ard Biesheuvel71810db2017-02-03 09:54:06 +000050#if defined(CONFIG_MODULE_REL_CRCS)
Masahiro Yamada94e58e02018-05-09 16:23:49 +090051 .long __crc_\name - .
Ard Biesheuvel71810db2017-02-03 09:54:06 +000052#else
Masahiro Yamada94e58e02018-05-09 16:23:49 +090053 .long __crc_\name
Ard Biesheuvel71810db2017-02-03 09:54:06 +000054#endif
Masahiro Yamada94e58e02018-05-09 16:23:49 +090055 .weak __crc_\name
Al Viro22823ab2016-01-11 10:54:54 -050056 .previous
57#endif
58#endif
59.endm
60#undef __put
61
62#if defined(__KSYM_DEPS__)
63
64#define __EXPORT_SYMBOL(sym, val, sec) === __KSYM_##sym ===
65
66#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
67
68#include <linux/kconfig.h>
69#include <generated/autoksyms.h>
70
71#define __EXPORT_SYMBOL(sym, val, sec) \
Masahiro Yamadac0a0aba2016-10-27 17:46:38 -070072 __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym))
Al Viro22823ab2016-01-11 10:54:54 -050073#define __cond_export_sym(sym, val, sec, conf) \
74 ___cond_export_sym(sym, val, sec, conf)
75#define ___cond_export_sym(sym, val, sec, enabled) \
76 __cond_export_sym_##enabled(sym, val, sec)
77#define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
78#define __cond_export_sym_0(sym, val, sec) /* nothing */
79
80#else
81#define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
82#endif
83
84#define EXPORT_SYMBOL(name) \
Masahiro Yamada94e58e02018-05-09 16:23:49 +090085 __EXPORT_SYMBOL(name, KSYM_FUNC(name),)
Al Viro22823ab2016-01-11 10:54:54 -050086#define EXPORT_SYMBOL_GPL(name) \
Masahiro Yamada94e58e02018-05-09 16:23:49 +090087 __EXPORT_SYMBOL(name, KSYM_FUNC(name), _gpl)
Al Viro22823ab2016-01-11 10:54:54 -050088#define EXPORT_DATA_SYMBOL(name) \
Masahiro Yamada94e58e02018-05-09 16:23:49 +090089 __EXPORT_SYMBOL(name, name,)
Al Viro22823ab2016-01-11 10:54:54 -050090#define EXPORT_DATA_SYMBOL_GPL(name) \
Masahiro Yamada94e58e02018-05-09 16:23:49 +090091 __EXPORT_SYMBOL(name, name,_gpl)
Al Viro22823ab2016-01-11 10:54:54 -050092
93#endif