perf symbols: Cleanup the code flow of dso__find_kallsyms
Cleanup the code flow of dso__find_kallsyms() to remove redundant checking code and add some comment for readability. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Hemant Kumar <hemant@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20160528151522.16098.43446.stgit@devbox Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
11870d714a
commit
4e4b6c0668
@ -1674,21 +1674,8 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
|
|||||||
sizeof(host_build_id)) == 0)
|
sizeof(host_build_id)) == 0)
|
||||||
is_host = dso__build_id_equal(dso, host_build_id);
|
is_host = dso__build_id_equal(dso, host_build_id);
|
||||||
|
|
||||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
/* Try a fast path for /proc/kallsyms if possible */
|
||||||
|
|
||||||
scnprintf(path, sizeof(path), "%s/%s/%s", buildid_dir,
|
|
||||||
DSO__NAME_KCORE, sbuild_id);
|
|
||||||
|
|
||||||
/* Use /proc/kallsyms if possible */
|
|
||||||
if (is_host) {
|
if (is_host) {
|
||||||
DIR *d;
|
|
||||||
|
|
||||||
/* If no cached kcore go with /proc/kallsyms */
|
|
||||||
d = opendir(path);
|
|
||||||
if (!d)
|
|
||||||
goto proc_kallsyms;
|
|
||||||
closedir(d);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do not check the build-id cache, unless we know we cannot use
|
* Do not check the build-id cache, unless we know we cannot use
|
||||||
* /proc/kcore or module maps don't match to /proc/kallsyms.
|
* /proc/kcore or module maps don't match to /proc/kallsyms.
|
||||||
@ -1699,18 +1686,24 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
|
|||||||
if (filename__readable("/proc/kcore") &&
|
if (filename__readable("/proc/kcore") &&
|
||||||
!validate_kcore_addresses("/proc/kallsyms", map))
|
!validate_kcore_addresses("/proc/kallsyms", map))
|
||||||
goto proc_kallsyms;
|
goto proc_kallsyms;
|
||||||
|
|
||||||
/* Find kallsyms in build-id cache with kcore */
|
|
||||||
if (!find_matching_kcore(map, path, sizeof(path)))
|
|
||||||
return strdup(path);
|
|
||||||
|
|
||||||
goto proc_kallsyms;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
||||||
|
|
||||||
/* Find kallsyms in build-id cache with kcore */
|
/* Find kallsyms in build-id cache with kcore */
|
||||||
|
scnprintf(path, sizeof(path), "%s/%s/%s",
|
||||||
|
buildid_dir, DSO__NAME_KCORE, sbuild_id);
|
||||||
|
|
||||||
if (!find_matching_kcore(map, path, sizeof(path)))
|
if (!find_matching_kcore(map, path, sizeof(path)))
|
||||||
return strdup(path);
|
return strdup(path);
|
||||||
|
|
||||||
|
/* Use current /proc/kallsyms if possible */
|
||||||
|
if (is_host) {
|
||||||
|
proc_kallsyms:
|
||||||
|
return strdup("/proc/kallsyms");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finally, find a cache of kallsyms */
|
||||||
scnprintf(path, sizeof(path), "%s/%s/%s",
|
scnprintf(path, sizeof(path), "%s/%s/%s",
|
||||||
buildid_dir, DSO__NAME_KALLSYMS, sbuild_id);
|
buildid_dir, DSO__NAME_KALLSYMS, sbuild_id);
|
||||||
|
|
||||||
@ -1721,9 +1714,6 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return strdup(path);
|
return strdup(path);
|
||||||
|
|
||||||
proc_kallsyms:
|
|
||||||
return strdup("/proc/kallsyms");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dso__load_kernel_sym(struct dso *dso, struct map *map,
|
static int dso__load_kernel_sym(struct dso *dso, struct map *map,
|
||||||
|
Loading…
Reference in New Issue
Block a user