diff options
Diffstat (limited to 'tools/perf/builtin-buildid-cache.c')
-rw-r--r-- | tools/perf/builtin-buildid-cache.c | 156 |
1 files changed, 3 insertions, 153 deletions
diff --git a/tools/perf/builtin-buildid-cache.c b/tools/perf/builtin-buildid-cache.c index cfede86..c96c8fa 100644 --- a/tools/perf/builtin-buildid-cache.c +++ b/tools/perf/builtin-buildid-cache.c @@ -6,11 +6,6 @@ * Copyright (C) 2010, Red Hat Inc. * Copyright (C) 2010, Arnaldo Carvalho de Melo <acme@redhat.com> */ -#include <sys/types.h> -#include <sys/time.h> -#include <time.h> -#include <dirent.h> -#include <unistd.h> #include "builtin.h" #include "perf.h" #include "util/cache.h" @@ -22,140 +17,6 @@ #include "util/session.h" #include "util/symbol.h" -static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid) -{ - char root_dir[PATH_MAX]; - char notes[PATH_MAX]; - u8 build_id[BUILD_ID_SIZE]; - char *p; - - strlcpy(root_dir, proc_dir, sizeof(root_dir)); - - p = strrchr(root_dir, '/'); - if (!p) - return -1; - *p = '\0'; - - scnprintf(notes, sizeof(notes), "%s/sys/kernel/notes", root_dir); - - if (sysfs__read_build_id(notes, build_id, sizeof(build_id))) - return -1; - - build_id__sprintf(build_id, sizeof(build_id), sbuildid); - - return 0; -} - -static int build_id_cache__kcore_dir(char *dir, size_t sz) -{ - struct timeval tv; - struct tm tm; - char dt[32]; - - if (gettimeofday(&tv, NULL) || !localtime_r(&tv.tv_sec, &tm)) - return -1; - - if (!strftime(dt, sizeof(dt), "%Y%m%d%H%M%S", &tm)) - return -1; - - scnprintf(dir, sz, "%s%02u", dt, (unsigned)tv.tv_usec / 10000); - - return 0; -} - -static int build_id_cache__kcore_existing(const char *from_dir, char *to_dir, - size_t to_dir_sz) -{ - char from[PATH_MAX]; - char to[PATH_MAX]; - struct dirent *dent; - int ret = -1; - DIR *d; - - d = opendir(to_dir); - if (!d) - return -1; - - scnprintf(from, sizeof(from), "%s/modules", from_dir); - - while (1) { - dent = readdir(d); - if (!dent) - break; - if (dent->d_type != DT_DIR) - continue; - scnprintf(to, sizeof(to), "%s/%s/modules", to_dir, - dent->d_name); - if (!compare_proc_modules(from, to)) { - scnprintf(to, sizeof(to), "%s/%s", to_dir, - dent->d_name); - strlcpy(to_dir, to, to_dir_sz); - ret = 0; - break; - } - } - - closedir(d); - - return ret; -} - -static int build_id_cache__add_kcore(const char *filename, const char *debugdir) -{ - char dir[32], sbuildid[BUILD_ID_SIZE * 2 + 1]; - char from_dir[PATH_MAX], to_dir[PATH_MAX]; - char *p; - - strlcpy(from_dir, filename, sizeof(from_dir)); - - p = strrchr(from_dir, '/'); - if (!p || strcmp(p + 1, "kcore")) - return -1; - *p = '\0'; - - if (build_id_cache__kcore_buildid(from_dir, sbuildid)) - return -1; - - scnprintf(to_dir, sizeof(to_dir), "%s/[kernel.kcore]/%s", - debugdir, sbuildid); - - if (!build_id_cache__kcore_existing(from_dir, to_dir, sizeof(to_dir))) { - pr_debug("same kcore found in %s\n", to_dir); - return 0; - } - - if (build_id_cache__kcore_dir(dir, sizeof(dir))) - return -1; - - scnprintf(to_dir, sizeof(to_dir), "%s/[kernel.kcore]/%s/%s", - debugdir, sbuildid, dir); - - if (mkdir_p(to_dir, 0755)) - return -1; - - if (kcore_copy(from_dir, to_dir)) { - /* Remove YYYYmmddHHMMSShh directory */ - if (!rmdir(to_dir)) { - p = strrchr(to_dir, '/'); - if (p) - *p = '\0'; - /* Try to remove buildid directory */ - if (!rmdir(to_dir)) { - p = strrchr(to_dir, '/'); - if (p) - *p = '\0'; - /* Try to remove [kernel.kcore] directory */ - rmdir(to_dir); - } - } - return -1; - } - - pr_debug("kcore added to build-id cache directory %s\n", to_dir); - - return 0; -} - static int build_id_cache__add_file(const char *filename, const char *debugdir) { char sbuild_id[BUILD_ID_SIZE * 2 + 1]; @@ -221,12 +82,8 @@ static bool dso__missing_buildid_cache(struct dso *dso, int parm __maybe_unused) static int build_id_cache__fprintf_missing(const char *filename, bool force, FILE *fp) { - struct perf_data_file file = { - .path = filename, - .mode = PERF_DATA_MODE_READ, - .force = force, - }; - struct perf_session *session = perf_session__new(&file, false, NULL); + struct perf_session *session = perf_session__new(filename, O_RDONLY, + force, false, NULL); if (session == NULL) return -1; @@ -273,14 +130,11 @@ int cmd_buildid_cache(int argc, const char **argv, char const *add_name_list_str = NULL, *remove_name_list_str = NULL, *missing_filename = NULL, - *update_name_list_str = NULL, - *kcore_filename; + *update_name_list_str = NULL; const struct option buildid_cache_options[] = { OPT_STRING('a', "add", &add_name_list_str, "file list", "file(s) to add"), - OPT_STRING('k', "kcore", &kcore_filename, - "file", "kcore file to add"), OPT_STRING('r', "remove", &remove_name_list_str, "file list", "file(s) to remove"), OPT_STRING('M', "missing", &missing_filename, "file", @@ -363,9 +217,5 @@ int cmd_buildid_cache(int argc, const char **argv, } } - if (kcore_filename && - build_id_cache__add_kcore(kcore_filename, debugdir)) - pr_warning("Couldn't add %s\n", kcore_filename); - return ret; } |