|
Michal Marek |
8ed77e |
From: Andreas Gruenbacher <agruen@suse.de>
|
|
Michal Marek |
8ed77e |
Subject: genksyms: add --override flag
|
|
Michal Kubecek |
515f42 |
Patch-mainline: Not yet, <jeffm: asked msuchanek to submit, Oct 4, 2017>
|
|
Michal Kubecek |
b493de |
References: none
|
|
Michal Marek |
8ed77e |
|
|
Michal Marek |
8ed77e |
Add --override flag to genksyms to allow overriding types with old
|
|
Michal Marek |
8ed77e |
definitions using the 'override' keyword. This is similar to -p --preserve,
|
|
Michal Marek |
8ed77e |
but it doesn't abort the build if a symtype cannot be preserved
|
|
Michal Marek |
8ed77e |
|
|
Michal Marek |
8ed77e |
[mmarek: added KBUILD_OVERRIDE env var to set this globally for the entire
|
|
Michal Marek |
8ed77e |
build]
|
|
Michal Marek |
8ed77e |
---
|
|
Michal Kubecek |
549a5b |
scripts/Makefile.build | 1 +
|
|
Michal Kubecek |
549a5b |
scripts/genksyms/genksyms.c | 21 +++++++++++++++------
|
|
Jeff Mahoney |
455827 |
2 files changed, 16 insertions(+), 6 deletions(-)
|
|
Michal Marek |
8ed77e |
|
|
Jeff Mahoney |
455827 |
--- a/scripts/Makefile.build
|
|
Jeff Mahoney |
455827 |
+++ b/scripts/Makefile.build
|
|
Michal Kubecek |
515f42 |
@@ -129,6 +129,7 @@ $(obj)/%.i: $(src)/%.c FORCE
|
|
Michal Kubecek |
515f42 |
genksyms = scripts/genksyms/genksyms \
|
|
Michal Kubecek |
515f42 |
$(if $(1), -T $(2)) \
|
|
Michal Kubecek |
515f42 |
$(if $(KBUILD_PRESERVE), -p) \
|
|
Michal Kubecek |
515f42 |
+ $(if $(KBUILD_OVERRIDE),-o) \
|
|
Michal Kubecek |
515f42 |
-r $(or $(wildcard $(2:.symtypes=.symref)), /dev/null)
|
|
Jeff Mahoney |
455827 |
|
|
Michal Kubecek |
515f42 |
# These mirror gensymtypes_S and co below, keep them in synch.
|
|
Michal Marek |
8ed77e |
--- a/scripts/genksyms/genksyms.c
|
|
Michal Marek |
8ed77e |
+++ b/scripts/genksyms/genksyms.c
|
|
Michal Kubecek |
515f42 |
@@ -33,7 +33,7 @@ char *cur_filename;
|
|
Jeff Mahoney |
6318d5 |
int in_source_file;
|
|
Michal Marek |
8ed77e |
|
|
Michal Marek |
8ed77e |
static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
|
|
Michal Kubecek |
515f42 |
- flag_preserve, flag_warnings;
|
|
Michal Kubecek |
515f42 |
+ flag_override, flag_preserve, flag_warnings;
|
|
Michal Marek |
8ed77e |
|
|
Jeff Mahoney |
0ead2a |
static int errors;
|
|
Michal Kubecek |
549a5b |
static int nsyms;
|
|
Michal Kubecek |
515f42 |
@@ -243,7 +243,7 @@ static struct symbol *__add_symbol(const char *name, enum symbol_type type,
|
|
Michal Marek |
8ed77e |
sym->is_declared = 1;
|
|
Michal Marek |
8ed77e |
return sym;
|
|
Michal Marek |
8ed77e |
} else if (!sym->is_declared) {
|
|
Michal Marek |
8ed77e |
- if (sym->is_override && flag_preserve) {
|
|
Michal Marek |
8ed77e |
+ if (sym->is_override && flag_override) {
|
|
Michal Marek |
8ed77e |
print_location();
|
|
Michal Marek |
8ed77e |
fprintf(stderr, "ignoring ");
|
|
Michal Marek |
8ed77e |
print_type_name(type, name);
|
|
Michal Kubecek |
515f42 |
@@ -656,11 +656,13 @@ void export_symbol(const char *name)
|
|
Michal Marek |
8ed77e |
struct symbol *n = sym->expansion_trail;
|
|
Michal Marek |
8ed77e |
|
|
Michal Marek |
8ed77e |
if (sym->status != STATUS_UNCHANGED) {
|
|
Michal Marek |
8ed77e |
+ int fail = sym->is_override && flag_preserve;
|
|
Michal Marek |
8ed77e |
+
|
|
Michal Marek |
8ed77e |
if (!has_changed) {
|
|
Michal Marek |
8ed77e |
print_location();
|
|
Michal Marek |
8ed77e |
fprintf(stderr, "%s: %s: modversion "
|
|
Michal Marek |
8ed77e |
"changed because of changes "
|
|
Michal Marek |
8ed77e |
- "in ", flag_preserve ? "error" :
|
|
Michal Marek |
8ed77e |
+ "in ", fail ? "error" :
|
|
Michal Marek |
8ed77e |
"warning", name);
|
|
Michal Marek |
8ed77e |
} else
|
|
Michal Marek |
8ed77e |
fprintf(stderr, ", ");
|
|
Michal Kubecek |
515f42 |
@@ -668,7 +670,7 @@ void export_symbol(const char *name)
|
|
Michal Marek |
8ed77e |
if (sym->status == STATUS_DEFINED)
|
|
Michal Marek |
8ed77e |
fprintf(stderr, " (became defined)");
|
|
Michal Marek |
8ed77e |
has_changed = 1;
|
|
Michal Marek |
8ed77e |
- if (flag_preserve)
|
|
Michal Marek |
8ed77e |
+ if (fail)
|
|
Michal Marek |
8ed77e |
errors++;
|
|
Michal Marek |
8ed77e |
}
|
|
Michal Marek |
8ed77e |
sym->expansion_trail = 0;
|
|
Michal Kubecek |
515f42 |
@@ -724,6 +726,7 @@ static void genksyms_usage(void)
|
|
Michal Marek |
8ed77e |
" -D, --dump Dump expanded symbol defs (for debugging only)\n"
|
|
Michal Marek |
8ed77e |
" -r, --reference file Read reference symbols from a file\n"
|
|
Michal Marek |
8ed77e |
" -T, --dump-types file Dump expanded types into file\n"
|
|
Michal Marek |
8ed77e |
+ " -o, --override Allow to override reference modversions\n"
|
|
Michal Marek |
8ed77e |
" -p, --preserve Preserve reference modversions or fail\n"
|
|
Michal Marek |
8ed77e |
" -w, --warnings Enable warnings\n"
|
|
Michal Marek |
8ed77e |
" -q, --quiet Disable warnings (default)\n"
|
|
Michal Kubecek |
515f42 |
@@ -735,6 +738,7 @@ static void genksyms_usage(void)
|
|
Michal Marek |
8ed77e |
" -D Dump expanded symbol defs (for debugging only)\n"
|
|
Michal Marek |
8ed77e |
" -r file Read reference symbols from a file\n"
|
|
Michal Marek |
8ed77e |
" -T file Dump expanded types into file\n"
|
|
Michal Marek |
8ed77e |
+ " -o Allow to override reference modversions\n"
|
|
Michal Marek |
8ed77e |
" -p Preserve reference modversions or fail\n"
|
|
Michal Marek |
8ed77e |
" -w Enable warnings\n"
|
|
Michal Marek |
8ed77e |
" -q Disable warnings (default)\n"
|
|
Michal Kubecek |
515f42 |
@@ -758,15 +762,16 @@ int main(int argc, char **argv)
|
|
Michal Marek |
8ed77e |
{"reference", 1, 0, 'r'},
|
|
Michal Marek |
8ed77e |
{"dump-types", 1, 0, 'T'},
|
|
Michal Marek |
8ed77e |
{"preserve", 0, 0, 'p'},
|
|
Michal Marek |
8ed77e |
+ {"override", 0, 0, 'o'},
|
|
Michal Marek |
8ed77e |
{"version", 0, 0, 'V'},
|
|
Michal Marek |
8ed77e |
{"help", 0, 0, 'h'},
|
|
Michal Marek |
8ed77e |
{0, 0, 0, 0}
|
|
Michal Marek |
8ed77e |
};
|
|
Michal Marek |
8ed77e |
|
|
Michal Kubecek |
515f42 |
- while ((o = getopt_long(argc, argv, "s:dwqVDr:T:ph",
|
|
Michal Kubecek |
515f42 |
+ while ((o = getopt_long(argc, argv, "s:dwqVDr:T:oph",
|
|
Michal Marek |
8ed77e |
&long_opts[0], NULL)) != EOF)
|
|
Michal Marek |
8ed77e |
#else /* __GNU_LIBRARY__ */
|
|
Michal Kubecek |
515f42 |
- while ((o = getopt(argc, argv, "s:dwqVDr:T:ph")) != EOF)
|
|
Michal Kubecek |
515f42 |
+ while ((o = getopt(argc, argv, "s:dwqVDr:T:oph")) != EOF)
|
|
Michal Marek |
8ed77e |
#endif /* __GNU_LIBRARY__ */
|
|
Michal Marek |
8ed77e |
switch (o) {
|
|
Michal Kubecek |
549a5b |
case 'd':
|
|
Michal Kubecek |
515f42 |
@@ -800,7 +805,11 @@ int main(int argc, char **argv)
|
|
Michal Marek |
8ed77e |
return 1;
|
|
Michal Marek |
8ed77e |
}
|
|
Michal Marek |
8ed77e |
break;
|
|
Michal Marek |
8ed77e |
+ case 'o':
|
|
Michal Marek |
8ed77e |
+ flag_override = 1;
|
|
Michal Marek |
8ed77e |
+ break;
|
|
Michal Marek |
8ed77e |
case 'p':
|
|
Michal Marek |
8ed77e |
+ flag_override = 1;
|
|
Michal Marek |
8ed77e |
flag_preserve = 1;
|
|
Michal Marek |
8ed77e |
break;
|
|
Michal Marek |
8ed77e |
case 'h':
|