Loading renderscript/1.0/default/Device.cpp +22 −1 Original line number Diff line number Diff line #include "Context.h" #include "Device.h" #include <android/dlext.h> #include <dlfcn.h> namespace android { namespace hardware { namespace renderscript { Loading Loading @@ -39,7 +42,25 @@ dispatchTable loadHAL() { static_assert(sizeof(size_t) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(size_t) > sizeof(uint64_t)"); const char* filename = "libRS_internal.so"; void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); // Try to load libRS_internal.so from the "rs" namespace directly. typedef struct android_namespace_t* (*GetExportedNamespaceFnPtr)(const char*); GetExportedNamespaceFnPtr getExportedNamespace = (GetExportedNamespaceFnPtr)dlsym(RTLD_DEFAULT, "android_get_exported_namespace"); void* handle = nullptr; if (getExportedNamespace != nullptr) { android_namespace_t* rs_namespace = getExportedNamespace("rs"); if (rs_namespace != nullptr) { const android_dlextinfo dlextinfo = { .flags = ANDROID_DLEXT_USE_NAMESPACE, .library_namespace = rs_namespace, }; handle = android_dlopen_ext(filename, RTLD_LAZY | RTLD_LOCAL, &dlextinfo); } } if (handle == nullptr) { // if there is no "rs" namespace (in case when this HAL impl is loaded // into a vendor process), then use the plain dlopen. handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); } dispatchTable dispatchHal = { .SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr, Loading Loading
renderscript/1.0/default/Device.cpp +22 −1 Original line number Diff line number Diff line #include "Context.h" #include "Device.h" #include <android/dlext.h> #include <dlfcn.h> namespace android { namespace hardware { namespace renderscript { Loading Loading @@ -39,7 +42,25 @@ dispatchTable loadHAL() { static_assert(sizeof(size_t) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(size_t) > sizeof(uint64_t)"); const char* filename = "libRS_internal.so"; void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); // Try to load libRS_internal.so from the "rs" namespace directly. typedef struct android_namespace_t* (*GetExportedNamespaceFnPtr)(const char*); GetExportedNamespaceFnPtr getExportedNamespace = (GetExportedNamespaceFnPtr)dlsym(RTLD_DEFAULT, "android_get_exported_namespace"); void* handle = nullptr; if (getExportedNamespace != nullptr) { android_namespace_t* rs_namespace = getExportedNamespace("rs"); if (rs_namespace != nullptr) { const android_dlextinfo dlextinfo = { .flags = ANDROID_DLEXT_USE_NAMESPACE, .library_namespace = rs_namespace, }; handle = android_dlopen_ext(filename, RTLD_LAZY | RTLD_LOCAL, &dlextinfo); } } if (handle == nullptr) { // if there is no "rs" namespace (in case when this HAL impl is loaded // into a vendor process), then use the plain dlopen. handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); } dispatchTable dispatchHal = { .SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr, Loading