From c1993cac4072e2d0c48cd9b55e3861d879ada224 Mon Sep 17 00:00:00 2001 From: Raghu Gandham Date: Fri, 21 Sep 2012 12:21:02 -0700 Subject: [PATCH] Fix dlsym and dladdr to use load_bias instead of base Change-Id: If0f9aa944ccb1f90451aa6674428e34494331d2d --- linker/dlfcn.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linker/dlfcn.c b/linker/dlfcn.c index 07e00acc9..44ab158d2 100644 --- a/linker/dlfcn.c +++ b/linker/dlfcn.c @@ -110,7 +110,7 @@ void *dlsym(void *handle, const char *symbol) bind = ELF32_ST_BIND(sym->st_info); if(likely((bind == STB_GLOBAL) && (sym->st_shndx != 0))) { - unsigned ret = sym->st_value + found->base; + unsigned ret = sym->st_value + found->load_bias; pthread_mutex_unlock(&dl_lock); return (void*)ret; } @@ -138,14 +138,14 @@ int dladdr(const void *addr, Dl_info *info) memset(info, 0, sizeof(Dl_info)); info->dli_fname = si->name; - info->dli_fbase = (void*)si->base; + info->dli_fbase = (void*)si->load_bias; /* Determine if any symbol in the library contains the specified address */ Elf32_Sym *sym = soinfo_find_symbol(si, addr); if(sym != NULL) { info->dli_sname = si->strtab + sym->st_name; - info->dli_saddr = (void*)(si->base + sym->st_value); + info->dli_saddr = (void*)(si->load_bias + sym->st_value); } ret = 1;