diff options
Diffstat (limited to 'tools/perf/builtin-buildid-list.c')
| -rw-r--r-- | tools/perf/builtin-buildid-list.c | 39 | 
1 files changed, 38 insertions, 1 deletions
diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c index cebadd632234..00bfe89f0b5d 100644 --- a/tools/perf/builtin-buildid-list.c +++ b/tools/perf/builtin-buildid-list.c @@ -12,14 +12,44 @@  #include "util/build-id.h"  #include "util/debug.h"  #include "util/dso.h" +#include "util/map.h"  #include <subcmd/pager.h>  #include <subcmd/parse-options.h>  #include "util/session.h"  #include "util/symbol.h"  #include "util/data.h"  #include <errno.h> +#include <inttypes.h>  #include <linux/err.h> +static int buildid__map_cb(struct map *map, void *arg __maybe_unused) +{ +	const struct dso *dso = map->dso; +	char bid_buf[SBUILD_ID_SIZE]; + +	memset(bid_buf, 0, sizeof(bid_buf)); +	if (dso->has_build_id) +		build_id__sprintf(&dso->bid, bid_buf); +	printf("%s %16" PRIx64 " %16" PRIx64, bid_buf, map->start, map->end); +	if (dso->long_name != NULL) { +		printf(" %s", dso->long_name); +	} else if (dso->short_name != NULL) { +		printf(" %s", dso->short_name); +	} +	printf("\n"); + +	return 0; +} + +static void buildid__show_kernel_maps(void) +{ +	struct machine *machine; + +	machine = machine__new_host(); +	machine__for_each_kernel_map(machine, buildid__map_cb, NULL); +	machine__delete(machine); +} +  static int sysfs__fprintf_build_id(FILE *fp)  {  	char sbuild_id[SBUILD_ID_SIZE]; @@ -99,6 +129,7 @@ out:  int cmd_buildid_list(int argc, const char **argv)  {  	bool show_kernel = false; +	bool show_kernel_maps = false;  	bool with_hits = false;  	bool force = false;  	const struct option options[] = { @@ -106,6 +137,8 @@ int cmd_buildid_list(int argc, const char **argv)  	OPT_STRING('i', "input", &input_name, "file", "input file name"),  	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),  	OPT_BOOLEAN('k', "kernel", &show_kernel, "Show current kernel build id"), +	OPT_BOOLEAN('m', "kernel-maps", &show_kernel_maps, +	    "Show build id of current kernel + modules"),  	OPT_INCR('v', "verbose", &verbose, "be more verbose"),  	OPT_END()  	}; @@ -117,8 +150,12 @@ int cmd_buildid_list(int argc, const char **argv)  	argc = parse_options(argc, argv, options, buildid_list_usage, 0);  	setup_pager(); -	if (show_kernel) +	if (show_kernel) {  		return !(sysfs__fprintf_build_id(stdout) > 0); +	} else if (show_kernel_maps) { +		buildid__show_kernel_maps(); +		return 0; +	}  	return perf_session__list_build_ids(force, with_hits);  }  |