tools/perf/util/dsos.c
Source file repositories/reference/linux-study-clean/tools/perf/util/dsos.c
File Facts
- System
- Linux kernel
- Corpus path
tools/perf/util/dsos.c- Extension
.c- Size
- 11347 bytes
- Lines
- 496
- 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
debug.hdsos.hdso.hutil.hvdso.hnamespaces.herrno.hstdlib.hstring.hsymbol.hunistd.h
Detected Declarations
struct dsos__read_build_ids_cb_argsstruct dsos__keystruct dsos__find_id_cb_argsstruct dsos__fprintf_buildid_cb_argsstruct dsos__fprintf_cb_argsfunction dsos__initfunction dsos__purgefunction dsos__exitfunction __dsos__for_each_dsofunction dsos__read_build_ids_cbfunction dsos__read_build_idsfunction __dso__cmp_long_namefunction __dso__cmp_short_namefunction dsos__cmp_long_name_id_short_namefunction dsos__cmp_key_long_name_idfunction __dsos__addfunction dsos__addfunction dsos__find_id_cbfunction dso__set_basenamefunction dsos__fprintf_buildid_cbfunction dsos__fprintf_buildidfunction dsos__fprintf_cbfunction dsos__fprintffunction dsos__hit_all_cbfunction dsos__hit_allfunction dsos__find_kernel_dso_cbfunction dsos__for_each_dso
Annotated Snippet
struct dsos__read_build_ids_cb_args {
bool with_hits;
bool have_build_id;
};
static int dsos__read_build_ids_cb(struct dso *dso, void *data)
{
struct dsos__read_build_ids_cb_args *args = data;
struct nscookie nsc;
struct build_id bid = { .size = 0, };
if (args->with_hits && !dso__hit(dso) && !dso__is_vdso(dso))
return 0;
if (dso__has_build_id(dso)) {
args->have_build_id = true;
return 0;
}
nsinfo__mountns_enter(dso__nsinfo(dso), &nsc);
if (filename__read_build_id(dso__long_name(dso), &bid) > 0) {
dso__set_build_id(dso, &bid);
args->have_build_id = true;
} else if (errno == ENOENT && dso__nsinfo(dso)) {
char *new_name = dso__filename_with_chroot(dso, dso__long_name(dso));
if (new_name && filename__read_build_id(new_name, &bid) > 0) {
dso__set_build_id(dso, &bid);
args->have_build_id = true;
}
free(new_name);
}
nsinfo__mountns_exit(&nsc);
return 0;
}
bool dsos__read_build_ids(struct dsos *dsos, bool with_hits)
{
struct dsos__read_build_ids_cb_args args = {
.with_hits = with_hits,
.have_build_id = false,
};
dsos__for_each_dso(dsos, dsos__read_build_ids_cb, &args);
return args.have_build_id;
}
static int __dso__cmp_long_name(const char *long_name, const struct dso_id *id,
const struct dso *b)
{
int rc = strcmp(long_name, dso__long_name(b));
return rc ?: dso_id__cmp(id, dso__id_const(b));
}
static int __dso__cmp_short_name(const char *short_name, const struct dso_id *id,
const struct dso *b)
{
int rc = strcmp(short_name, dso__short_name(b));
return rc ?: dso_id__cmp(id, dso__id_const(b));
}
static int dsos__cmp_long_name_id_short_name(const void *va, const void *vb)
{
const struct dso *a = *((const struct dso **)va);
const struct dso *b = *((const struct dso **)vb);
int rc = strcmp(dso__long_name(a), dso__long_name(b));
if (!rc) {
rc = dso_id__cmp(dso__id_const(a), dso__id_const(b));
if (!rc)
rc = strcmp(dso__short_name(a), dso__short_name(b));
}
return rc;
}
struct dsos__key {
const char *long_name;
const struct dso_id *id;
};
static int dsos__cmp_key_long_name_id(const void *vkey, const void *vdso)
{
const struct dsos__key *key = vkey;
const struct dso *dso = *((const struct dso **)vdso);
return __dso__cmp_long_name(key->long_name, key->id, dso);
}
/*
* Find a matching entry and/or link current entry to RB tree.
* Either one of the dso or name parameter must be non-NULL or the
* function will not work.
Annotation
- Immediate include surface: `debug.h`, `dsos.h`, `dso.h`, `util.h`, `vdso.h`, `namespaces.h`, `errno.h`, `stdlib.h`.
- Detected declarations: `struct dsos__read_build_ids_cb_args`, `struct dsos__key`, `struct dsos__find_id_cb_args`, `struct dsos__fprintf_buildid_cb_args`, `struct dsos__fprintf_cb_args`, `function dsos__init`, `function dsos__purge`, `function dsos__exit`, `function __dsos__for_each_dso`, `function dsos__read_build_ids_cb`.
- 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.