Merge "Support oat files compiled with partial boot class path."
diff --git a/runtime/jni/java_vm_ext.cc b/runtime/jni/java_vm_ext.cc
index 7a9d292..6d4ceb5 100644
--- a/runtime/jni/java_vm_ext.cc
+++ b/runtime/jni/java_vm_ext.cc
@@ -87,9 +87,10 @@
self->GetJniEnv()->DeleteWeakGlobalRef(class_loader_);
}
- std::string error_msg;
+ char* error_msg = nullptr;
if (!android::CloseNativeLibrary(handle_, needs_native_bridge_, &error_msg)) {
LOG(WARNING) << "Error while unloading native library \"" << path_ << "\": " << error_msg;
+ android::NativeLoaderFreeErrorMessage(error_msg);
}
}
@@ -962,17 +963,19 @@
Locks::mutator_lock_->AssertNotHeld(self);
const char* path_str = path.empty() ? nullptr : path.c_str();
bool needs_native_bridge = false;
+ char* nativeloader_error_msg;
void* handle = android::OpenNativeLibrary(env,
runtime_->GetTargetSdkVersion(),
path_str,
class_loader,
library_path.get(),
&needs_native_bridge,
- error_msg);
-
+ &nativeloader_error_msg);
VLOG(jni) << "[Call to dlopen(\"" << path << "\", RTLD_NOW) returned " << handle << "]";
if (handle == nullptr) {
+ *error_msg = nativeloader_error_msg;
+ free(nativeloader_error_msg);
VLOG(jni) << "dlopen(\"" << path << "\", RTLD_NOW) failed: " << *error_msg;
return false;
}
diff --git a/runtime/ti/agent.cc b/runtime/ti/agent.cc
index 033c8ac..0202fbc 100644
--- a/runtime/ti/agent.cc
+++ b/runtime/ti/agent.cc
@@ -118,7 +118,7 @@
: JavaVMExt::GetLibrarySearchPath(env, class_loader));
bool needs_native_bridge = false;
- std::string nativeloader_error_msg;
+ char* nativeloader_error_msg = nullptr;
void* dlopen_handle = android::OpenNativeLibrary(env,
Runtime::Current()->GetTargetSdkVersion(),
name_.c_str(),
@@ -129,7 +129,8 @@
if (dlopen_handle == nullptr) {
*error_msg = StringPrintf("Unable to dlopen %s: %s",
name_.c_str(),
- nativeloader_error_msg.c_str());
+ nativeloader_error_msg);
+ android::NativeLoaderFreeErrorMessage(nativeloader_error_msg);
*error = kLoadingError;
return nullptr;
}
@@ -137,7 +138,7 @@
// TODO: Consider support?
// The result of this call and error_msg is ignored because the most
// relevant error is that native bridge is unsupported.
- android::CloseNativeLibrary(dlopen_handle, needs_native_bridge, error_msg);
+ android::CloseNativeLibrary(dlopen_handle, needs_native_bridge, &nativeloader_error_msg);
*error_msg = StringPrintf("Native-bridge agents unsupported: %s", name_.c_str());
*error = kLoadingError;
return nullptr;