And renaming it into parse_notes_buildid to be more precise and usable in following patches. Link: http://lkml.kernel.org/n/tip-v1mz76rkdxfnbfz2v05fumn6@xxxxxxxxxxxxxx Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> --- tools/perf/util/symbol-minimal.c | 50 ++-------------------------------------- tools/perf/util/util.c | 48 ++++++++++++++++++++++++++++++++++++++ tools/perf/util/util.h | 4 ++++ 3 files changed, 54 insertions(+), 48 deletions(-) diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c index ff48d0d49584..bd281d3dc508 100644 --- a/tools/perf/util/symbol-minimal.c +++ b/tools/perf/util/symbol-minimal.c @@ -24,53 +24,6 @@ static bool check_need_swap(int file_endian) return host_endian != file_endian; } -#define NOTE_ALIGN(sz) (((sz) + 3) & ~3) - -#define NT_GNU_BUILD_ID 3 - -static int read_build_id(void *note_data, size_t note_len, void *bf, - size_t size, bool need_swap) -{ - struct { - u32 n_namesz; - u32 n_descsz; - u32 n_type; - } *nhdr; - void *ptr; - - ptr = note_data; - while (ptr < (note_data + note_len)) { - const char *name; - size_t namesz, descsz; - - nhdr = ptr; - if (need_swap) { - nhdr->n_namesz = bswap_32(nhdr->n_namesz); - nhdr->n_descsz = bswap_32(nhdr->n_descsz); - nhdr->n_type = bswap_32(nhdr->n_type); - } - - namesz = NOTE_ALIGN(nhdr->n_namesz); - descsz = NOTE_ALIGN(nhdr->n_descsz); - - ptr += sizeof(*nhdr); - name = ptr; - ptr += namesz; - if (nhdr->n_type == NT_GNU_BUILD_ID && - nhdr->n_namesz == sizeof("GNU")) { - if (memcmp(name, "GNU", sizeof("GNU")) == 0) { - size_t sz = min(size, descsz); - memcpy(bf, ptr, sz); - memset(bf + sz, 0, size - sz); - return 0; - } - } - ptr += descsz; - } - - return -1; -} - int filename__read_debuglink(const char *filename __maybe_unused, char *debuglink __maybe_unused, size_t size __maybe_unused) @@ -153,7 +106,8 @@ int filename__read_build_id(const char *filename, void *bf, size_t size) if (fread(buf, buf_size, 1, fp) != 1) goto out_free; - ret = read_build_id(buf, buf_size, bf, size, need_swap); + ret = parse_notes_buildid(buf, buf_size, bf, size, + need_swap); if (ret == 0) ret = size; break; diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 1019bbc5dbd8..41fc61d941ef 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c @@ -447,6 +447,54 @@ fetch_kernel_version(unsigned int *puint, char *str, return 0; } +#define NOTE_ALIGN(sz) (((sz) + 3) & ~3) + +#define NT_GNU_BUILD_ID 3 + +int parse_notes_buildid(void *note_data, size_t note_len, void *bf, + size_t size, bool need_swap) +{ + struct { + u32 n_namesz; + u32 n_descsz; + u32 n_type; + } *nhdr; + void *ptr; + + ptr = note_data; + while (ptr < (note_data + note_len)) { + const char *name; + size_t namesz, descsz; + + nhdr = ptr; + if (need_swap) { + nhdr->n_namesz = bswap_32(nhdr->n_namesz); + nhdr->n_descsz = bswap_32(nhdr->n_descsz); + nhdr->n_type = bswap_32(nhdr->n_type); + } + + namesz = NOTE_ALIGN(nhdr->n_namesz); + descsz = NOTE_ALIGN(nhdr->n_descsz); + + ptr += sizeof(*nhdr); + name = ptr; + ptr += namesz; + if (nhdr->n_type == NT_GNU_BUILD_ID && + nhdr->n_namesz == sizeof("GNU")) { + if (memcmp(name, "GNU", sizeof("GNU")) == 0) { + size_t sz = min(size, descsz); + + memcpy(bf, ptr, sz); + memset(bf + sz, 0, size - sz); + return 0; + } + } + ptr += descsz; + } + + return -1; +} + const char *perf_tip(const char *dirpath) { struct strlist *tips; diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index 9496365da3d7..27106548396b 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h @@ -47,6 +47,10 @@ extern int cacheline_size; int fetch_kernel_version(unsigned int *puint, char *str, size_t str_sz); + +int parse_notes_buildid(void *note_data, size_t note_len, void *bf, + size_t size, bool need_swap); + #define KVER_VERSION(x) (((x) >> 16) & 0xff) #define KVER_PATCHLEVEL(x) (((x) >> 8) & 0xff) #define KVER_SUBLEVEL(x) ((x) & 0xff) -- 2.13.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html