• Namhyung Kim's avatar
    perf tools: Allow build-id with trailing zeros · 4a86d414
    Namhyung Kim authored
    Currently perf saves a build-id with size but old versions assumes the
    size of 20.  In case the build-id is less than 20 (like for MD5), it'd
    fill the rest with 0s.
    
    I saw a problem when old version of perf record saved a binary in the
    build-id cache and new version of perf reads the data.  The symbols
    should be read from the build-id cache (as the path no longer has the
    same binary) but it failed due to mismatch in the build-id.
    
      symsrc__init: build id mismatch for /home/namhyung/.debug/.build-id/53/e4c2f42a4c61a2d632d92a72afa08f00000000/elf.
    
    The build-id event in the data has 20 byte build-ids, but it saw a
    different size (16) when it reads the build-id of the elf file in the
    build-id cache.
    
      $ readelf -n ~/.debug/.build-id/53/e4c2f42a4c61a2d632d92a72afa08f00000000/elf
    
      Displaying notes found in: .note.gnu.build-id
        Owner                Data size 	Description
        GNU                  0x00000010	NT_GNU_BUILD_ID (unique build ID bitstring)
          Build ID: 53e4c2f42a4c61a2d632d92a72afa08f
    
    Let's fix this by allowing trailing zeros if the size is different.
    
    Fixes: 39be8d01 ("perf tools: Pass build_id object to dso__build_id_equal()")
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20210910224630.1084877-1-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    4a86d414
dso.c 33.5 KB