1 From: Andreas Gruenbacher <agruen@suse.de>
2 Subject: genksyms: add --override flag
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
8 [mmarek: added KBUILD_OVERRIDE env var to set this globally for the entire
11 scripts/genksyms/genksyms.c | 21 +++++++++++++++------
12 1 file changed, 15 insertions(+), 6 deletions(-)
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;
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 = "";
27 @@ -200,7 +200,7 @@ struct symbol *__add_symbol(const char *
30 } else if (!sym->is_declared) {
31 - if (sym->is_override && flag_preserve) {
32 + if (sym->is_override && flag_override) {
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;
39 if (sym->status != STATUS_UNCHANGED) {
40 + int fail = sym->is_override && flag_preserve;
44 fprintf(stderr, "%s: %s: modversion "
45 "changed because of changes "
46 - "in ", flag_preserve ? "error" :
47 + "in ", fail ? "error" :
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)");
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'},
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__ */
95 @@ -735,7 +740,11 @@ int main(int argc, char **argv)
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) \
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) \
125 > $(@D)/.tmp_$(@F:.o=.ver); \