perf tools: Use build_id object in dso
Replace build_id byte array with struct build_id object and all the code that references it. The objective is to carry size together with build id array, so it's better to keep both together. This is preparatory change for following patches, and there's no functional change. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20201013192441.1299447-2-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
79bbbabd22
Коммит
0aba7f036a
|
@ -79,12 +79,12 @@ static int add_dso(const char *fpath, const struct stat *sb __maybe_unused,
|
|||
int typeflag, struct FTW *ftwbuf __maybe_unused)
|
||||
{
|
||||
struct bench_dso *dso = &dsos[nr_dsos];
|
||||
unsigned char build_id[BUILD_ID_SIZE];
|
||||
struct build_id bid;
|
||||
|
||||
if (typeflag == FTW_D || typeflag == FTW_SL)
|
||||
return 0;
|
||||
|
||||
if (filename__read_build_id(fpath, build_id, BUILD_ID_SIZE) < 0)
|
||||
if (filename__read_build_id(fpath, bid.data, sizeof(bid.data)) < 0)
|
||||
return 0;
|
||||
|
||||
dso->name = realpath(fpath, NULL);
|
||||
|
|
|
@ -284,7 +284,7 @@ static bool dso__missing_buildid_cache(struct dso *dso, int parm __maybe_unused)
|
|||
|
||||
pr_warning("Problems with %s file, consider removing it from the cache\n",
|
||||
filename);
|
||||
} else if (memcmp(dso->build_id, build_id, sizeof(dso->build_id))) {
|
||||
} else if (memcmp(dso->bid.data, build_id, sizeof(dso->bid.data))) {
|
||||
pr_warning("Problems with %s file, consider removing it from the cache\n",
|
||||
filename);
|
||||
}
|
||||
|
|
|
@ -522,8 +522,8 @@ static int dso__read_build_id(struct dso *dso)
|
|||
return 0;
|
||||
|
||||
nsinfo__mountns_enter(dso->nsinfo, &nsc);
|
||||
if (filename__read_build_id(dso->long_name, dso->build_id,
|
||||
sizeof(dso->build_id)) > 0) {
|
||||
if (filename__read_build_id(dso->long_name, dso->bid.data,
|
||||
sizeof(dso->bid.data)) > 0) {
|
||||
dso->has_build_id = true;
|
||||
}
|
||||
nsinfo__mountns_exit(&nsc);
|
||||
|
|
|
@ -1578,8 +1578,8 @@ int symbol__strerror_disassemble(struct map_symbol *ms, int errnum, char *buf, s
|
|||
char *build_id_msg = NULL;
|
||||
|
||||
if (dso->has_build_id) {
|
||||
build_id__sprintf(dso->build_id,
|
||||
sizeof(dso->build_id), bf + 15);
|
||||
build_id__sprintf(dso->bid.data,
|
||||
sizeof(dso->bid.data), bf + 15);
|
||||
build_id_msg = bf;
|
||||
}
|
||||
scnprintf(buf, buflen,
|
||||
|
|
|
@ -272,7 +272,7 @@ char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size,
|
|||
if (!dso->has_build_id)
|
||||
return NULL;
|
||||
|
||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
||||
build_id__sprintf(dso->bid.data, sizeof(dso->bid.data), sbuild_id);
|
||||
linkname = build_id_cache__linkname(sbuild_id, NULL, 0);
|
||||
if (!linkname)
|
||||
return NULL;
|
||||
|
@ -355,7 +355,7 @@ static int machine__write_buildid_table(struct machine *machine,
|
|||
in_kernel = pos->kernel ||
|
||||
is_kernel_module(name,
|
||||
PERF_RECORD_MISC_CPUMODE_UNKNOWN);
|
||||
err = write_buildid(name, name_len, pos->build_id, machine->pid,
|
||||
err = write_buildid(name, name_len, pos->bid.data, machine->pid,
|
||||
in_kernel ? kmisc : umisc, fd);
|
||||
if (err)
|
||||
break;
|
||||
|
@ -841,7 +841,7 @@ static int dso__cache_build_id(struct dso *dso, struct machine *machine)
|
|||
is_kallsyms = true;
|
||||
name = machine->mmap_name;
|
||||
}
|
||||
return build_id_cache__add_b(dso->build_id, sizeof(dso->build_id), name,
|
||||
return build_id_cache__add_b(dso->bid.data, sizeof(dso->bid.data), name,
|
||||
dso->nsinfo, is_kallsyms, is_vdso);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
#include "tool.h"
|
||||
#include <linux/types.h>
|
||||
|
||||
struct build_id {
|
||||
u8 data[BUILD_ID_SIZE];
|
||||
size_t size;
|
||||
};
|
||||
|
||||
struct nsinfo;
|
||||
|
||||
extern struct perf_tool build_id__mark_dso_hit_ops;
|
||||
|
|
|
@ -172,8 +172,8 @@ int dso__read_binary_type_filename(const struct dso *dso,
|
|||
break;
|
||||
}
|
||||
|
||||
build_id__sprintf(dso->build_id,
|
||||
sizeof(dso->build_id),
|
||||
build_id__sprintf(dso->bid.data,
|
||||
sizeof(dso->bid.data),
|
||||
build_id_hex);
|
||||
len = __symbol__join_symfs(filename, size, "/usr/lib/debug/.build-id/");
|
||||
snprintf(filename + len, size - len, "%.2s/%s.debug",
|
||||
|
@ -1330,13 +1330,13 @@ void dso__put(struct dso *dso)
|
|||
|
||||
void dso__set_build_id(struct dso *dso, void *build_id)
|
||||
{
|
||||
memcpy(dso->build_id, build_id, sizeof(dso->build_id));
|
||||
memcpy(dso->bid.data, build_id, sizeof(dso->bid.data));
|
||||
dso->has_build_id = 1;
|
||||
}
|
||||
|
||||
bool dso__build_id_equal(const struct dso *dso, u8 *build_id)
|
||||
{
|
||||
return memcmp(dso->build_id, build_id, sizeof(dso->build_id)) == 0;
|
||||
return memcmp(dso->bid.data, build_id, sizeof(dso->bid.data)) == 0;
|
||||
}
|
||||
|
||||
void dso__read_running_kernel_build_id(struct dso *dso, struct machine *machine)
|
||||
|
@ -1346,8 +1346,8 @@ void dso__read_running_kernel_build_id(struct dso *dso, struct machine *machine)
|
|||
if (machine__is_default_guest(machine))
|
||||
return;
|
||||
sprintf(path, "%s/sys/kernel/notes", machine->root_dir);
|
||||
if (sysfs__read_build_id(path, dso->build_id,
|
||||
sizeof(dso->build_id)) == 0)
|
||||
if (sysfs__read_build_id(path, dso->bid.data,
|
||||
sizeof(dso->bid.data)) == 0)
|
||||
dso->has_build_id = true;
|
||||
}
|
||||
|
||||
|
@ -1365,8 +1365,8 @@ int dso__kernel_module_get_build_id(struct dso *dso,
|
|||
"%s/sys/module/%.*s/notes/.note.gnu.build-id",
|
||||
root_dir, (int)strlen(name) - 1, name);
|
||||
|
||||
if (sysfs__read_build_id(filename, dso->build_id,
|
||||
sizeof(dso->build_id)) == 0)
|
||||
if (sysfs__read_build_id(filename, dso->bid.data,
|
||||
sizeof(dso->bid.data)) == 0)
|
||||
dso->has_build_id = true;
|
||||
|
||||
return 0;
|
||||
|
@ -1376,7 +1376,7 @@ size_t dso__fprintf_buildid(struct dso *dso, FILE *fp)
|
|||
{
|
||||
char sbuild_id[SBUILD_ID_SIZE];
|
||||
|
||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
||||
build_id__sprintf(dso->bid.data, sizeof(dso->bid.data), sbuild_id);
|
||||
return fprintf(fp, "%s", sbuild_id);
|
||||
}
|
||||
|
||||
|
|
|
@ -176,7 +176,7 @@ struct dso {
|
|||
bool sorted_by_name;
|
||||
bool loaded;
|
||||
u8 rel;
|
||||
u8 build_id[BUILD_ID_SIZE];
|
||||
struct build_id bid;
|
||||
u64 text_offset;
|
||||
const char *short_name;
|
||||
const char *long_name;
|
||||
|
|
|
@ -73,8 +73,8 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits)
|
|||
continue;
|
||||
}
|
||||
nsinfo__mountns_enter(pos->nsinfo, &nsc);
|
||||
if (filename__read_build_id(pos->long_name, pos->build_id,
|
||||
sizeof(pos->build_id)) > 0) {
|
||||
if (filename__read_build_id(pos->long_name, pos->bid.data,
|
||||
sizeof(pos->bid.data)) > 0) {
|
||||
have_build_id = true;
|
||||
pos->has_build_id = true;
|
||||
}
|
||||
|
|
|
@ -2095,7 +2095,7 @@ static int __event_process_build_id(struct perf_record_header_build_id *bev,
|
|||
free(m.name);
|
||||
}
|
||||
|
||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id),
|
||||
build_id__sprintf(dso->bid.data, sizeof(dso->bid.data),
|
||||
sbuild_id);
|
||||
pr_debug("build id event received for %s: %s\n",
|
||||
dso->long_name, sbuild_id);
|
||||
|
|
|
@ -331,8 +331,8 @@ int map__load(struct map *map)
|
|||
if (map->dso->has_build_id) {
|
||||
char sbuild_id[SBUILD_ID_SIZE];
|
||||
|
||||
build_id__sprintf(map->dso->build_id,
|
||||
sizeof(map->dso->build_id),
|
||||
build_id__sprintf(map->dso->bid.data,
|
||||
sizeof(map->dso->bid.data),
|
||||
sbuild_id);
|
||||
pr_debug("%s with build id %s not found", name, sbuild_id);
|
||||
} else
|
||||
|
|
|
@ -473,7 +473,7 @@ static struct debuginfo *open_from_debuginfod(struct dso *dso, struct nsinfo *ns
|
|||
if (!c)
|
||||
return NULL;
|
||||
|
||||
build_id__sprintf(dso->build_id, BUILD_ID_SIZE, sbuild_id);
|
||||
build_id__sprintf(dso->bid.data, BUILD_ID_SIZE, sbuild_id);
|
||||
fd = debuginfod_find_debuginfo(c, (const unsigned char *)sbuild_id,
|
||||
0, &path);
|
||||
if (fd >= 0)
|
||||
|
|
|
@ -1064,7 +1064,7 @@ static int python_export_dso(struct db_export *dbe, struct dso *dso,
|
|||
char sbuild_id[SBUILD_ID_SIZE];
|
||||
PyObject *t;
|
||||
|
||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
||||
build_id__sprintf(dso->bid.data, sizeof(dso->bid.data), sbuild_id);
|
||||
|
||||
t = tuple_new(5);
|
||||
|
||||
|
|
|
@ -2153,7 +2153,7 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
|
|||
goto proc_kallsyms;
|
||||
}
|
||||
|
||||
build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
|
||||
build_id__sprintf(dso->bid.data, sizeof(dso->bid.data), sbuild_id);
|
||||
|
||||
/* Find kallsyms in build-id cache with kcore */
|
||||
scnprintf(path, sizeof(path), "%s/%s/%s",
|
||||
|
|
|
@ -1961,7 +1961,7 @@ int perf_event__synthesize_build_id(struct perf_tool *tool, struct dso *pos, u16
|
|||
|
||||
len = pos->long_name_len + 1;
|
||||
len = PERF_ALIGN(len, NAME_ALIGN);
|
||||
memcpy(&ev.build_id.build_id, pos->build_id, sizeof(pos->build_id));
|
||||
memcpy(&ev.build_id.build_id, pos->bid.data, sizeof(pos->bid.data));
|
||||
ev.build_id.header.type = PERF_RECORD_HEADER_BUILD_ID;
|
||||
ev.build_id.header.misc = misc;
|
||||
ev.build_id.pid = machine->pid;
|
||||
|
|
Загрузка…
Ссылка в новой задаче