From 683192270fefbc7b681f91dd95e75ec62ec479e4 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 17 Dec 2019 15:24:00 -0800 Subject: [PATCH] Stop using weak symbols in libvndksupport. These weak symbols are no longer necessary because we no longer need to statically link libvndksupport. Furthermore, these symbols are not really optional when libvndksupport is dynamically linked. When the library is linked with --as-needed the linker may drop the reference to libdl_android.so, which leads to a failure to boot. Bug: 146456667 Change-Id: I4d2290d8d0206e0d89665d4d872a7c53b3e1531b --- libvndksupport/linker.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/libvndksupport/linker.cpp b/libvndksupport/linker.cpp index cf0f6186d..30b9c2e28 100644 --- a/libvndksupport/linker.cpp +++ b/libvndksupport/linker.cpp @@ -26,9 +26,7 @@ #include -__attribute__((weak)) extern "C" android_namespace_t* android_get_exported_namespace(const char*); -__attribute__((weak)) extern "C" void* android_dlopen_ext(const char*, int, - const android_dlextinfo*); +extern "C" android_namespace_t* android_get_exported_namespace(const char*); namespace { @@ -42,10 +40,8 @@ struct VendorNamespace { static VendorNamespace get_vendor_namespace() { static VendorNamespace result = ([] { for (const char* name : {"sphal", "default"}) { - if (android_get_exported_namespace != nullptr) { - if (android_namespace_t* ns = android_get_exported_namespace(name)) { - return VendorNamespace{ns, name}; - } + if (android_namespace_t* ns = android_get_exported_namespace(name)) { + return VendorNamespace{ns, name}; } } return VendorNamespace{}; @@ -59,10 +55,6 @@ int android_is_in_vendor_process() { if (getpid() == 1) { return 0; } - if (android_get_exported_namespace == nullptr) { - ALOGD("android_get_exported_namespace() not available. Assuming system process."); - return 0; - } // In vendor process, 'vndk' namespace is not visible, whereas in system // process, it is. @@ -76,10 +68,7 @@ void* android_load_sphal_library(const char* name, int flag) { .flags = ANDROID_DLEXT_USE_NAMESPACE, .library_namespace = vendor_namespace.ptr, }; - void* handle = nullptr; - if (android_dlopen_ext != nullptr) { - handle = android_dlopen_ext(name, flag, &dlextinfo); - } + void* handle = android_dlopen_ext(name, flag, &dlextinfo); if (!handle) { ALOGE("Could not load %s from %s namespace: %s.", name, vendor_namespace.name, dlerror());