From f525272b1edec721058e7d888545dd5d97b5045d Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Tue, 15 Mar 2016 14:47:29 +0000 Subject: [PATCH] runtime: delete native/java_lang_Runtime.cc We're now using Runtime.c from ojluni, which does the same set of things via the JVM interface. This removes unnecessary duplication of code between Runtime.cc and OpenJdkJvm.cc. Also includes a few changes to JVM_NativeLoad to bring it in sync with the version in Runtime.cc. bug: 27387202 (cherry picked from commit 5f97157263d1b52bf4aea523b28294b21d694da1) Change-Id: Ic2848755505a0cb25da8237150b07dadf0a42929 --- runtime/Android.mk | 1 - runtime/native/java_lang_Runtime.cc | 134 ------------------------------------ runtime/openjdkjvm/OpenjdkJvm.cc | 8 +-- runtime/runtime.cc | 1 - 4 files changed, 4 insertions(+), 140 deletions(-) delete mode 100644 runtime/native/java_lang_Runtime.cc diff --git a/runtime/Android.mk b/runtime/Android.mk index 84660a319..f70e6964c 100644 --- a/runtime/Android.mk +++ b/runtime/Android.mk @@ -140,7 +140,6 @@ LIBART_COMMON_SRC_FILES := \ native/java_lang_Class.cc \ native/java_lang_DexCache.cc \ native/java_lang_Object.cc \ - native/java_lang_Runtime.cc \ native/java_lang_String.cc \ native/java_lang_StringFactory.cc \ native/java_lang_System.cc \ diff --git a/runtime/native/java_lang_Runtime.cc b/runtime/native/java_lang_Runtime.cc deleted file mode 100644 index df794e124..000000000 --- a/runtime/native/java_lang_Runtime.cc +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "java_lang_Runtime.h" - -#include -#include -#include - -#include "base/macros.h" -#include "gc/heap.h" -#include "handle_scope-inl.h" -#include "jni_internal.h" -#include "mirror/class_loader.h" -#include "runtime.h" -#include "scoped_thread_state_change.h" -#include "ScopedUtfChars.h" -#include "verify_object-inl.h" - -#include -#ifdef __ANDROID__ -// This function is provided by android linker. -extern "C" void android_update_LD_LIBRARY_PATH(const char* ld_library_path); -#endif // __ANDROID__ - -namespace art { - -static void Runtime_gc(JNIEnv*, jclass) { - if (Runtime::Current()->IsExplicitGcDisabled()) { - LOG(INFO) << "Explicit GC skipped."; - return; - } - Runtime::Current()->GetHeap()->CollectGarbage(false); -} - -NO_RETURN static void Runtime_nativeExit(JNIEnv*, jclass, jint status) { - LOG(INFO) << "System.exit called, status: " << status; - Runtime::Current()->CallExitHook(status); - exit(status); -} - -static void SetLdLibraryPath(JNIEnv* env, jstring javaLdLibraryPath) { -#ifdef __ANDROID__ - if (javaLdLibraryPath != nullptr) { - ScopedUtfChars ldLibraryPath(env, javaLdLibraryPath); - if (ldLibraryPath.c_str() != nullptr) { - android_update_LD_LIBRARY_PATH(ldLibraryPath.c_str()); - } - } - -#else - LOG(WARNING) << "android_update_LD_LIBRARY_PATH not found; .so dependencies will not work!"; - UNUSED(javaLdLibraryPath, env); -#endif -} - -static jstring Runtime_nativeLoad(JNIEnv* env, - jclass, - jstring javaFilename, - jobject javaLoader, - jstring javaLibrarySearchPath) { - ScopedUtfChars filename(env, javaFilename); - if (filename.c_str() == nullptr) { - return nullptr; - } - - int32_t target_sdk_version = Runtime::Current()->GetTargetSdkVersion(); - - // Starting with N nativeLoad uses classloader local - // linker namespace instead of global LD_LIBRARY_PATH - // (23 is Marshmallow). This call is here to preserve - // backwards compatibility for the apps targeting sdk - // version <= 23 - if (target_sdk_version == 0) { - SetLdLibraryPath(env, javaLibrarySearchPath); - } - - std::string error_msg; - { - JavaVMExt* vm = Runtime::Current()->GetJavaVM(); - bool success = vm->LoadNativeLibrary(env, - filename.c_str(), - javaLoader, - javaLibrarySearchPath, - &error_msg); - if (success) { - return nullptr; - } - } - - // Don't let a pending exception from JNI_OnLoad cause a CheckJNI issue with NewStringUTF. - env->ExceptionClear(); - return env->NewStringUTF(error_msg.c_str()); -} - -static jlong Runtime_maxMemory(JNIEnv*, jclass) { - return Runtime::Current()->GetHeap()->GetMaxMemory(); -} - -static jlong Runtime_totalMemory(JNIEnv*, jclass) { - return Runtime::Current()->GetHeap()->GetTotalMemory(); -} - -static jlong Runtime_freeMemory(JNIEnv*, jclass) { - return Runtime::Current()->GetHeap()->GetFreeMemory(); -} - -static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Runtime, freeMemory, "!()J"), - NATIVE_METHOD(Runtime, gc, "()V"), - NATIVE_METHOD(Runtime, maxMemory, "!()J"), - NATIVE_METHOD(Runtime, nativeExit, "(I)V"), - NATIVE_METHOD(Runtime, nativeLoad, "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/String;"), - NATIVE_METHOD(Runtime, totalMemory, "!()J"), -}; - -void register_java_lang_Runtime(JNIEnv* env) { - REGISTER_NATIVE_METHODS("java/lang/Runtime"); -} - -} // namespace art diff --git a/runtime/openjdkjvm/OpenjdkJvm.cc b/runtime/openjdkjvm/OpenjdkJvm.cc index d377457eb..aff9b61f3 100644 --- a/runtime/openjdkjvm/OpenjdkJvm.cc +++ b/runtime/openjdkjvm/OpenjdkJvm.cc @@ -342,15 +342,15 @@ JNIEXPORT jstring JVM_NativeLoad(JNIEnv* env, // Starting with N nativeLoad uses classloader local // linker namespace instead of global LD_LIBRARY_PATH - // (23 is Marshmallow) - if (target_sdk_version <= 23) { + // (23 is Marshmallow). This call is here to preserve + // backwards compatibility for the apps targeting sdk + // version <= 23 + if (target_sdk_version == 0) { SetLdLibraryPath(env, javaLibrarySearchPath); } std::string error_msg; { - art::ScopedObjectAccess soa(env); - art::StackHandleScope<1> hs(soa.Self()); art::JavaVMExt* vm = art::Runtime::Current()->GetJavaVM(); bool success = vm->LoadNativeLibrary(env, filename.c_str(), diff --git a/runtime/runtime.cc b/runtime/runtime.cc index 66a3828c0..182ca3692 100644 --- a/runtime/runtime.cc +++ b/runtime/runtime.cc @@ -1341,7 +1341,6 @@ void Runtime::RegisterRuntimeNativeMethods(JNIEnv* env) { register_java_lang_reflect_Method(env); register_java_lang_reflect_Proxy(env); register_java_lang_ref_Reference(env); - register_java_lang_Runtime(env); register_java_lang_String(env); register_java_lang_StringFactory(env); register_java_lang_System(env); -- 2.11.0