Re: [PATCH RFC] [1/9] Core module symbol namespaces code and intro.
From: Arnd Bergmann
Date: Thu Nov 29 2007 - 04:55:41 EST
On Thursday 22 November 2007, Andi Kleen wrote:
> #define EXPORT_SYMBOL(sym) \
> - __EXPORT_SYMBOL(sym, "")
> + __EXPORT_SYMBOL(sym, "",,, NULL)
>
> #define EXPORT_SYMBOL_GPL(sym) \
> - __EXPORT_SYMBOL(sym, "_gpl")
> + __EXPORT_SYMBOL(sym, "_gpl",,, NULL)
>
> #define EXPORT_SYMBOL_GPL_FUTURE(sym) \
> - __EXPORT_SYMBOL(sym, "_gpl_future")
> + __EXPORT_SYMBOL(sym, "_gpl_future",,, NULL)
>
> +/* Export symbol into namespace ns
> + * No _GPL variants because namespaces imply GPL only
> + */
> +#define EXPORT_SYMBOL_NS(ns, sym) \
> + __EXPORT_SYMBOL(sym, "_gpl",__##ns, NS_SEPARATOR #ns, #ns)
>
I think it would be good if you could specify a default namespace
per module, that could reduce the amount of necessary changes significantly.
For example, you can do
#define EXPORT_SYMBOL_GLOBAL(sym) __EXPORT_SYMBOL(sym, "_gpl",,, NULL)
#ifdef MODULE_NAMESPACE
#define EXPORT_SYMBOL_GPL(sym) EXPORT_SYMBOL_GLOBAL(sym)
#else
#define EXPORT_SYMBOL_GPL(sym) EXPORT_SYMBOL_NS(sym, MODULE_NAMESPACE)
#endif
If we go that way, it may be useful to extend the namespace mechanism to
non-GPL symbols as well, like
#define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "",__## MODULE_NAMESPACE, NS_SEPARATOR #MODULE_NAMESPACE, #MODULE_NAMESPACE)
Unfortunately, doing this automatic namespace selection requires to set
the namespace before #include <linux/module.h>. One way to work around this
could be to use Makefile magic so you can list a Makefile as
obj-$(CONFIG_COMBINED) += combined.o
combined-$(CONFIG_SUBOPTION) += combined_main.o combined_other.o
obj-$(CONFIG_SINGLE) += single.o
obj-$(CONFIG_OTHER) += other.o
obj-$(CONFIG_API) += api.o
NAMESPACE = subsys # default, used for other.o
NAMESPACE_single.o = single # used only for single.o
NAMESPACE_combined.o = combined # all parts of combined.o
NAMESPACE_combined_other.o = special # except this one
NAMESPACE_api.o = # api.o is put into the global ns
The Makefile logic here would basically just follow the rules we have for
CFLAGS etc, and then pass -DMODULE_NAMESPACE=$(NAMESPACE_$(obj)) to gcc.
Arnd <><
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/