Commit acc8c6a7 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Peter Zijlstra
Browse files

objtool: Consolidate option validation

parent 764d9561
Loading
Loading
Loading
Loading
+24 −44
Original line number Diff line number Diff line
@@ -131,6 +131,26 @@ int cmd_parse_options(int argc, const char **argv, const char * const usage[])

static bool opts_valid(void)
{
	if (opts.mnop && !opts.mcount) {
		ERROR("--mnop requires --mcount");
		return false;
	}

	if (opts.noinstr && !opts.link) {
		ERROR("--noinstr requires --link");
		return false;
	}

	if (opts.ibt && !opts.link) {
		ERROR("--ibt requires --link");
		return false;
	}

	if (opts.unret && !opts.link) {
		ERROR("--unret requires --link");
		return false;
	}

	if (opts.hack_jump_label	||
	    opts.hack_noinstr		||
	    opts.ibt			||
@@ -158,45 +178,6 @@ static bool opts_valid(void)
	return false;
}

static bool mnop_opts_valid(void)
{
	if (opts.mnop && !opts.mcount) {
		ERROR("--mnop requires --mcount");
		return false;
	}

	return true;
}

static bool link_opts_valid(struct objtool_file *file)
{
	if (opts.link)
		return true;

	if (has_multiple_files(file->elf)) {
		ERROR("Linked object detected, forcing --link");
		opts.link = true;
		return true;
	}

	if (opts.noinstr) {
		ERROR("--noinstr requires --link");
		return false;
	}

	if (opts.ibt) {
		ERROR("--ibt requires --link");
		return false;
	}

	if (opts.unret) {
		ERROR("--unret requires --link");
		return false;
	}

	return true;
}

int objtool_run(int argc, const char **argv)
{
	const char *objname;
@@ -216,11 +197,10 @@ int objtool_run(int argc, const char **argv)
	if (!file)
		return 1;

	if (!mnop_opts_valid())
		return 1;

	if (!link_opts_valid(file))
		return 1;
	if (!opts.link && has_multiple_files(file->elf)) {
		ERROR("Linked object detected, forcing --link");
		opts.link = true;
	}

	ret = check(file);
	if (ret)