• Peter Collingbourne's avatar
    symbolize: Calculate a module's zero VA using program headers. · a93a4511
    Peter Collingbourne authored
    Previously we were using a module's "start address", i.e. the
    address at which the module's executable region was mapped, as the
    zero virtual address, i.e. the address from which the DSO's virtual
    addresses are calculated. This works fine for DSOs created by the
    bfd and gold linkers, which will emit a PT_LOAD directive into the
    program header which loads the executable region at virtual address
    (p_vaddr) and file offset (p_offset) 0.
    
    However, the lld linker may place a read-only region before the
    executable region, meaning that both p_vaddr and p_offset for the
    executable region are non-zero. This means that any symbols resolved
    by the symbolizer are resolved to an incorrect virtual address. To
    correctly calculate the address corresponding to virtual address zero,
    we need to take into account p_vaddr and p_offset.
    
    Specifically, the calculation starts with the "base address", i.e. the
    start address minus the file offset. To get from the base address to
    virtual address zero, we first add p_offset. This gives us the mapped
    address of the start of the segment, or in other words the mapped
    address corresponding to the virtual address of the segment. (Note
    that this is distinct from the start address, as p_offset is not
    guaranteed to be page aligned.) We then subtract p_vaddr, which takes
    us to virtual address zero.
    a93a4511
Name
Last commit
Last update
cmake Loading commit data...
doc Loading commit data...
m4 Loading commit data...
packages Loading commit data...
src Loading commit data...
vsprojects Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CMakeLists.txt Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
COPYING Loading commit data...
ChangeLog Loading commit data...
INSTALL Loading commit data...
Makefile.am Loading commit data...
Makefile.in Loading commit data...
NEWS Loading commit data...
README Loading commit data...
README.windows Loading commit data...
aclocal.m4 Loading commit data...
compile Loading commit data...
config.guess Loading commit data...
config.sub Loading commit data...
configure Loading commit data...
configure.ac Loading commit data...
depcomp Loading commit data...
glog-config.cmake.in Loading commit data...
google-glog.sln Loading commit data...
install-sh Loading commit data...
libglog.pc.in Loading commit data...
ltmain.sh Loading commit data...
missing Loading commit data...
mkinstalldirs Loading commit data...
test-driver Loading commit data...