Message ID | 20241213-objtool-strict-v1-1-fd388f9d971f@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | objtool: Add option to fail build on vmlinux warnings | expand |
On Fri, Dec 13, 2024 at 11:31:30AM +0000, Brendan Jackman wrote: > At present objtool only prints to the terminal when observing "fatal > warnings". This option lets you have it produce an error instead. > > My use case for this is noinstr validation; so far I've never seen any > false warnings here, but it quite often detects real bugs. I'd like my > build to fail when I have those bugs. > > Signed-off-by: Brendan Jackman <jackmanb@google.com> > --- > tools/objtool/builtin-check.c | 6 ++++++ > tools/objtool/check.c | 7 ++----- > tools/objtool/include/objtool/builtin.h | 1 + > 3 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c > index 387d56a7f5fb8da8435d0a3f5c05eeee66932c9b..dd70cbb98929b7f558c27766bda46ad276c0750d 100644 > --- a/tools/objtool/builtin-check.c > +++ b/tools/objtool/builtin-check.c > @@ -94,6 +94,12 @@ static const struct option check_options[] = { > OPT_BOOLEAN(0, "sec-address", &opts.sec_address, "print section addresses in warnings"), > OPT_BOOLEAN(0, "stats", &opts.stats, "print statistics"), > OPT_BOOLEAN('v', "verbose", &opts.verbose, "verbose warnings"), > + /* > + * For now, don't fail the kernel build on fatal warnings by default. > + * These errors are still fairly common due to the growing matrix of > + * supported toolchains and their recent pace of change. > + */ > + OPT_BOOLEAN(0, "fail-on-warn", &opts.fail_on_warn, "fail on fatal warnings"), How about "--Werror" to mirror the compiler -Werror option.
On Sat, 14 Dec 2024 at 01:36, Josh Poimboeuf <jpoimboe@kernel.org> wrote:
> How about "--Werror" to mirror the compiler -Werror option.
Sure, --Werror sounds good to me.
diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c index 387d56a7f5fb8da8435d0a3f5c05eeee66932c9b..dd70cbb98929b7f558c27766bda46ad276c0750d 100644 --- a/tools/objtool/builtin-check.c +++ b/tools/objtool/builtin-check.c @@ -94,6 +94,12 @@ static const struct option check_options[] = { OPT_BOOLEAN(0, "sec-address", &opts.sec_address, "print section addresses in warnings"), OPT_BOOLEAN(0, "stats", &opts.stats, "print statistics"), OPT_BOOLEAN('v', "verbose", &opts.verbose, "verbose warnings"), + /* + * For now, don't fail the kernel build on fatal warnings by default. + * These errors are still fairly common due to the growing matrix of + * supported toolchains and their recent pace of change. + */ + OPT_BOOLEAN(0, "fail-on-warn", &opts.fail_on_warn, "fail on fatal warnings"), OPT_END(), }; diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 4ce176ad411fb12a10101bbedbb6180275941b4b..266896b46e92c5c4a3244aa73deb3a355e6d8f8d 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4941,10 +4941,7 @@ int check(struct objtool_file *file) } out: - /* - * For now, don't fail the kernel build on fatal warnings. These - * errors are still fairly common due to the growing matrix of - * supported toolchains and their recent pace of change. - */ + if (opts.fail_on_warn && warnings) + return 1; return 0; } diff --git a/tools/objtool/include/objtool/builtin.h b/tools/objtool/include/objtool/builtin.h index fcca6662c8b4b5e0048e54fada8694cc2e6ebc34..f9af81ad9f600044280085cd1a743609ce054a21 100644 --- a/tools/objtool/include/objtool/builtin.h +++ b/tools/objtool/include/objtool/builtin.h @@ -38,6 +38,7 @@ struct opts { bool sec_address; bool stats; bool verbose; + bool fail_on_warn; }; extern struct opts opts;
At present objtool only prints to the terminal when observing "fatal warnings". This option lets you have it produce an error instead. My use case for this is noinstr validation; so far I've never seen any false warnings here, but it quite often detects real bugs. I'd like my build to fail when I have those bugs. Signed-off-by: Brendan Jackman <jackmanb@google.com> --- tools/objtool/builtin-check.c | 6 ++++++ tools/objtool/check.c | 7 ++----- tools/objtool/include/objtool/builtin.h | 1 + 3 files changed, 9 insertions(+), 5 deletions(-)