Load libRS_internal.so from the rs namespace
Bug: 64747884
Test: VtsHalRenderscriptV1_0TargetTest successful on the device built
with BOARD_VNDK_VERSION=current and [system] namespace config is applied
to /data/nativetest[64]/* processes.
Merged-In: I9e967c80ac2dba718cd47e1f378bcbf18abe9ad2
Change-Id: I9e967c80ac2dba718cd47e1f378bcbf18abe9ad2
(cherry picked from commit a7ef697a0a
)
This commit is contained in:
parent
cd76985909
commit
0f70905b7d
1 changed files with 22 additions and 1 deletions
|
@ -1,6 +1,9 @@
|
|||
#include "Context.h"
|
||||
#include "Device.h"
|
||||
|
||||
#include <android/dlext.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace renderscript {
|
||||
|
@ -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…
Reference in a new issue