+++ /dev/null
-From: Andreas Gruenbacher <agruen@suse.de>
-Subject: genksyms: add --override flag
-
-Add --override flag to genksyms to allow overriding types with old
-definitions using the 'override' keyword. This is similar to -p --preserve,
-but it doesn't abort the build if a symtype cannot be preserved
-
-[mmarek: added KBUILD_OVERRIDE env var to set this globally for the entire
- build]
----
- scripts/genksyms/genksyms.c | 21 +++++++++++++++------
- 1 file changed, 15 insertions(+), 6 deletions(-)
-
-Index: b/scripts/genksyms/genksyms.c
-===================================================================
---- a/scripts/genksyms/genksyms.c
-+++ b/scripts/genksyms/genksyms.c
-@@ -43,7 +43,7 @@ int cur_line = 1;
- char *cur_filename;
-
- static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
-- flag_preserve, flag_warnings;
-+ flag_override, flag_preserve, flag_warnings;
- static const char *arch = "";
- static const char *mod_prefix = "";
-
-@@ -200,7 +200,7 @@ struct symbol *__add_symbol(const char *
- sym->is_declared = 1;
- return sym;
- } else if (!sym->is_declared) {
-- if (sym->is_override && flag_preserve) {
-+ if (sym->is_override && flag_override) {
- print_location();
- fprintf(stderr, "ignoring ");
- print_type_name(type, name);
-@@ -586,11 +586,13 @@ void export_symbol(const char *name)
- struct symbol *n = sym->expansion_trail;
-
- if (sym->status != STATUS_UNCHANGED) {
-+ int fail = sym->is_override && flag_preserve;
-+
- if (!has_changed) {
- print_location();
- fprintf(stderr, "%s: %s: modversion "
- "changed because of changes "
-- "in ", flag_preserve ? "error" :
-+ "in ", fail ? "error" :
- "warning", name);
- } else
- fprintf(stderr, ", ");
-@@ -598,7 +600,7 @@ void export_symbol(const char *name)
- if (sym->status == STATUS_DEFINED)
- fprintf(stderr, " (became defined)");
- has_changed = 1;
-- if (flag_preserve)
-+ if (fail)
- errors++;
- }
- sym->expansion_trail = 0;
-@@ -655,6 +657,7 @@ static void genksyms_usage(void)
- " -D, --dump Dump expanded symbol defs (for debugging only)\n"
- " -r, --reference file Read reference symbols from a file\n"
- " -T, --dump-types file Dump expanded types into file\n"
-+ " -o, --override Allow to override reference modversions\n"
- " -p, --preserve Preserve reference modversions or fail\n"
- " -w, --warnings Enable warnings\n"
- " -q, --quiet Disable warnings (default)\n"
-@@ -666,6 +669,7 @@ static void genksyms_usage(void)
- " -D Dump expanded symbol defs (for debugging only)\n"
- " -r file Read reference symbols from a file\n"
- " -T file Dump expanded types into file\n"
-+ " -o Allow to override reference modversions\n"
- " -p Preserve reference modversions or fail\n"
- " -w Enable warnings\n"
- " -q Disable warnings (default)\n"
-@@ -690,15 +694,16 @@ int main(int argc, char **argv)
- {"reference", 1, 0, 'r'},
- {"dump-types", 1, 0, 'T'},
- {"preserve", 0, 0, 'p'},
-+ {"override", 0, 0, 'o'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {0, 0, 0, 0}
- };
-
-- while ((o = getopt_long(argc, argv, "a:dwqVDr:T:ph",
-+ while ((o = getopt_long(argc, argv, "a:dwqVDr:T:oph",
- &long_opts[0], NULL)) != EOF)
- #else /* __GNU_LIBRARY__ */
-- while ((o = getopt(argc, argv, "a:dwqVDr:T:ph")) != EOF)
-+ while ((o = getopt(argc, argv, "a:dwqVDr:T:oph")) != EOF)
- #endif /* __GNU_LIBRARY__ */
- switch (o) {
- case 'a':
-@@ -735,7 +740,11 @@ int main(int argc, char **argv)
- return 1;
- }
- break;
-+ case 'o':
-+ flag_override = 1;
-+ break;
- case 'p':
-+ flag_override = 1;
- flag_preserve = 1;
- break;
- case 'h':
-Index: b/scripts/Makefile.build
-===================================================================
---- a/scripts/Makefile.build
-+++ b/scripts/Makefile.build
-@@ -159,6 +159,7 @@ cmd_cc_symtypes_c = \
- -r $(firstword $(wildcard \
- $(@:.symtypes=.symref) /dev/null)) \
- $(if $(KBUILD_PRESERVE),-p) \
-+ $(if $(KBUILD_OVERRIDE),-o) \
- -a $(ARCH) \
- >/dev/null; \
- test -s $@ || rm -f $@
-@@ -197,6 +198,7 @@ cmd_modversions = \
- -r $(firstword $(wildcard \
- $(@:.o=.symref) /dev/null)) \
- $(if $(KBUILD_PRESERVE),-p) \
-+ $(if $(KBUILD_OVERRIDE),-o) \
- -a $(ARCH) \
- > $(@D)/.tmp_$(@F:.o=.ver); \
- \