From 9c3449ecd9d5e9cdb1e995e35e53334a4a288a5e Mon Sep 17 00:00:00 2001 From: Xiaokang Qin Date: Thu, 13 Sep 2012 18:07:24 +0800 Subject: [PATCH] bionic: linker: Need update the map->l_addr for execution. Currently, linker doesn't update the map->l_addr for execution. Which could break the Unwind_Backtrace with PT_GNU_EH_FRAME enabled in new toolchain. Change-Id: Ifbd853134da64a962f7e4c4105e56a3f20def1b2 Author: Fengwei Yin Signed-off-by: Jack Ren Author-tracking-BZ: 57077 --- linker/linker.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/linker/linker.cpp b/linker/linker.cpp index 46d133583..998e608ef 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1916,6 +1916,12 @@ sanitize: soinfo_call_constructors(preloads[i]); } + /*After the link_image, the si->base is initialized. + *For so lib, the map->l_addr will be updated in notify_gdb_of_load. + *We need to update this value for so exe here. So Unwind_Backtrace + *for some arch like x86 could work correctly within so exe. + */ + map->l_addr = si->base; soinfo_call_constructors(si); #if ALLOW_SYMBOLS_FROM_MAIN