Skip to content

Commit

Permalink
objtool: Split noinstr validation from --vmlinux
Browse files Browse the repository at this point in the history
This change adds a --noinstr flag to objtool to allow us to specify
that we're processing vmlinux.o without also enabling noinstr
validation. This is needed to avoid false positives with LTO when we
run objtool on vmlinux.o without CONFIG_DEBUG_ENTRY.

Signed-off-by: Sami Tolvanen <[email protected]>
  • Loading branch information
samitolvanen authored and kees committed Feb 23, 2021
1 parent 6dafca9 commit 41425eb
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 4 deletions.
2 changes: 1 addition & 1 deletion scripts/link-vmlinux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ objtool_link()
local objtoolopt;

if [ -n "${CONFIG_VMLINUX_VALIDATION}" ]; then
objtoolopt="check --vmlinux"
objtoolopt="check --vmlinux --noinstr"
if [ -z "${CONFIG_FRAME_POINTER}" ]; then
objtoolopt="${objtoolopt} --no-fp"
fi
Expand Down
3 changes: 2 additions & 1 deletion tools/objtool/builtin-check.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include "builtin.h"
#include "objtool.h"

bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount;
bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount, noinstr;

static const char * const check_usage[] = {
"objtool check [<options>] file.o",
Expand All @@ -34,6 +34,7 @@ const struct option check_options[] = {
OPT_BOOLEAN('a', "uaccess", &uaccess, "enable uaccess checking"),
OPT_BOOLEAN('s', "stats", &stats, "print statistics"),
OPT_BOOLEAN('d', "duplicate", &validate_dup, "duplicate validation for vmlinux.o"),
OPT_BOOLEAN('n', "noinstr", &noinstr, "noinstr validation for vmlinux.o"),
OPT_BOOLEAN('l', "vmlinux", &vmlinux, "vmlinux.o validation"),
OPT_BOOLEAN('M', "mcount", &mcount, "generate __mcount_loc"),
OPT_END(),
Expand Down
2 changes: 1 addition & 1 deletion tools/objtool/builtin.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include <subcmd/parse-options.h>

extern const struct option check_options[];
extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount;
extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount, noinstr;

extern int cmd_check(int argc, const char **argv);
extern int cmd_orc(int argc, const char **argv);
Expand Down
2 changes: 1 addition & 1 deletion tools/objtool/check.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ static void init_insn_state(struct insn_state *state, struct section *sec)
* not correctly determine insn->call_dest->sec (external symbols do
* not have a section).
*/
if (vmlinux && sec)
if (vmlinux && noinstr && sec)
state->noinstr = sec->noinstr;
}

Expand Down

0 comments on commit 41425eb

Please sign in to comment.