diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-20 16:17:13 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-20 16:42:58 -0500 |
commit | 9f28bb7e1d0188a993403ab39b774785892805e1 (patch) | |
tree | 939660c2531335dc899cc66fa7f3f05aa343d1e0 /include | |
parent | 3fd6805f4dfb02bcfb5634972eabad0e790f119a (diff) |
[PATCH] add EXPORT_SYMBOL_GPL_FUTURE()
This patch adds the ability to mark symbols that will be changed in the
future, so that kernel modules that don't include MODULE_LICENSE("GPL")
and use the symbols, will be flagged and printed out to the system log.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 14 | ||||
-rw-r--r-- | include/linux/module.h | 9 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 35de20cf8fac..9d11550b4818 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -58,6 +58,13 @@ | |||
58 | VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ | 58 | VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ |
59 | } \ | 59 | } \ |
60 | \ | 60 | \ |
61 | /* Kernel symbol table: GPL-future-only symbols */ \ | ||
62 | __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \ | ||
63 | VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .; \ | ||
64 | *(__ksymtab_gpl_future) \ | ||
65 | VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .; \ | ||
66 | } \ | ||
67 | \ | ||
61 | /* Kernel symbol table: Normal symbols */ \ | 68 | /* Kernel symbol table: Normal symbols */ \ |
62 | __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \ | 69 | __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \ |
63 | VMLINUX_SYMBOL(__start___kcrctab) = .; \ | 70 | VMLINUX_SYMBOL(__start___kcrctab) = .; \ |
@@ -72,6 +79,13 @@ | |||
72 | VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \ | 79 | VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \ |
73 | } \ | 80 | } \ |
74 | \ | 81 | \ |
82 | /* Kernel symbol table: GPL-future-only symbols */ \ | ||
83 | __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \ | ||
84 | VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .; \ | ||
85 | *(__kcrctab_gpl_future) \ | ||
86 | VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .; \ | ||
87 | } \ | ||
88 | \ | ||
75 | /* Kernel symbol table: strings */ \ | 89 | /* Kernel symbol table: strings */ \ |
76 | __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ | 90 | __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ |
77 | *(__ksymtab_strings) \ | 91 | *(__ksymtab_strings) \ |
diff --git a/include/linux/module.h b/include/linux/module.h index 84d75f3a8aca..a25d5f61548c 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -198,6 +198,9 @@ void *__symbol_get_gpl(const char *symbol); | |||
198 | #define EXPORT_SYMBOL_GPL(sym) \ | 198 | #define EXPORT_SYMBOL_GPL(sym) \ |
199 | __EXPORT_SYMBOL(sym, "_gpl") | 199 | __EXPORT_SYMBOL(sym, "_gpl") |
200 | 200 | ||
201 | #define EXPORT_SYMBOL_GPL_FUTURE(sym) \ | ||
202 | __EXPORT_SYMBOL(sym, "_gpl_future") | ||
203 | |||
201 | #endif | 204 | #endif |
202 | 205 | ||
203 | struct module_ref | 206 | struct module_ref |
@@ -255,6 +258,11 @@ struct module | |||
255 | unsigned int num_gpl_syms; | 258 | unsigned int num_gpl_syms; |
256 | const unsigned long *gpl_crcs; | 259 | const unsigned long *gpl_crcs; |
257 | 260 | ||
261 | /* symbols that will be GPL-only in the near future. */ | ||
262 | const struct kernel_symbol *gpl_future_syms; | ||
263 | unsigned int num_gpl_future_syms; | ||
264 | const unsigned long *gpl_future_crcs; | ||
265 | |||
258 | /* Exception table */ | 266 | /* Exception table */ |
259 | unsigned int num_exentries; | 267 | unsigned int num_exentries; |
260 | const struct exception_table_entry *extable; | 268 | const struct exception_table_entry *extable; |
@@ -441,6 +449,7 @@ void module_remove_driver(struct device_driver *); | |||
441 | #else /* !CONFIG_MODULES... */ | 449 | #else /* !CONFIG_MODULES... */ |
442 | #define EXPORT_SYMBOL(sym) | 450 | #define EXPORT_SYMBOL(sym) |
443 | #define EXPORT_SYMBOL_GPL(sym) | 451 | #define EXPORT_SYMBOL_GPL(sym) |
452 | #define EXPORT_SYMBOL_GPL_FUTURE(sym) | ||
444 | 453 | ||
445 | /* Given an address, look for it in the exception tables. */ | 454 | /* Given an address, look for it in the exception tables. */ |
446 | static inline const struct exception_table_entry * | 455 | static inline const struct exception_table_entry * |