]>
Commit | Line | Data |
---|---|---|
4d1e5b62 AF |
1 | From: Andreas Gruenbacher <agruen@suse.de> |
2 | Subject: genksyms: add --override flag | |
3 | ||
4 | Add --override flag to genksyms to allow overriding types with old | |
5 | definitions using the 'override' keyword. This is similar to -p --preserve, | |
6 | but it doesn't abort the build if a symtype cannot be preserved | |
7 | ||
8 | [mmarek: added KBUILD_OVERRIDE env var to set this globally for the entire | |
9 | build] | |
10 | --- | |
11 | scripts/genksyms/genksyms.c | 21 +++++++++++++++------ | |
12 | 1 file changed, 15 insertions(+), 6 deletions(-) | |
13 | ||
14 | Index: b/scripts/genksyms/genksyms.c | |
15 | =================================================================== | |
16 | --- a/scripts/genksyms/genksyms.c | |
17 | +++ b/scripts/genksyms/genksyms.c | |
18 | @@ -43,7 +43,7 @@ int cur_line = 1; | |
19 | char *cur_filename; | |
20 | ||
21 | static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, | |
22 | - flag_preserve, flag_warnings; | |
23 | + flag_override, flag_preserve, flag_warnings; | |
24 | static const char *arch = ""; | |
25 | static const char *mod_prefix = ""; | |
26 | ||
27 | @@ -200,7 +200,7 @@ struct symbol *__add_symbol(const char * | |
28 | sym->is_declared = 1; | |
29 | return sym; | |
30 | } else if (!sym->is_declared) { | |
31 | - if (sym->is_override && flag_preserve) { | |
32 | + if (sym->is_override && flag_override) { | |
33 | print_location(); | |
34 | fprintf(stderr, "ignoring "); | |
35 | print_type_name(type, name); | |
36 | @@ -586,11 +586,13 @@ void export_symbol(const char *name) | |
37 | struct symbol *n = sym->expansion_trail; | |
38 | ||
39 | if (sym->status != STATUS_UNCHANGED) { | |
40 | + int fail = sym->is_override && flag_preserve; | |
41 | + | |
42 | if (!has_changed) { | |
43 | print_location(); | |
44 | fprintf(stderr, "%s: %s: modversion " | |
45 | "changed because of changes " | |
46 | - "in ", flag_preserve ? "error" : | |
47 | + "in ", fail ? "error" : | |
48 | "warning", name); | |
49 | } else | |
50 | fprintf(stderr, ", "); | |
51 | @@ -598,7 +600,7 @@ void export_symbol(const char *name) | |
52 | if (sym->status == STATUS_DEFINED) | |
53 | fprintf(stderr, " (became defined)"); | |
54 | has_changed = 1; | |
55 | - if (flag_preserve) | |
56 | + if (fail) | |
57 | errors++; | |
58 | } | |
59 | sym->expansion_trail = 0; | |
60 | @@ -655,6 +657,7 @@ static void genksyms_usage(void) | |
61 | " -D, --dump Dump expanded symbol defs (for debugging only)\n" | |
62 | " -r, --reference file Read reference symbols from a file\n" | |
63 | " -T, --dump-types file Dump expanded types into file\n" | |
64 | + " -o, --override Allow to override reference modversions\n" | |
65 | " -p, --preserve Preserve reference modversions or fail\n" | |
66 | " -w, --warnings Enable warnings\n" | |
67 | " -q, --quiet Disable warnings (default)\n" | |
68 | @@ -666,6 +669,7 @@ static void genksyms_usage(void) | |
69 | " -D Dump expanded symbol defs (for debugging only)\n" | |
70 | " -r file Read reference symbols from a file\n" | |
71 | " -T file Dump expanded types into file\n" | |
72 | + " -o Allow to override reference modversions\n" | |
73 | " -p Preserve reference modversions or fail\n" | |
74 | " -w Enable warnings\n" | |
75 | " -q Disable warnings (default)\n" | |
76 | @@ -690,15 +694,16 @@ int main(int argc, char **argv) | |
77 | {"reference", 1, 0, 'r'}, | |
78 | {"dump-types", 1, 0, 'T'}, | |
79 | {"preserve", 0, 0, 'p'}, | |
80 | + {"override", 0, 0, 'o'}, | |
81 | {"version", 0, 0, 'V'}, | |
82 | {"help", 0, 0, 'h'}, | |
83 | {0, 0, 0, 0} | |
84 | }; | |
85 | ||
86 | - while ((o = getopt_long(argc, argv, "a:dwqVDr:T:ph", | |
87 | + while ((o = getopt_long(argc, argv, "a:dwqVDr:T:oph", | |
88 | &long_opts[0], NULL)) != EOF) | |
89 | #else /* __GNU_LIBRARY__ */ | |
90 | - while ((o = getopt(argc, argv, "a:dwqVDr:T:ph")) != EOF) | |
91 | + while ((o = getopt(argc, argv, "a:dwqVDr:T:oph")) != EOF) | |
92 | #endif /* __GNU_LIBRARY__ */ | |
93 | switch (o) { | |
94 | case 'a': | |
95 | @@ -735,7 +740,11 @@ int main(int argc, char **argv) | |
96 | return 1; | |
97 | } | |
98 | break; | |
99 | + case 'o': | |
100 | + flag_override = 1; | |
101 | + break; | |
102 | case 'p': | |
103 | + flag_override = 1; | |
104 | flag_preserve = 1; | |
105 | break; | |
106 | case 'h': | |
107 | Index: b/scripts/Makefile.build | |
108 | =================================================================== | |
109 | --- a/scripts/Makefile.build | |
110 | +++ b/scripts/Makefile.build | |
111 | @@ -159,6 +159,7 @@ cmd_cc_symtypes_c = \ | |
112 | -r $(firstword $(wildcard \ | |
113 | $(@:.symtypes=.symref) /dev/null)) \ | |
114 | $(if $(KBUILD_PRESERVE),-p) \ | |
115 | + $(if $(KBUILD_OVERRIDE),-o) \ | |
116 | -a $(ARCH) \ | |
117 | >/dev/null; \ | |
118 | test -s $@ || rm -f $@ | |
119 | @@ -197,6 +198,7 @@ cmd_modversions = \ | |
120 | -r $(firstword $(wildcard \ | |
121 | $(@:.o=.symref) /dev/null)) \ | |
122 | $(if $(KBUILD_PRESERVE),-p) \ | |
123 | + $(if $(KBUILD_OVERRIDE),-o) \ | |
124 | -a $(ARCH) \ | |
125 | > $(@D)/.tmp_$(@F:.o=.ver); \ | |
126 | \ |