mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 10:46:33 +00:00
perf probe: Ignore vmlinux buildid if offline kernel is given
Ignore the buildid of running kernel when both of --definition and --vmlinux is given because that kernel should be off-line. This also skips post-processing of kprobe event for relocating symbol and checking blacklist, because it can not be done on off-line kernel. E.g. without this fix perf shows an error as below ---- $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open ./vmlinux-arm with build id 7a1f76dd56e9c4da707cd3d6333f50748141434b not found, continuing without symbols Failed to find symbol do_sys_open in kernel Error: Failed to add events. ---- with this fix, we can get the definition ---- $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open p:probe/do_sys_open do_sys_open+0 ---- Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/147214228193.23638.12581984840822162131.stgit@devbox Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
1c20b1d154
commit
428aff82e9
@ -36,6 +36,8 @@ OPTIONS
|
|||||||
-k::
|
-k::
|
||||||
--vmlinux=PATH::
|
--vmlinux=PATH::
|
||||||
Specify vmlinux path which has debuginfo (Dwarf binary).
|
Specify vmlinux path which has debuginfo (Dwarf binary).
|
||||||
|
Only when using this with --definition, you can give an offline
|
||||||
|
vmlinux file.
|
||||||
|
|
||||||
-m::
|
-m::
|
||||||
--module=MODNAME|PATH::
|
--module=MODNAME|PATH::
|
||||||
|
@ -654,8 +654,16 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'a':
|
|
||||||
case 'D':
|
case 'D':
|
||||||
|
/*
|
||||||
|
* If user gives offline vmlinux, ignore buildid, since
|
||||||
|
* --definition doesn't change running kernel.
|
||||||
|
*/
|
||||||
|
if (symbol_conf.vmlinux_name)
|
||||||
|
symbol_conf.ignore_vmlinux_buildid = true;
|
||||||
|
/* fall through */
|
||||||
|
case 'a':
|
||||||
|
|
||||||
/* Ensure the last given target is used */
|
/* Ensure the last given target is used */
|
||||||
if (params.target && !params.target_used) {
|
if (params.target && !params.target_used) {
|
||||||
pr_err(" Error: -x/-m must follow the probe definitions.\n");
|
pr_err(" Error: -x/-m must follow the probe definitions.\n");
|
||||||
|
@ -674,6 +674,10 @@ post_process_kernel_probe_trace_events(struct probe_trace_event *tevs,
|
|||||||
char *tmp;
|
char *tmp;
|
||||||
int i, skipped = 0;
|
int i, skipped = 0;
|
||||||
|
|
||||||
|
/* Skip post process if the target is an offline kernel */
|
||||||
|
if (symbol_conf.ignore_vmlinux_buildid)
|
||||||
|
return 0;
|
||||||
|
|
||||||
reloc_sym = kernel_get_ref_reloc_sym();
|
reloc_sym = kernel_get_ref_reloc_sym();
|
||||||
if (!reloc_sym) {
|
if (!reloc_sym) {
|
||||||
pr_warning("Relocated base symbol is not found!\n");
|
pr_warning("Relocated base symbol is not found!\n");
|
||||||
|
@ -732,7 +732,7 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Always reject images with a mismatched build-id: */
|
/* Always reject images with a mismatched build-id: */
|
||||||
if (dso->has_build_id) {
|
if (dso->has_build_id && !symbol_conf.ignore_vmlinux_buildid) {
|
||||||
u8 build_id[BUILD_ID_SIZE];
|
u8 build_id[BUILD_ID_SIZE];
|
||||||
|
|
||||||
if (elf_read_build_id(elf, build_id, BUILD_ID_SIZE) < 0) {
|
if (elf_read_build_id(elf, build_id, BUILD_ID_SIZE) < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user