Commit a3df50ab authored by James Clark's avatar James Clark Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Refactor out kernel symbol argument sanity checking



User supplied values for vmlinux and kallsyms are checked before
continuing. Refactor this into a function so that it can be used
elsewhere.

Reviewed-by: default avatarDenis Nikitin <denik@chromium.org>
Signed-off-by: default avatarJames Clark <james.clark@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20211018134844.2627174-2-james.clark@arm.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 1a86f4ba
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -1378,18 +1378,9 @@ int cmd_report(int argc, const char **argv)
	if (quiet)
		perf_quiet_option();

	if (symbol_conf.vmlinux_name &&
	    access(symbol_conf.vmlinux_name, R_OK)) {
		pr_err("Invalid file: %s\n", symbol_conf.vmlinux_name);
		ret = -EINVAL;
		goto exit;
	}
	if (symbol_conf.kallsyms_name &&
	    access(symbol_conf.kallsyms_name, R_OK)) {
		pr_err("Invalid file: %s\n", symbol_conf.kallsyms_name);
		ret = -EINVAL;
	ret = symbol__validate_sym_arguments();
	if (ret)
		goto exit;
	}

	if (report.inverted_callchain)
		callchain_param.order = ORDER_CALLER;
+22 −0
Original line number Diff line number Diff line
@@ -2634,3 +2634,25 @@ struct mem_info *mem_info__new(void)
		refcount_set(&mi->refcnt, 1);
	return mi;
}

/*
 * Checks that user supplied symbol kernel files are accessible because
 * the default mechanism for accessing elf files fails silently. i.e. if
 * debug syms for a build ID aren't found perf carries on normally. When
 * they are user supplied we should assume that the user doesn't want to
 * silently fail.
 */
int symbol__validate_sym_arguments(void)
{
	if (symbol_conf.vmlinux_name &&
	    access(symbol_conf.vmlinux_name, R_OK)) {
		pr_err("Invalid file: %s\n", symbol_conf.vmlinux_name);
		return -EINVAL;
	}
	if (symbol_conf.kallsyms_name &&
	    access(symbol_conf.kallsyms_name, R_OK)) {
		pr_err("Invalid file: %s\n", symbol_conf.kallsyms_name);
		return -EINVAL;
	}
	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -286,4 +286,6 @@ static inline void __mem_info__zput(struct mem_info **mi)

#define mem_info__zput(mi) __mem_info__zput(&mi)

int symbol__validate_sym_arguments(void);

#endif /* __PERF_SYMBOL */