summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2015-09-02 14:14:08 +0100
committerDmitriy Ivanov <dimitry@google.com>2015-10-08 12:28:39 -0700
commita828a2f8e6fd5271787a7dea4c682cbf54425a14 (patch)
tree4c92f143a1878dfc12ce5dfbcefb593d41fcdb8c
parent4f3e3591ace36b6d86e3a1bc8b3f438989cb0618 (diff)
downloadbionic-a828a2f8e6fd5271787a7dea4c682cbf54425a14.zip
bionic-a828a2f8e6fd5271787a7dea4c682cbf54425a14.tar.gz
bionic-a828a2f8e6fd5271787a7dea4c682cbf54425a14.tar.bz2
linker: don't pass dlextinfo to dependent loads.
Don't pass the parent load's dlextinfo to dependent loads, since this causes the linker to try to load the dependencies using the same addresses/relro/fds/etc as the main library, which is never going to work. This was how it worked before ae69a95 which broke this. Bug: 23742664 Change-Id: I53d8cdf0982d8758e6d2ced4864c704cdf74118f
-rw-r--r--linker/linker.cpp7
-rw-r--r--tests/libs/Android.mk2
2 files changed, 6 insertions, 3 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index b860f70..faacd49 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1468,13 +1468,14 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[]
// Step 1: load and pre-link all DT_NEEDED libraries in breadth first order.
for (LoadTask::unique_ptr task(load_tasks.pop_front());
task.get() != nullptr; task.reset(load_tasks.pop_front())) {
- soinfo* si = find_library_internal(load_tasks, task->get_name(), rtld_flags, extinfo);
+ soinfo* needed_by = task->get_needed_by();
+
+ soinfo* si = find_library_internal(load_tasks, task->get_name(),
+ rtld_flags, needed_by == nullptr ? extinfo : nullptr);
if (si == nullptr) {
return false;
}
- soinfo* needed_by = task->get_needed_by();
-
if (needed_by != nullptr) {
needed_by->add_child(si);
}
diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk
index a5ef622..5b96306 100644
--- a/tests/libs/Android.mk
+++ b/tests/libs/Android.mk
@@ -67,6 +67,8 @@ libdlext_test_src_files := \
libdlext_test_ldflags := \
-Wl,-z,relro \
+libdlext_test_shared_libraries := libtest_simple
+
module := libdlext_test
module_tag := optional
include $(LOCAL_PATH)/Android.build.testlib.mk