diff options
author | Torne (Richard Coles) <torne@google.com> | 2015-09-02 14:14:08 +0100 |
---|---|---|
committer | Dmitriy Ivanov <dimitry@google.com> | 2015-10-08 12:28:39 -0700 |
commit | a828a2f8e6fd5271787a7dea4c682cbf54425a14 (patch) | |
tree | 4c92f143a1878dfc12ce5dfbcefb593d41fcdb8c | |
parent | 4f3e3591ace36b6d86e3a1bc8b3f438989cb0618 (diff) | |
download | bionic-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.cpp | 7 | ||||
-rw-r--r-- | tests/libs/Android.mk | 2 |
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 |