• Sasha Goldshtein's avatar
    cc: Retry symbol resolution using perfmap · 8a3fb6cc
    Sasha Goldshtein authored
    When a symbol lies within a module, and that module doesn't have
    debuginfo (or doesn't even have an ELF header), the symbol will
    always be resolved as [unknown]. However, the /tmp/perf-PID.map
    (perf map) for that process might actually have an entry for that
    symbol, if it was dynamically generated by some external tool.
    This commit changes the resolution process such that if the desired
    address lies in a module but that module doesn't have debuginfo,
    we keep trying to resolve it in subsequent modules (including the
    perf map). If we resolve it successfully using the perf map, the
    reported symbol information will have the original module's name,
    so we don't lose fidelity.
    
    The motivation for this change is the way symbols work with .NET
    Core on Linux. The runtime binaries are compiled ahead-of-time to
    native code, but do not have debuginfo. There is an external tool,
    which generates a file similar to a perf map (albeit with relative
    addresses) for these binaries. This file can then be merged into
    the main perf map for the process and used for symbol resolution,
    but only if we keep trying to use the perf map when the symbol is
    in a previously-seen module.
    8a3fb6cc
bcc_syms.cc 9.14 KB