aboutsummaryrefslogtreecommitdiffstats
path: root/linker
diff options
context:
space:
mode:
authorDmitriy Ivanov <dimitry@google.com>2015-06-02 13:28:06 -0700
committerDmitriy Ivanov <dimitry@google.com>2015-06-02 13:45:15 -0700
commit38c37d6705f420ecac4146c11d79bee6e0ca8a03 (patch)
tree4e94331f80cb5dffb964537330ceedcb1d352d30 /linker
parentc4ebe60e1a2fc165ff11442765325628e27f2a05 (diff)
downloadandroid_bionic-38c37d6705f420ecac4146c11d79bee6e0ca8a03.tar.gz
android_bionic-38c37d6705f420ecac4146c11d79bee6e0ca8a03.tar.bz2
android_bionic-38c37d6705f420ecac4146c11d79bee6e0ca8a03.zip
Work around for libraries without dt_soname
Applies only for apps targeting sdk version <= 22 Bug: http://b/21565766 Change-Id: If0bf2229dc1341e9ca09f9a05d0890515273d5a2
Diffstat (limited to 'linker')
-rw-r--r--linker/linker.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 02ee9c703..a0f82fc6c 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -2875,6 +2875,19 @@ bool soinfo::prelink_image() {
DL_ERR("empty/missing DT_SYMTAB in \"%s\"", get_realpath());
return false;
}
+
+ // Before M release linker was using basename in place of soname.
+ // In the case when dt_soname is absent some apps stop working:
+ // because they can't find dt_needed library by soname.
+ // This workaround should keep them working. (applies only
+ // for apps targeting sdk version <=22). Make an exception for main
+ // executable which does not need dt_soname.
+ uint32_t target_sdk_version = get_application_target_sdk_version();
+ if (soname_ == nullptr && this != somain && target_sdk_version != 0 && target_sdk_version <= 22) {
+ soname_ = basename(realpath_.c_str());
+ DL_WARN("%s: is missing DT_SONAME will use basename as a replacement: \"%s\"",
+ get_realpath(), soname_);
+ }
return true;
}