From 8e5538193915885ea859ac90a72b46ab04440cea Mon Sep 17 00:00:00 2001 From: Chris Dearman Date: Wed, 13 Nov 2013 17:22:33 -0800 Subject: [PATCH] linker: Use load_bias to adjust search address in elf_addr_lookup load_bias is the delta between a symbols address in memory and the value contained in the symbol table. Change-Id: I35c87b69025b64f7e4a1418ca766618f4533fb3e --- linker/linker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index f7bcd2750..39344849e 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -798,7 +798,7 @@ static bool symbol_matches_soaddr(const ElfW(Sym)* sym, ElfW(Addr) soaddr) { } ElfW(Sym)* soinfo::gnu_addr_lookup(const void* addr) { - ElfW(Addr) soaddr = reinterpret_cast(addr) - base; + ElfW(Addr) soaddr = reinterpret_cast(addr) - load_bias; for (size_t i = 0; i < nbucket_; ++i) { uint32_t n = bucket_[i]; @@ -819,7 +819,7 @@ ElfW(Sym)* soinfo::gnu_addr_lookup(const void* addr) { } ElfW(Sym)* soinfo::elf_addr_lookup(const void* addr) { - ElfW(Addr) soaddr = reinterpret_cast(addr) - base; + ElfW(Addr) soaddr = reinterpret_cast(addr) - load_bias; // Search the library's symbol table for any defined symbol which // contains this address.