162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef PERF_BUILD_ID_H_ 362306a36Sopenharmony_ci#define PERF_BUILD_ID_H_ 1 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#define BUILD_ID_SIZE 20 /* SHA-1 length in bytes */ 662306a36Sopenharmony_ci#define BUILD_ID_MIN_SIZE 16 /* MD5/UUID/GUID length in bytes */ 762306a36Sopenharmony_ci#define SBUILD_ID_SIZE (BUILD_ID_SIZE * 2 + 1) 862306a36Sopenharmony_ci#define SBUILD_ID_MIN_SIZE (BUILD_ID_MIN_SIZE * 2 + 1) 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "machine.h" 1162306a36Sopenharmony_ci#include "tool.h" 1262306a36Sopenharmony_ci#include <linux/types.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct build_id { 1562306a36Sopenharmony_ci u8 data[BUILD_ID_SIZE]; 1662306a36Sopenharmony_ci size_t size; 1762306a36Sopenharmony_ci}; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistruct nsinfo; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciextern struct perf_tool build_id__mark_dso_hit_ops; 2262306a36Sopenharmony_cistruct dso; 2362306a36Sopenharmony_cistruct feat_fd; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_civoid build_id__init(struct build_id *bid, const u8 *data, size_t size); 2662306a36Sopenharmony_ciint build_id__sprintf(const struct build_id *build_id, char *bf); 2762306a36Sopenharmony_cibool build_id__is_defined(const struct build_id *bid); 2862306a36Sopenharmony_ciint sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id); 2962306a36Sopenharmony_ciint filename__sprintf_build_id(const char *pathname, char *sbuild_id); 3062306a36Sopenharmony_cichar *build_id_cache__kallsyms_path(const char *sbuild_id, char *bf, 3162306a36Sopenharmony_ci size_t size); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cichar *dso__build_id_filename(const struct dso *dso, char *bf, size_t size, 3462306a36Sopenharmony_ci bool is_debug); 3562306a36Sopenharmony_cichar *__dso__build_id_filename(const struct dso *dso, char *bf, size_t size, 3662306a36Sopenharmony_ci bool is_debug, bool is_kallsyms); 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciint build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event, 3962306a36Sopenharmony_ci struct perf_sample *sample, struct evsel *evsel, 4062306a36Sopenharmony_ci struct machine *machine); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciint dsos__hit_all(struct perf_session *session); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciint perf_event__inject_buildid(struct perf_tool *tool, union perf_event *event, 4562306a36Sopenharmony_ci struct perf_sample *sample, struct evsel *evsel, 4662306a36Sopenharmony_ci struct machine *machine); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cibool perf_session__read_build_ids(struct perf_session *session, bool with_hits); 4962306a36Sopenharmony_ciint perf_session__write_buildid_table(struct perf_session *session, 5062306a36Sopenharmony_ci struct feat_fd *fd); 5162306a36Sopenharmony_ciint perf_session__cache_build_ids(struct perf_session *session); 5262306a36Sopenharmony_ciint __perf_session__cache_build_ids(struct perf_session *session, 5362306a36Sopenharmony_ci machine__dso_t fn, void *priv); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cichar *build_id_cache__origname(const char *sbuild_id); 5662306a36Sopenharmony_cichar *build_id_cache__linkname(const char *sbuild_id, char *bf, size_t size); 5762306a36Sopenharmony_cichar *build_id_cache__cachedir(const char *sbuild_id, const char *name, 5862306a36Sopenharmony_ci struct nsinfo *nsi, bool is_kallsyms, 5962306a36Sopenharmony_ci bool is_vdso); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct strlist; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistruct strlist *build_id_cache__list_all(bool validonly); 6462306a36Sopenharmony_cichar *build_id_cache__complement(const char *incomplete_sbuild_id); 6562306a36Sopenharmony_ciint build_id_cache__list_build_ids(const char *pathname, struct nsinfo *nsi, 6662306a36Sopenharmony_ci struct strlist **result); 6762306a36Sopenharmony_cibool build_id_cache__cached(const char *sbuild_id); 6862306a36Sopenharmony_ciint build_id_cache__add(const char *sbuild_id, const char *name, const char *realname, 6962306a36Sopenharmony_ci struct nsinfo *nsi, bool is_kallsyms, bool is_vdso, 7062306a36Sopenharmony_ci const char *proper_name, const char *root_dir); 7162306a36Sopenharmony_ciint __build_id_cache__add_s(const char *sbuild_id, 7262306a36Sopenharmony_ci const char *name, struct nsinfo *nsi, 7362306a36Sopenharmony_ci bool is_kallsyms, bool is_vdso, 7462306a36Sopenharmony_ci const char *proper_name, const char *root_dir); 7562306a36Sopenharmony_cistatic inline int build_id_cache__add_s(const char *sbuild_id, 7662306a36Sopenharmony_ci const char *name, struct nsinfo *nsi, 7762306a36Sopenharmony_ci bool is_kallsyms, bool is_vdso) 7862306a36Sopenharmony_ci{ 7962306a36Sopenharmony_ci return __build_id_cache__add_s(sbuild_id, name, nsi, is_kallsyms, is_vdso, NULL, NULL); 8062306a36Sopenharmony_ci} 8162306a36Sopenharmony_ciint build_id_cache__remove_s(const char *sbuild_id); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciextern char buildid_dir[]; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_civoid set_buildid_dir(const char *dir); 8662306a36Sopenharmony_civoid disable_buildid_cache(void); 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#endif 89