objtool: Add --hacks=skylake
authorPeter Zijlstra <peterz@infradead.org>
Thu, 15 Sep 2022 11:11:10 +0000 (13:11 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 17 Oct 2022 14:41:07 +0000 (16:41 +0200)
Make the call/func sections selectable via the --hacks option.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220915111146.120821440@infradead.org
scripts/Makefile.lib
tools/objtool/builtin-check.c
tools/objtool/check.c
tools/objtool/include/objtool/builtin.h

index 3aa384c..85f0275 100644 (file)
@@ -254,6 +254,7 @@ objtool := $(objtree)/tools/objtool/objtool
 
 objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK)            += --hacks=jump_label
 objtool-args-$(CONFIG_HAVE_NOINSTR_HACK)               += --hacks=noinstr
+objtool-args-$(CONFIG_CALL_DEPTH_TRACKING)             += --hacks=skylake
 objtool-args-$(CONFIG_X86_KERNEL_IBT)                  += --ibt
 objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL)       += --mcount
 objtool-args-$(CONFIG_UNWINDER_ORC)                    += --orc
index 24fbe80..0a04f8e 100644 (file)
@@ -57,12 +57,17 @@ static int parse_hacks(const struct option *opt, const char *str, int unset)
                found = true;
        }
 
+       if (!str || strstr(str, "skylake")) {
+               opts.hack_skylake = true;
+               found = true;
+       }
+
        return found ? 0 : -1;
 }
 
 const struct option check_options[] = {
        OPT_GROUP("Actions:"),
-       OPT_CALLBACK_OPTARG('h', "hacks", NULL, NULL, "jump_label,noinstr", "patch toolchain bugs/limitations", parse_hacks),
+       OPT_CALLBACK_OPTARG('h', "hacks", NULL, NULL, "jump_label,noinstr,skylake", "patch toolchain bugs/limitations", parse_hacks),
        OPT_BOOLEAN('i', "ibt", &opts.ibt, "validate and annotate IBT"),
        OPT_BOOLEAN('m', "mcount", &opts.mcount, "annotate mcount/fentry calls for ftrace"),
        OPT_BOOLEAN('n', "noinstr", &opts.noinstr, "validate noinstr rules"),
index f578e03..1461c88 100644 (file)
@@ -4352,10 +4352,12 @@ int check(struct objtool_file *file)
                        goto out;
                warnings += ret;
 
-               ret = create_direct_call_sections(file);
-               if (ret < 0)
-                       goto out;
-               warnings += ret;
+               if (opts.hack_skylake) {
+                       ret = create_direct_call_sections(file);
+                       if (ret < 0)
+                               goto out;
+                       warnings += ret;
+               }
        }
 
        if (opts.mcount) {
index 42a52f1..22092a9 100644 (file)
@@ -14,6 +14,7 @@ struct opts {
        bool dump_orc;
        bool hack_jump_label;
        bool hack_noinstr;
+       bool hack_skylake;
        bool ibt;
        bool mcount;
        bool noinstr;