tools/perf/builtin-buildid-list.c
Source file repositories/reference/linux-study-clean/tools/perf/builtin-buildid-list.c
File Facts
- System
- Linux kernel
- Corpus path
tools/perf/builtin-buildid-list.c- Extension
.c- Size
- 5053 bytes
- Lines
- 177
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
builtin.hutil/build-id.hutil/debug.hutil/dso.hutil/map.hsubcmd/pager.hsubcmd/parse-options.hutil/session.hutil/symbol.hutil/data.hutil/util.herrno.hinttypes.hlinux/err.h
Detected Declarations
function Copyrightfunction buildid__show_kernel_mapsfunction sysfs__fprintf_build_idfunction filename__fprintf_build_idfunction dso__skip_buildidfunction perf_session__list_build_idsfunction cmd_buildid_list
Annotated Snippet
#include "builtin.h"
#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 "util/util.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(map);
char bid_buf[SBUILD_ID_SIZE];
const char *dso_long_name = dso__long_name(dso);
const char *dso_short_name = dso__short_name(dso);
memset(bid_buf, 0, sizeof(bid_buf));
if (dso__has_build_id(dso))
build_id__snprintf(dso__bid(dso), bid_buf, sizeof(bid_buf));
printf("%s %16" PRIx64 " %16" PRIx64, bid_buf, map__start(map), map__end(map));
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 perf_env host_env;
struct machine *machine;
perf_env__init(&host_env);
machine = machine__new_host(&host_env);
machine__for_each_kernel_map(machine, buildid__map_cb, NULL);
machine__delete(machine);
perf_env__exit(&host_env);
}
static int sysfs__fprintf_build_id(FILE *fp)
{
char sbuild_id[SBUILD_ID_SIZE];
int ret;
ret = sysfs__snprintf_build_id("/", sbuild_id, sizeof(sbuild_id));
if (ret != sizeof(sbuild_id))
return ret < 0 ? ret : -EINVAL;
return fprintf(fp, "%s\n", sbuild_id);
}
static int filename__fprintf_build_id(const char *name, FILE *fp)
{
char sbuild_id[SBUILD_ID_SIZE];
int ret;
ret = filename__snprintf_build_id(name, sbuild_id, sizeof(sbuild_id));
if (ret != sizeof(sbuild_id))
return ret < 0 ? ret : -EINVAL;
return fprintf(fp, "%s\n", sbuild_id);
}
static bool dso__skip_buildid(struct dso *dso, int with_hits)
{
return with_hits && !dso__hit(dso);
}
static int perf_session__list_build_ids(bool force, bool with_hits)
{
struct perf_session *session;
struct perf_data data = {
.path = input_name,
.mode = PERF_DATA_MODE_READ,
.force = force,
};
struct perf_tool build_id__mark_dso_hit_ops;
symbol__elf_init();
/*
* See if this is an ELF file first:
Annotation
- Immediate include surface: `builtin.h`, `util/build-id.h`, `util/debug.h`, `util/dso.h`, `util/map.h`, `subcmd/pager.h`, `subcmd/parse-options.h`, `util/session.h`.
- Detected declarations: `function Copyright`, `function buildid__show_kernel_maps`, `function sysfs__fprintf_build_id`, `function filename__fprintf_build_id`, `function dso__skip_buildid`, `function perf_session__list_build_ids`, `function cmd_buildid_list`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.