perf symbols: Allow loading kallsyms without considering kcore files
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: e02092b9a922f17e951b2df5f12f4aafe7383a21 Gitweb: http://git.kernel.org/tip/e02092b9a922f17e951b2df5f12f4aafe7383a21 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 19 Apr 2016 12:12:49 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 19 Apr 2016 12:38:56 -0300
perf symbols: Allow loading kallsyms without considering kcore files
Before the support for using /proc/kcore was introduced, the kallsyms routines used /proc/modules and the first 'perf test' entry expected finding maps for each module in the system, which is not the case with the kcore code. Provide a way to ignore kcore files so that the test can have its expectations met.
Improving the test to cover kcore files as well needs to be done.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/machine.c | 12 +++++++++--- tools/perf/util/machine.h | 2 ++ tools/perf/util/symbol.c | 12 +++++++++--- tools/perf/util/symbol.h | 2 ++ 4 files changed, 22 insertions(+), 6 deletions(-)
tools/perf/util/machine.c +9 -3
@@ -908,11 +908,11 @@ int machines__create_kernel_maps(struct machines *machines, pid_t pid)return machine__create_kernel_maps (machine); } -int machine__load_kallsyms (struct machine *machine,const char *filename, -enum map_type type,symbol_filter_t filter) +int __machine__load_kallsyms (struct machine *machine,const char *filename, +enum map_type type,bool no_kcore,symbol_filter_t filter) {struct map *map =machine__kernel_map (machine); -int ret =dso__load_kallsyms (map->dso, filename, map, filter); +int ret =__dso__load_kallsyms (map->dso, filename, map, no_kcore, filter);if (ret >0 ) {dso__set_loaded (map->dso, type);
@@ -927,6 +927,12 @@ int machine__load_kallsyms(struct machine *machine, const char *filename,return ret; } +int machine__load_kallsyms (struct machine *machine,const char *filename, +enum map_type type,symbol_filter_t filter) +{ +return __machine__load_kallsyms (machine, filename, type, false, filter); +} +int machine__load_vmlinux_path (struct machine *machine,enum map_type type,symbol_filter_t filter) {
tools/perf/util/machine.h +2 -0
@@ -215,6 +215,8 @@ struct symbol *machine__find_kernel_function_by_name(struct machine *machine,struct map *machine__findnew_module_map (struct machine *machine,u64 start,const char *filename); +int __machine__load_kallsyms (struct machine *machine,const char *filename, +enum map_type type,bool no_kcore,symbol_filter_t filter);int machine__load_kallsyms (struct machine *machine,const char *filename,enum map_type type,symbol_filter_t filter); int machine__load_vmlinux_path(struct machine *machine, enum map_type type,
tools/perf/util/symbol.c +9 -3
@@ -1208,8 +1208,8 @@ static int kallsyms__delta(struct map *map, const char *filename, u64 *delta)return 0 ; } -int dso__load_kallsyms (struct dso *dso,const char *filename, -struct map *map,symbol_filter_t filter) +int __dso__load_kallsyms (struct dso *dso,const char *filename, +struct map *map,bool no_kcore,symbol_filter_t filter) {u64 delta =0 ;
@@ -1230,12 +1230,18 @@ int dso__load_kallsyms(struct dso *dso, const char *filename,else dso->symtab_type =DSO_BINARY_TYPE__KALLSYMS ; -if (!dso__load_kcore (dso, map, filename)) +if (!no_kcore && !dso__load_kcore (dso, map, filename))return dso__split_kallsyms_for_kcore (dso, map, filter);else return dso__split_kallsyms (dso, map, delta, filter); } +int dso__load_kallsyms (struct dso *dso,const char *filename, +struct map *map,symbol_filter_t filter) +{ +return __dso__load_kallsyms (dso, filename, map, false, filter); +} +static int dso__load_perf_map (struct dso *dso,struct map *map,symbol_filter_t filter) {
tools/perf/util/symbol.h +2 -0
@@ -240,6 +240,8 @@ int dso__load_vmlinux(struct dso *dso, struct map *map, symbol_filter_t filter);int dso__load_vmlinux_path (struct dso *dso,struct map *map,symbol_filter_t filter); +int __dso__load_kallsyms (struct dso *dso,const char *filename,struct map *map, +bool no_kcore,symbol_filter_t filter);int dso__load_kallsyms (struct dso *dso,const char *filename,struct map *map,symbol_filter_t filter);