We get rid of the general module prefix confusion with a binary config option,
fix a remove/insert race which Never Happens, and (my favorite) handle the case when we have too many modules for a single commandline. Seriously, the kernel is full, please go away! Cheers, Rusty. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRgbGEAAoJENkgDmzRrbjx2+QP/jXs93K/sXw3rL0vBklwCFv6 IPZmqYZiGjrzqlB4coWkgYRwW1oOsREfAjF5MmfPdykS3fO5kXfdxN4FBdfKp+IZ RdsycdGDuSxWomgYsivrrxLBDxDAX1VuBOjr6mu5Uuk/pCjFa61cfJDiErsu0jKz 2EMTc98A+E71XamJdvbtal5MUIu9yeluJWG2ux2+VbCul4MSpMc//0n2nrws/RCB AoC96AT/Xf4U10a8zT8RfCJ29M5Vvx/KfTIcFiZvtCQxEaHNNmj831gDNiw/3jFI ndRph+VLHBsMoBMxfzNRrM+evqkq8+AGEGRj3ycQy5Pa6DunPyzMafWOVGBGnmaS tl9hATGx1438048i5tUn8ieAYG1YL1HM83hQovpCThfUKQMiq186iDt1SYYmlq3g 0thj3znQqZDYhboPtgWzOMUdqOG/iBIKjhGQjjHZs+MInFgxL2hmax0gBNkvEtQb oLyfGbF6UjS7I/Md/HohnUQ4xr9kYa3MQeqPjKbRwgHRkdXhzTEZtI+MYDJBxOnW QGVQ97aJ2WA7vC7sz/1VhTcZqmU5zfrSc8lF+Ea+H8dQGHHbz8HxKQacEvKcMrXl OJyEkRUWDA0MTjeIHzn2fff9Q6/qqA1QejRiFofGJrpxopcJS84/7yA0repxvuMG yaMPsLq53UW37/AXYsho =MPiD -----END PGP SIGNATURE----- Merge tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux Pull mudule updates from Rusty Russell: "We get rid of the general module prefix confusion with a binary config option, fix a remove/insert race which Never Happens, and (my favorite) handle the case when we have too many modules for a single commandline. Seriously, the kernel is full, please go away!" * tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: modpost: fix unwanted VMLINUX_SYMBOL_STR expansion X.509: Support parse long form of length octets in Authority Key Identifier module: don't unlink the module until we've removed all exposure. kernel: kallsyms: memory override issue, need check destination buffer length MODSIGN: do not send garbage to stderr when enabling modules signature modpost: handle huge numbers of modules. modpost: add -T option to read module names from file/stdin. modpost: minor cleanup. genksyms: pass symbol-prefix instead of arch module: fix symbol versioning with symbol prefixes CONFIG_SYMBOL_PREFIX: cleanup.
This commit is contained in:
commit
f8ce1faf55
23 changed files with 202 additions and 140 deletions
|
|
@ -5,17 +5,24 @@
|
|||
* to reduce the amount of pointless cruft we feed to gcc when only
|
||||
* exporting a simple symbol or two.
|
||||
*
|
||||
* If you feel the need to add #include <linux/foo.h> to this file
|
||||
* then you are doing something wrong and should go away silently.
|
||||
* Try not to add #includes here. It slows compilation and makes kernel
|
||||
* hackers place grumpy comments in header files.
|
||||
*/
|
||||
|
||||
/* Some toolchains use a `_' prefix for all user symbols. */
|
||||
#ifdef CONFIG_SYMBOL_PREFIX
|
||||
#define MODULE_SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
|
||||
#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
|
||||
#define __VMLINUX_SYMBOL(x) _##x
|
||||
#define __VMLINUX_SYMBOL_STR(x) "_" #x
|
||||
#else
|
||||
#define MODULE_SYMBOL_PREFIX ""
|
||||
#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__
|
||||
struct kernel_symbol
|
||||
{
|
||||
unsigned long value;
|
||||
|
|
@ -51,7 +58,7 @@ extern struct module __this_module;
|
|||
__CRC_SYMBOL(sym, sec) \
|
||||
static const char __kstrtab_##sym[] \
|
||||
__attribute__((section("__ksymtab_strings"), aligned(1))) \
|
||||
= MODULE_SYMBOL_PREFIX #sym; \
|
||||
= VMLINUX_SYMBOL_STR(sym); \
|
||||
static const struct kernel_symbol __ksymtab_##sym \
|
||||
__used \
|
||||
__attribute__((section("___ksymtab" sec "+" #sym), unused)) \
|
||||
|
|
@ -85,5 +92,6 @@ extern struct module __this_module;
|
|||
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
|
||||
|
||||
#endif /* CONFIG_MODULES */
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* _LINUX_EXPORT_H */
|
||||
|
|
|
|||
|
|
@ -786,13 +786,6 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
|
|||
/* Trap pasters of __FUNCTION__ at compile-time */
|
||||
#define __FUNCTION__ (__func__)
|
||||
|
||||
/* This helps us to avoid #ifdef CONFIG_SYMBOL_PREFIX */
|
||||
#ifdef CONFIG_SYMBOL_PREFIX
|
||||
#define SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
|
||||
#else
|
||||
#define SYMBOL_PREFIX ""
|
||||
#endif
|
||||
|
||||
/* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */
|
||||
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||
# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/stringify.h>
|
||||
#include <linux/export.h>
|
||||
#include <asm/linkage.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
@ -15,21 +16,18 @@
|
|||
#define asmlinkage CPP_ASMLINKAGE
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYMBOL_PREFIX
|
||||
#define __SYMBOL_NAME(x) CONFIG_SYMBOL_PREFIX __stringify(x)
|
||||
#else
|
||||
#define __SYMBOL_NAME(x) __stringify(x)
|
||||
#endif
|
||||
|
||||
#ifndef cond_syscall
|
||||
#define cond_syscall(x) asm(".weak\t" __SYMBOL_NAME(x) \
|
||||
"\n\t.set\t" __SYMBOL_NAME(x) "," __SYMBOL_NAME(sys_ni_syscall));
|
||||
#define cond_syscall(x) asm( \
|
||||
".weak " VMLINUX_SYMBOL_STR(x) "\n\t" \
|
||||
".set " VMLINUX_SYMBOL_STR(x) "," \
|
||||
VMLINUX_SYMBOL_STR(sys_ni_syscall))
|
||||
#endif
|
||||
|
||||
#ifndef SYSCALL_ALIAS
|
||||
#define SYSCALL_ALIAS(alias, name) \
|
||||
asm ("\t.globl " __SYMBOL_NAME(alias) \
|
||||
"\n\t.set\t" __SYMBOL_NAME(alias) "," __SYMBOL_NAME(name))
|
||||
#define SYSCALL_ALIAS(alias, name) asm( \
|
||||
".globl " VMLINUX_SYMBOL_STR(alias) "\n\t" \
|
||||
".set " VMLINUX_SYMBOL_STR(alias) "," \
|
||||
VMLINUX_SYMBOL_STR(name))
|
||||
#endif
|
||||
|
||||
#define __page_aligned_data __section(.data..page_aligned) __aligned(PAGE_SIZE)
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ extern int modules_disabled; /* for sysctl */
|
|||
/* Get/put a kernel symbol (calls must be symmetric) */
|
||||
void *__symbol_get(const char *symbol);
|
||||
void *__symbol_get_gpl(const char *symbol);
|
||||
#define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x)))
|
||||
#define symbol_get(x) ((typeof(&x))(__symbol_get(VMLINUX_SYMBOL_STR(x))))
|
||||
|
||||
/* modules using other modules: kdb wants to see this. */
|
||||
struct module_use {
|
||||
|
|
@ -453,7 +453,7 @@ extern void __module_put_and_exit(struct module *mod, long code)
|
|||
#ifdef CONFIG_MODULE_UNLOAD
|
||||
unsigned long module_refcount(struct module *mod);
|
||||
void __symbol_put(const char *symbol);
|
||||
#define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
|
||||
#define symbol_put(x) __symbol_put(VMLINUX_SYMBOL_STR(x))
|
||||
void symbol_put_addr(void *addr);
|
||||
|
||||
/* Sometimes we know we already have a refcount, and it's easier not
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue