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 | |
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>
-rw-r--r-- | arch/m68knommu/kernel/vmlinux.lds.S | 10 | ||||
-rw-r--r-- | arch/v850/kernel/vmlinux.lds.S | 8 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 14 | ||||
-rw-r--r-- | include/linux/module.h | 9 | ||||
-rw-r--r-- | kernel/module.c | 49 | ||||
-rw-r--r-- | scripts/genksyms/keywords.c_shipped | 91 | ||||
-rw-r--r-- | scripts/genksyms/keywords.gperf | 1 |
7 files changed, 135 insertions, 47 deletions
diff --git a/arch/m68knommu/kernel/vmlinux.lds.S b/arch/m68knommu/kernel/vmlinux.lds.S index ac9de2661c0b..a331cc90797c 100644 --- a/arch/m68knommu/kernel/vmlinux.lds.S +++ b/arch/m68knommu/kernel/vmlinux.lds.S | |||
@@ -269,6 +269,11 @@ SECTIONS { | |||
269 | *(__ksymtab_gpl) | 269 | *(__ksymtab_gpl) |
270 | __stop___ksymtab_gpl = .; | 270 | __stop___ksymtab_gpl = .; |
271 | 271 | ||
272 | /* Kernel symbol table: GPL-future symbols */ | ||
273 | __start___ksymtab_gpl_future = .; | ||
274 | *(__ksymtab_gpl_future) | ||
275 | __stop___ksymtab_gpl_future = .; | ||
276 | |||
272 | /* Kernel symbol table: Normal symbols */ | 277 | /* Kernel symbol table: Normal symbols */ |
273 | __start___kcrctab = .; | 278 | __start___kcrctab = .; |
274 | *(__kcrctab) | 279 | *(__kcrctab) |
@@ -279,6 +284,11 @@ SECTIONS { | |||
279 | *(__kcrctab_gpl) | 284 | *(__kcrctab_gpl) |
280 | __stop___kcrctab_gpl = .; | 285 | __stop___kcrctab_gpl = .; |
281 | 286 | ||
287 | /* Kernel symbol table: GPL-future symbols */ | ||
288 | __start___kcrctab_gpl_future = .; | ||
289 | *(__kcrctab_gpl_future) | ||
290 | __stop___kcrctab_gpl_future = .; | ||
291 | |||
282 | /* Kernel symbol table: strings */ | 292 | /* Kernel symbol table: strings */ |
283 | *(__ksymtab_strings) | 293 | *(__ksymtab_strings) |
284 | 294 | ||
diff --git a/arch/v850/kernel/vmlinux.lds.S b/arch/v850/kernel/vmlinux.lds.S index 5be05f47109e..5b2ffcc6e2b2 100644 --- a/arch/v850/kernel/vmlinux.lds.S +++ b/arch/v850/kernel/vmlinux.lds.S | |||
@@ -64,6 +64,10 @@ | |||
64 | ___start___ksymtab_gpl = .; \ | 64 | ___start___ksymtab_gpl = .; \ |
65 | *(__ksymtab_gpl) \ | 65 | *(__ksymtab_gpl) \ |
66 | ___stop___ksymtab_gpl = .; \ | 66 | ___stop___ksymtab_gpl = .; \ |
67 | /* Kernel symbol table: GPL-future symbols */ \ | ||
68 | ___start___ksymtab_gpl_future = .; \ | ||
69 | *(__ksymtab_gpl_future) \ | ||
70 | ___stop___ksymtab_gpl_future = .; \ | ||
67 | /* Kernel symbol table: strings */ \ | 71 | /* Kernel symbol table: strings */ \ |
68 | *(__ksymtab_strings) \ | 72 | *(__ksymtab_strings) \ |
69 | /* Kernel symbol table: Normal symbols */ \ | 73 | /* Kernel symbol table: Normal symbols */ \ |
@@ -74,6 +78,10 @@ | |||
74 | ___start___kcrctab_gpl = .; \ | 78 | ___start___kcrctab_gpl = .; \ |
75 | *(__kcrctab_gpl) \ | 79 | *(__kcrctab_gpl) \ |
76 | ___stop___kcrctab_gpl = .; \ | 80 | ___stop___kcrctab_gpl = .; \ |
81 | /* Kernel symbol table: GPL-future symbols */ \ | ||
82 | ___start___kcrctab_gpl_future = .; \ | ||
83 | *(__kcrctab_gpl_future) \ | ||
84 | ___stop___kcrctab_gpl_future = .; \ | ||
77 | /* Built-in module parameters */ \ | 85 | /* Built-in module parameters */ \ |
78 | . = ALIGN (4) ; \ | 86 | . = ALIGN (4) ; \ |
79 | ___start___param = .; \ | 87 | ___start___param = .; \ |
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 * |
diff --git a/kernel/module.c b/kernel/module.c index 2a892b20d68f..5ca99fbe9f44 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -126,8 +126,11 @@ extern const struct kernel_symbol __start___ksymtab[]; | |||
126 | extern const struct kernel_symbol __stop___ksymtab[]; | 126 | extern const struct kernel_symbol __stop___ksymtab[]; |
127 | extern const struct kernel_symbol __start___ksymtab_gpl[]; | 127 | extern const struct kernel_symbol __start___ksymtab_gpl[]; |
128 | extern const struct kernel_symbol __stop___ksymtab_gpl[]; | 128 | extern const struct kernel_symbol __stop___ksymtab_gpl[]; |
129 | extern const struct kernel_symbol __start___ksymtab_gpl_future[]; | ||
130 | extern const struct kernel_symbol __stop___ksymtab_gpl_future[]; | ||
129 | extern const unsigned long __start___kcrctab[]; | 131 | extern const unsigned long __start___kcrctab[]; |
130 | extern const unsigned long __start___kcrctab_gpl[]; | 132 | extern const unsigned long __start___kcrctab_gpl[]; |
133 | extern const unsigned long __start___kcrctab_gpl_future[]; | ||
131 | 134 | ||
132 | #ifndef CONFIG_MODVERSIONS | 135 | #ifndef CONFIG_MODVERSIONS |
133 | #define symversion(base, idx) NULL | 136 | #define symversion(base, idx) NULL |
@@ -172,6 +175,22 @@ static unsigned long __find_symbol(const char *name, | |||
172 | return ks->value; | 175 | return ks->value; |
173 | } | 176 | } |
174 | } | 177 | } |
178 | ks = lookup_symbol(name, __start___ksymtab_gpl_future, | ||
179 | __stop___ksymtab_gpl_future); | ||
180 | if (ks) { | ||
181 | if (!gplok) { | ||
182 | printk(KERN_WARNING "Symbol %s is being used " | ||
183 | "by a non-GPL module, which will not " | ||
184 | "be allowed in the future\n", name); | ||
185 | printk(KERN_WARNING "Please see the file " | ||
186 | "Documentation/feature-removal-schedule.txt " | ||
187 | "in the kernel source tree for more " | ||
188 | "details.\n"); | ||
189 | } | ||
190 | *crc = symversion(__start___kcrctab_gpl_future, | ||
191 | (ks - __start___ksymtab_gpl_future)); | ||
192 | return ks->value; | ||
193 | } | ||
175 | 194 | ||
176 | /* Now try modules. */ | 195 | /* Now try modules. */ |
177 | list_for_each_entry(mod, &modules, list) { | 196 | list_for_each_entry(mod, &modules, list) { |
@@ -191,6 +210,23 @@ static unsigned long __find_symbol(const char *name, | |||
191 | return ks->value; | 210 | return ks->value; |
192 | } | 211 | } |
193 | } | 212 | } |
213 | ks = lookup_symbol(name, mod->gpl_future_syms, | ||
214 | (mod->gpl_future_syms + | ||
215 | mod->num_gpl_future_syms)); | ||
216 | if (ks) { | ||
217 | if (!gplok) { | ||
218 | printk(KERN_WARNING "Symbol %s is being used " | ||
219 | "by a non-GPL module, which will not " | ||
220 | "be allowed in the future\n", name); | ||
221 | printk(KERN_WARNING "Please see the file " | ||
222 | "Documentation/feature-removal-schedule.txt " | ||
223 | "in the kernel source tree for more " | ||
224 | "details.\n"); | ||
225 | } | ||
226 | *crc = symversion(mod->gpl_future_crcs, | ||
227 | (ks - mod->gpl_future_syms)); | ||
228 | return ks->value; | ||
229 | } | ||
194 | } | 230 | } |
195 | DEBUGP("Failed to find symbol %s\n", name); | 231 | DEBUGP("Failed to find symbol %s\n", name); |
196 | return 0; | 232 | return 0; |
@@ -1546,7 +1582,8 @@ static struct module *load_module(void __user *umod, | |||
1546 | char *secstrings, *args, *modmagic, *strtab = NULL; | 1582 | char *secstrings, *args, *modmagic, *strtab = NULL; |
1547 | unsigned int i, symindex = 0, strindex = 0, setupindex, exindex, | 1583 | unsigned int i, symindex = 0, strindex = 0, setupindex, exindex, |
1548 | exportindex, modindex, obsparmindex, infoindex, gplindex, | 1584 | exportindex, modindex, obsparmindex, infoindex, gplindex, |
1549 | crcindex, gplcrcindex, versindex, pcpuindex; | 1585 | crcindex, gplcrcindex, versindex, pcpuindex, gplfutureindex, |
1586 | gplfuturecrcindex; | ||
1550 | long arglen; | 1587 | long arglen; |
1551 | struct module *mod; | 1588 | struct module *mod; |
1552 | long err = 0; | 1589 | long err = 0; |
@@ -1627,8 +1664,10 @@ static struct module *load_module(void __user *umod, | |||
1627 | /* Optional sections */ | 1664 | /* Optional sections */ |
1628 | exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab"); | 1665 | exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab"); |
1629 | gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl"); | 1666 | gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl"); |
1667 | gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future"); | ||
1630 | crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab"); | 1668 | crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab"); |
1631 | gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl"); | 1669 | gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl"); |
1670 | gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future"); | ||
1632 | setupindex = find_sec(hdr, sechdrs, secstrings, "__param"); | 1671 | setupindex = find_sec(hdr, sechdrs, secstrings, "__param"); |
1633 | exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table"); | 1672 | exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table"); |
1634 | obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm"); | 1673 | obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm"); |
@@ -1784,10 +1823,16 @@ static struct module *load_module(void __user *umod, | |||
1784 | mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr; | 1823 | mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr; |
1785 | if (gplcrcindex) | 1824 | if (gplcrcindex) |
1786 | mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr; | 1825 | mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr; |
1826 | mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size / | ||
1827 | sizeof(*mod->gpl_future_syms); | ||
1828 | mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr; | ||
1829 | if (gplfuturecrcindex) | ||
1830 | mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr; | ||
1787 | 1831 | ||
1788 | #ifdef CONFIG_MODVERSIONS | 1832 | #ifdef CONFIG_MODVERSIONS |
1789 | if ((mod->num_syms && !crcindex) || | 1833 | if ((mod->num_syms && !crcindex) || |
1790 | (mod->num_gpl_syms && !gplcrcindex)) { | 1834 | (mod->num_gpl_syms && !gplcrcindex) || |
1835 | (mod->num_gpl_future_syms && !gplfuturecrcindex)) { | ||
1791 | printk(KERN_WARNING "%s: No versions for exported symbols." | 1836 | printk(KERN_WARNING "%s: No versions for exported symbols." |
1792 | " Tainting kernel.\n", mod->name); | 1837 | " Tainting kernel.\n", mod->name); |
1793 | add_taint(TAINT_FORCED_MODULE); | 1838 | add_taint(TAINT_FORCED_MODULE); |
diff --git a/scripts/genksyms/keywords.c_shipped b/scripts/genksyms/keywords.c_shipped index ee4647805c58..d8153f572e40 100644 --- a/scripts/genksyms/keywords.c_shipped +++ b/scripts/genksyms/keywords.c_shipped | |||
@@ -52,9 +52,9 @@ is_reserved_hash (register const char *str, register unsigned int len) | |||
52 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, | 52 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, |
53 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, | 53 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, |
54 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, | 54 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, |
55 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 15, | 55 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, |
56 | 71, 71, 71, 71, 71, 71, 15, 71, 71, 71, | 56 | 71, 71, 71, 71, 71, 71, 35, 71, 71, 71, |
57 | 10, 71, 71, 71, 71, 71, 71, 71, 71, 71, | 57 | 5, 71, 71, 71, 71, 71, 71, 71, 71, 71, |
58 | 71, 71, 71, 71, 71, 0, 71, 0, 71, 5, | 58 | 71, 71, 71, 71, 71, 0, 71, 0, 71, 5, |
59 | 5, 0, 10, 20, 71, 25, 71, 71, 20, 0, | 59 | 5, 0, 10, 20, 71, 25, 71, 71, 20, 0, |
60 | 20, 30, 25, 71, 10, 5, 0, 20, 15, 71, | 60 | 20, 30, 25, 71, 10, 5, 0, 20, 15, 71, |
@@ -84,9 +84,9 @@ is_reserved_word (register const char *str, register unsigned int len) | |||
84 | { | 84 | { |
85 | enum | 85 | enum |
86 | { | 86 | { |
87 | TOTAL_KEYWORDS = 41, | 87 | TOTAL_KEYWORDS = 42, |
88 | MIN_WORD_LENGTH = 3, | 88 | MIN_WORD_LENGTH = 3, |
89 | MAX_WORD_LENGTH = 17, | 89 | MAX_WORD_LENGTH = 24, |
90 | MIN_HASH_VALUE = 3, | 90 | MIN_HASH_VALUE = 3, |
91 | MAX_HASH_VALUE = 70 | 91 | MAX_HASH_VALUE = 70 |
92 | }; | 92 | }; |
@@ -94,104 +94,105 @@ is_reserved_word (register const char *str, register unsigned int len) | |||
94 | static const struct resword wordlist[] = | 94 | static const struct resword wordlist[] = |
95 | { | 95 | { |
96 | {""}, {""}, {""}, | 96 | {""}, {""}, {""}, |
97 | #line 24 "scripts/genksyms/keywords.gperf" | 97 | #line 25 "scripts/genksyms/keywords.gperf" |
98 | {"asm", ASM_KEYW}, | 98 | {"asm", ASM_KEYW}, |
99 | {""}, | 99 | {""}, |
100 | #line 7 "scripts/genksyms/keywords.gperf" | 100 | #line 8 "scripts/genksyms/keywords.gperf" |
101 | {"__asm", ASM_KEYW}, | 101 | {"__asm", ASM_KEYW}, |
102 | {""}, | 102 | {""}, |
103 | #line 8 "scripts/genksyms/keywords.gperf" | 103 | #line 9 "scripts/genksyms/keywords.gperf" |
104 | {"__asm__", ASM_KEYW}, | 104 | {"__asm__", ASM_KEYW}, |
105 | {""}, | 105 | {""}, |
106 | #line 21 "scripts/genksyms/keywords.gperf" | 106 | #line 22 "scripts/genksyms/keywords.gperf" |
107 | {"_restrict", RESTRICT_KEYW}, | 107 | {"_restrict", RESTRICT_KEYW}, |
108 | #line 50 "scripts/genksyms/keywords.gperf" | 108 | #line 51 "scripts/genksyms/keywords.gperf" |
109 | {"__typeof__", TYPEOF_KEYW}, | 109 | {"__typeof__", TYPEOF_KEYW}, |
110 | #line 9 "scripts/genksyms/keywords.gperf" | 110 | #line 10 "scripts/genksyms/keywords.gperf" |
111 | {"__attribute", ATTRIBUTE_KEYW}, | 111 | {"__attribute", ATTRIBUTE_KEYW}, |
112 | #line 11 "scripts/genksyms/keywords.gperf" | 112 | #line 12 "scripts/genksyms/keywords.gperf" |
113 | {"__const", CONST_KEYW}, | 113 | {"__const", CONST_KEYW}, |
114 | #line 10 "scripts/genksyms/keywords.gperf" | 114 | #line 11 "scripts/genksyms/keywords.gperf" |
115 | {"__attribute__", ATTRIBUTE_KEYW}, | 115 | {"__attribute__", ATTRIBUTE_KEYW}, |
116 | #line 12 "scripts/genksyms/keywords.gperf" | 116 | #line 13 "scripts/genksyms/keywords.gperf" |
117 | {"__const__", CONST_KEYW}, | 117 | {"__const__", CONST_KEYW}, |
118 | #line 16 "scripts/genksyms/keywords.gperf" | 118 | #line 17 "scripts/genksyms/keywords.gperf" |
119 | {"__signed__", SIGNED_KEYW}, | 119 | {"__signed__", SIGNED_KEYW}, |
120 | #line 42 "scripts/genksyms/keywords.gperf" | 120 | #line 43 "scripts/genksyms/keywords.gperf" |
121 | {"static", STATIC_KEYW}, | 121 | {"static", STATIC_KEYW}, |
122 | {""}, | 122 | {""}, |
123 | #line 15 "scripts/genksyms/keywords.gperf" | 123 | #line 16 "scripts/genksyms/keywords.gperf" |
124 | {"__signed", SIGNED_KEYW}, | 124 | {"__signed", SIGNED_KEYW}, |
125 | #line 30 "scripts/genksyms/keywords.gperf" | 125 | #line 31 "scripts/genksyms/keywords.gperf" |
126 | {"char", CHAR_KEYW}, | 126 | {"char", CHAR_KEYW}, |
127 | {""}, | 127 | {""}, |
128 | #line 43 "scripts/genksyms/keywords.gperf" | 128 | #line 44 "scripts/genksyms/keywords.gperf" |
129 | {"struct", STRUCT_KEYW}, | 129 | {"struct", STRUCT_KEYW}, |
130 | #line 22 "scripts/genksyms/keywords.gperf" | ||
131 | {"__restrict__", RESTRICT_KEYW}, | ||
132 | #line 23 "scripts/genksyms/keywords.gperf" | 130 | #line 23 "scripts/genksyms/keywords.gperf" |
131 | {"__restrict__", RESTRICT_KEYW}, | ||
132 | #line 24 "scripts/genksyms/keywords.gperf" | ||
133 | {"restrict", RESTRICT_KEYW}, | 133 | {"restrict", RESTRICT_KEYW}, |
134 | #line 33 "scripts/genksyms/keywords.gperf" | 134 | #line 34 "scripts/genksyms/keywords.gperf" |
135 | {"enum", ENUM_KEYW}, | 135 | {"enum", ENUM_KEYW}, |
136 | #line 17 "scripts/genksyms/keywords.gperf" | 136 | #line 18 "scripts/genksyms/keywords.gperf" |
137 | {"__volatile", VOLATILE_KEYW}, | 137 | {"__volatile", VOLATILE_KEYW}, |
138 | #line 34 "scripts/genksyms/keywords.gperf" | 138 | #line 35 "scripts/genksyms/keywords.gperf" |
139 | {"extern", EXTERN_KEYW}, | 139 | {"extern", EXTERN_KEYW}, |
140 | #line 18 "scripts/genksyms/keywords.gperf" | 140 | #line 19 "scripts/genksyms/keywords.gperf" |
141 | {"__volatile__", VOLATILE_KEYW}, | 141 | {"__volatile__", VOLATILE_KEYW}, |
142 | #line 37 "scripts/genksyms/keywords.gperf" | 142 | #line 38 "scripts/genksyms/keywords.gperf" |
143 | {"int", INT_KEYW}, | 143 | {"int", INT_KEYW}, |
144 | {""}, | 144 | #line 7 "scripts/genksyms/keywords.gperf" |
145 | #line 31 "scripts/genksyms/keywords.gperf" | 145 | {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW}, |
146 | {"const", CONST_KEYW}, | ||
147 | #line 32 "scripts/genksyms/keywords.gperf" | 146 | #line 32 "scripts/genksyms/keywords.gperf" |
147 | {"const", CONST_KEYW}, | ||
148 | #line 33 "scripts/genksyms/keywords.gperf" | ||
148 | {"double", DOUBLE_KEYW}, | 149 | {"double", DOUBLE_KEYW}, |
149 | {""}, | 150 | {""}, |
150 | #line 13 "scripts/genksyms/keywords.gperf" | 151 | #line 14 "scripts/genksyms/keywords.gperf" |
151 | {"__inline", INLINE_KEYW}, | 152 | {"__inline", INLINE_KEYW}, |
152 | #line 29 "scripts/genksyms/keywords.gperf" | 153 | #line 30 "scripts/genksyms/keywords.gperf" |
153 | {"auto", AUTO_KEYW}, | 154 | {"auto", AUTO_KEYW}, |
154 | #line 14 "scripts/genksyms/keywords.gperf" | 155 | #line 15 "scripts/genksyms/keywords.gperf" |
155 | {"__inline__", INLINE_KEYW}, | 156 | {"__inline__", INLINE_KEYW}, |
156 | #line 41 "scripts/genksyms/keywords.gperf" | 157 | #line 42 "scripts/genksyms/keywords.gperf" |
157 | {"signed", SIGNED_KEYW}, | 158 | {"signed", SIGNED_KEYW}, |
158 | {""}, | 159 | {""}, |
159 | #line 46 "scripts/genksyms/keywords.gperf" | 160 | #line 47 "scripts/genksyms/keywords.gperf" |
160 | {"unsigned", UNSIGNED_KEYW}, | 161 | {"unsigned", UNSIGNED_KEYW}, |
161 | {""}, | 162 | {""}, |
162 | #line 40 "scripts/genksyms/keywords.gperf" | 163 | #line 41 "scripts/genksyms/keywords.gperf" |
163 | {"short", SHORT_KEYW}, | 164 | {"short", SHORT_KEYW}, |
164 | #line 49 "scripts/genksyms/keywords.gperf" | 165 | #line 50 "scripts/genksyms/keywords.gperf" |
165 | {"typeof", TYPEOF_KEYW}, | 166 | {"typeof", TYPEOF_KEYW}, |
166 | #line 44 "scripts/genksyms/keywords.gperf" | 167 | #line 45 "scripts/genksyms/keywords.gperf" |
167 | {"typedef", TYPEDEF_KEYW}, | 168 | {"typedef", TYPEDEF_KEYW}, |
168 | #line 48 "scripts/genksyms/keywords.gperf" | 169 | #line 49 "scripts/genksyms/keywords.gperf" |
169 | {"volatile", VOLATILE_KEYW}, | 170 | {"volatile", VOLATILE_KEYW}, |
170 | {""}, | 171 | {""}, |
171 | #line 35 "scripts/genksyms/keywords.gperf" | 172 | #line 36 "scripts/genksyms/keywords.gperf" |
172 | {"float", FLOAT_KEYW}, | 173 | {"float", FLOAT_KEYW}, |
173 | {""}, {""}, | 174 | {""}, {""}, |
174 | #line 39 "scripts/genksyms/keywords.gperf" | 175 | #line 40 "scripts/genksyms/keywords.gperf" |
175 | {"register", REGISTER_KEYW}, | 176 | {"register", REGISTER_KEYW}, |
176 | #line 47 "scripts/genksyms/keywords.gperf" | 177 | #line 48 "scripts/genksyms/keywords.gperf" |
177 | {"void", VOID_KEYW}, | 178 | {"void", VOID_KEYW}, |
178 | {""}, | 179 | {""}, |
179 | #line 36 "scripts/genksyms/keywords.gperf" | 180 | #line 37 "scripts/genksyms/keywords.gperf" |
180 | {"inline", INLINE_KEYW}, | 181 | {"inline", INLINE_KEYW}, |
181 | {""}, | 182 | {""}, |
182 | #line 5 "scripts/genksyms/keywords.gperf" | 183 | #line 5 "scripts/genksyms/keywords.gperf" |
183 | {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW}, | 184 | {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW}, |
184 | {""}, | 185 | {""}, |
185 | #line 20 "scripts/genksyms/keywords.gperf" | 186 | #line 21 "scripts/genksyms/keywords.gperf" |
186 | {"_Bool", BOOL_KEYW}, | 187 | {"_Bool", BOOL_KEYW}, |
187 | {""}, | 188 | {""}, |
188 | #line 6 "scripts/genksyms/keywords.gperf" | 189 | #line 6 "scripts/genksyms/keywords.gperf" |
189 | {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW}, | 190 | {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW}, |
190 | {""}, {""}, {""}, {""}, {""}, {""}, | 191 | {""}, {""}, {""}, {""}, {""}, {""}, |
191 | #line 38 "scripts/genksyms/keywords.gperf" | 192 | #line 39 "scripts/genksyms/keywords.gperf" |
192 | {"long", LONG_KEYW}, | 193 | {"long", LONG_KEYW}, |
193 | {""}, {""}, {""}, {""}, {""}, | 194 | {""}, {""}, {""}, {""}, {""}, |
194 | #line 45 "scripts/genksyms/keywords.gperf" | 195 | #line 46 "scripts/genksyms/keywords.gperf" |
195 | {"union", UNION_KEYW} | 196 | {"union", UNION_KEYW} |
196 | }; | 197 | }; |
197 | 198 | ||
diff --git a/scripts/genksyms/keywords.gperf b/scripts/genksyms/keywords.gperf index b6bec765996e..c75e0c8d8f0c 100644 --- a/scripts/genksyms/keywords.gperf +++ b/scripts/genksyms/keywords.gperf | |||
@@ -4,6 +4,7 @@ struct resword { const char *name; int token; } | |||
4 | %% | 4 | %% |
5 | EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW | 5 | EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW |
6 | EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW | 6 | EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW |
7 | EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW | ||
7 | __asm, ASM_KEYW | 8 | __asm, ASM_KEYW |
8 | __asm__, ASM_KEYW | 9 | __asm__, ASM_KEYW |
9 | __attribute, ATTRIBUTE_KEYW | 10 | __attribute, ATTRIBUTE_KEYW |