To avoid excessive usage of EXPORT_SYMBOL_NS(sym, MY_NAMESPACE), where MY_NAMESPACE will always be the namespace we are exporting to, allow exporting all definitions of EXPORT_SYMBOL() and friends by defining DEFAULT_SYMBOL_NAMESPACE. For example, to export all symbols defined in usb-common into the namespace USB_COMMON, add a line like this to drivers/usb/common/Makefile: ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE=USB_COMMON That is equivalent to changing all EXPORT_SYMBOL(sym) definitions to EXPORT_SYMBOL_NS(sym, USB_COMMON). Subsequently all symbol namespaces functionality will apply. Another way of making use of this feature is to define the namespace within source or header files similar to how TRACE_SYSTEM defines are used: #undef DEFAULT_SYMBOL_NAMESPACE #define DEFAULT_SYMBOL_NAMESPACE USB_COMMON Please note that, as opposed to TRACE_SYSTEM, DEFAULT_SYMBOL_NAMESPACE has to be defined before including include/linux/export.h. If DEFAULT_SYMBOL_NAMESPACE is defined, a symbol can still be exported to another namespace by using EXPORT_SYMBOL_NS() and friends with explicitly specifying the namespace.
Unified · Split
| @@ -166,6 +166,12 @@ struct kernel_symbol { · 165 unmodified lines | ||
| 166 | 166 | #define __EXPORT_SYMBOL ___EXPORT_SYMBOL |
| 167 | 167 | #endif |
| 168 | 168 | |
| 169 | +#ifdef DEFAULT_SYMBOL_NAMESPACE | |
| 170 | +#undef __EXPORT_SYMBOL | |
| 171 | +#define __EXPORT_SYMBOL(sym, sec) \ | |
| 172 | + __EXPORT_SYMBOL_NS(sym, sec, DEFAULT_SYMBOL_NAMESPACE) | |
| 173 | +#endif | |
| 174 | + | |
| 169 | 175 | #define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "") |
| 170 | 176 | #define EXPORT_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_gpl") |
| 171 | 177 | #define EXPORT_SYMBOL_GPL_FUTURE(sym) __EXPORT_SYMBOL(sym, "_gpl_future") |