• Nicholas Fraser's avatar
    perf symbols: Make dso__load_bfd_symbols() load PE files from debug cache only · 00a34234
    Nicholas Fraser authored
    dso__load_bfd_symbols() attempts to load a DSO at its original path,
    then closes it and loads the file in the debug cache. This is incorrect.
    It should ignore the original file and work with only the debug cache.
    
    The original file may have changed or may not even exist, for example if
    the debug cache has been transferred to another machine via "perf
    archive".
    
    This fix makes it only load the file in the debug cache.
    
    Further notes from Nicholas:
    
    dso__load_bfd_symbols() is called in a loop from dso__load() for a variety
    of paths. These are generated by the various DSO_BINARY_TYPEs in the
    binary_type_symtab list at the top of util/symbol.c. In each case the
    debugfile passed to dso__load_bfd_symbols() is the path to try.
    
    One of those iterations (the first one I believe) passes the original path
    as the debugfile. If the file still exists at the original path, this is
    the one that ends up being used in case the debugcache was deleted or the
    PE file doesn't have a build-id.
    
    A later iteration (BUILD_ID_CACHE) passes debugfile as the file in the
    debugcache if it has a build-id. Even if the file was previously loaded at
    its original path, (if I understand correctly) this load will override it
    so the debugcache file ends up being used.
    
    Committer notes:
    
    So if it fails to find in the cache, it will eventually hope for the
    best and look at the path in the local filesystem, which in many cases
    is enough.
    
    At some point we need to switch from this "hope for the best" approach
    to one that warns the user that there is no guarantee, if no buildid is
    present, that just by looking at the pathname the symbolisation will
    work.
    Signed-off-by: default avatarNicholas Fraser <nfraser@codeweavers.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Frank Ch. Eigler <fche@redhat.com>
    Cc: Huw Davies <huw@codeweavers.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Kim Phillips <kim.phillips@amd.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Remi Bernon <rbernon@codeweavers.com>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: Tommi Rantala <tommi.t.rantala@nokia.com>
    Cc: Ulrich Czekalla <uczekalla@codeweavers.com>
    Link: http://lore.kernel.org/lkml/e58e1237-94ab-e1c9-a7b9-473531906954@codeweavers.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    00a34234
symbol.c 58 KB