• Ravi Bangoria's avatar
    perf dso: Fix dso comparison · 0d33b343
    Ravi Bangoria authored
    Perf gets dso details from two different sources. 1st, from builid
    headers in perf.data and 2nd from MMAP2 samples. Dso from buildid
    header does not have dso_id detail. And dso from MMAP2 samples does
    not have buildid information. If detail of the same dso is present
    at both the places, filename is common.
    
    Previously, __dsos__findnew_link_by_longname_id() used to compare only
    long or short names, but Commit 0e3149f8 ("perf dso: Move dso_id
    from 'struct map' to 'struct dso'") also added a dso_id comparison.
    Because of that, now perf is creating two different dso objects of the
    same file, one from buildid header (with dso_id but without buildid)
    and second from MMAP2 sample (with buildid but without dso_id).
    
    This is causing issues with archive, buildid-list etc subcommands. Fix
    this by comparing dso_id only when it's present. And incase dso is
    present in 'dsos' list without dso_id, inject dso_id detail as well.
    
    Before:
    
      $ sudo ./perf buildid-list -H
      0000000000000000000000000000000000000000 /usr/bin/ls
      0000000000000000000000000000000000000000 /usr/lib64/ld-2.30.so
      0000000000000000000000000000000000000000 /usr/lib64/libc-2.30.so
    
      $ ./perf archive
      perf archive: no build-ids found
    
    After:
    
      $ ./perf buildid-list -H
      b6b1291d0cead046ed0fa5734037fa87a579adee /usr/bin/ls
      641f0c90cfa15779352f12c0ec3c7a2b2b6f41e8 /usr/lib64/ld-2.30.so
      675ace3ca07a0b863df01f461a7b0984c65c8b37 /usr/lib64/libc-2.30.so
    
      $ ./perf archive
      Now please run:
    
      $ tar xvf perf.data.tar.bz2 -C ~/.debug
    
      wherever you need to run 'perf report' on.
    
    Committer notes:
    
    Renamed is_empty_dso_id() to dso_id__empty() and inject_dso_id() to
    dso__inject_id() to keep namespacing consistent.
    
    Fixes: 0e3149f8 ("perf dso: Move dso_id from 'struct map' to 'struct dso'")
    Reported-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: http://lore.kernel.org/lkml/20200324042424.68366-1-ravi.bangoria@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0d33b343
dsos.c 7.69 KB