lkml.org 
[lkml]   [2018]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/9] perf tools: Make read_build_id function public
    Date
    And renaming it into parse_notes_buildid to be more
    precise and usable in following patches.

    Link: http://lkml.kernel.org/n/tip-v1mz76rkdxfnbfz2v05fumn6@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    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
    \
     
     \ /
      Last update: 2018-04-05 17:17    [W:4.066 / U:0.668 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site