Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf buildid: Introduce sysfs/filename__sprintf_build_id

Introduce sysfs/filename__sprintf_build_id for consolidating similar
code.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20150815114259.13642.34685.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Masami Hiramatsu and committed by
Arnaldo Carvalho de Melo
0b5a7935 d49e4695

+47 -26
+2 -12
tools/perf/builtin-buildid-cache.c
··· 25 25 static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid) 26 26 { 27 27 char root_dir[PATH_MAX]; 28 - char notes[PATH_MAX]; 29 - u8 build_id[BUILD_ID_SIZE]; 30 28 char *p; 31 29 32 30 strlcpy(root_dir, proc_dir, sizeof(root_dir)); ··· 33 35 if (!p) 34 36 return -1; 35 37 *p = '\0'; 36 - 37 - scnprintf(notes, sizeof(notes), "%s/sys/kernel/notes", root_dir); 38 - 39 - if (sysfs__read_build_id(notes, build_id, sizeof(build_id))) 40 - return -1; 41 - 42 - build_id__sprintf(build_id, sizeof(build_id), sbuildid); 43 - 44 - return 0; 38 + return sysfs__sprintf_build_id(root_dir, sbuildid); 45 39 } 46 40 47 41 static int build_id_cache__kcore_dir(char *dir, size_t sz) ··· 128 138 return -1; 129 139 *p = '\0'; 130 140 131 - if (build_id_cache__kcore_buildid(from_dir, sbuildid)) 141 + if (build_id_cache__kcore_buildid(from_dir, sbuildid) < 0) 132 142 return -1; 133 143 134 144 scnprintf(to_dir, sizeof(to_dir), "%s/[kernel.kcore]/%s",
+10 -14
tools/perf/builtin-buildid-list.c
··· 19 19 20 20 static int sysfs__fprintf_build_id(FILE *fp) 21 21 { 22 - u8 kallsyms_build_id[BUILD_ID_SIZE]; 23 22 char sbuild_id[SBUILD_ID_SIZE]; 23 + int ret; 24 24 25 - if (sysfs__read_build_id("/sys/kernel/notes", kallsyms_build_id, 26 - sizeof(kallsyms_build_id)) != 0) 27 - return -1; 25 + ret = sysfs__sprintf_build_id("/", sbuild_id); 26 + if (ret != sizeof(sbuild_id)) 27 + return ret < 0 ? ret : -EINVAL; 28 28 29 - build_id__sprintf(kallsyms_build_id, sizeof(kallsyms_build_id), 30 - sbuild_id); 31 - fprintf(fp, "%s\n", sbuild_id); 32 - return 0; 29 + return fprintf(fp, "%s\n", sbuild_id); 33 30 } 34 31 35 32 static int filename__fprintf_build_id(const char *name, FILE *fp) 36 33 { 37 - u8 build_id[BUILD_ID_SIZE]; 38 34 char sbuild_id[SBUILD_ID_SIZE]; 35 + int ret; 39 36 40 - if (filename__read_build_id(name, build_id, 41 - sizeof(build_id)) != sizeof(build_id)) 42 - return 0; 37 + ret = filename__sprintf_build_id(name, sbuild_id); 38 + if (ret != sizeof(sbuild_id)) 39 + return ret < 0 ? ret : -EINVAL; 43 40 44 - build_id__sprintf(build_id, sizeof(build_id), sbuild_id); 45 41 return fprintf(fp, "%s\n", sbuild_id); 46 42 } 47 43 ··· 59 63 /* 60 64 * See if this is an ELF file first: 61 65 */ 62 - if (filename__fprintf_build_id(input_name, stdout)) 66 + if (filename__fprintf_build_id(input_name, stdout) > 0) 63 67 goto out; 64 68 65 69 session = perf_session__new(&file, false, &build_id__mark_dso_hit_ops);
+32
tools/perf/util/build-id.c
··· 93 93 return raw - build_id; 94 94 } 95 95 96 + int sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id) 97 + { 98 + char notes[PATH_MAX]; 99 + u8 build_id[BUILD_ID_SIZE]; 100 + int ret; 101 + 102 + if (!root_dir) 103 + root_dir = ""; 104 + 105 + scnprintf(notes, sizeof(notes), "%s/sys/kernel/notes", root_dir); 106 + 107 + ret = sysfs__read_build_id(notes, build_id, sizeof(build_id)); 108 + if (ret < 0) 109 + return ret; 110 + 111 + return build_id__sprintf(build_id, sizeof(build_id), sbuild_id); 112 + } 113 + 114 + int filename__sprintf_build_id(const char *pathname, char *sbuild_id) 115 + { 116 + u8 build_id[BUILD_ID_SIZE]; 117 + int ret; 118 + 119 + ret = filename__read_build_id(pathname, build_id, sizeof(build_id)); 120 + if (ret < 0) 121 + return ret; 122 + else if (ret != sizeof(build_id)) 123 + return -EINVAL; 124 + 125 + return build_id__sprintf(build_id, sizeof(build_id), sbuild_id); 126 + } 127 + 96 128 /* asnprintf consolidates asprintf and snprintf */ 97 129 static int asnprintf(char **strp, size_t size, const char *fmt, ...) 98 130 {
+3
tools/perf/util/build-id.h
··· 12 12 struct dso; 13 13 14 14 int build_id__sprintf(const u8 *build_id, int len, char *bf); 15 + int sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id); 16 + int filename__sprintf_build_id(const char *pathname, char *sbuild_id); 17 + 15 18 char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size); 16 19 17 20 int build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event,