Commit 0c0a6d89 authored by Peter Zijlstra's avatar Peter Zijlstra
Browse files

objtool: Add --hacks=skylake



Make the call/func sections selectable via the --hacks option.

Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220915111146.120821440@infradead.org
parent 00abd384
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+6 −1
Original line number Diff line number Diff line
@@ -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"),
+6 −4
Original line number Diff line number Diff line
@@ -4352,11 +4352,13 @@ int check(struct objtool_file *file)
			goto out;
		warnings += ret;

		if (opts.hack_skylake) {
			ret = create_direct_call_sections(file);
			if (ret < 0)
				goto out;
			warnings += ret;
		}
	}

	if (opts.mcount) {
		ret = create_mcount_loc_sections(file);
+1 −0
Original line number Diff line number Diff line
@@ -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;