diff options
| -rw-r--r-- | Android.mk | 6 | ||||
| -rw-r--r-- | build/Android.common.mk | 2 | ||||
| -rw-r--r-- | build/Android.gtest.mk | 12 | ||||
| -rw-r--r-- | build/Android.libarttest.mk | 1 | ||||
| -rw-r--r-- | build/Android.oattest.mk | 2 | ||||
| -rw-r--r-- | src/base64.cc | 76 | ||||
| -rw-r--r-- | src/base64.h | 15 | ||||
| -rw-r--r-- | src/common_test.h | 67 | ||||
| -rw-r--r-- | src/jni_compiler_test.cc | 12 | ||||
| -rw-r--r-- | src/jni_internal.cc | 2 | ||||
| -rw-r--r-- | src/jni_tests.cc | 9 |
11 files changed, 87 insertions, 117 deletions
diff --git a/Android.mk b/Android.mk index 0b8d0ebed0..c6546268e6 100644 --- a/Android.mk +++ b/Android.mk @@ -65,8 +65,8 @@ endif ART_TARGET_DEPENDENCIES := $(ART_TARGET_EXECUTABLES) $(TARGET_OUT_JAVA_LIBRARIES)/core.jar $(TARGET_OUT_SHARED_LIBRARIES)/libjavacore.so -ART_HOST_TEST_DEPENDENCIES := $(ART_HOST_DEPENDENCIES) $(ART_TEST_OAT_FILES) -ART_TARGET_TEST_DEPENDENCIES := $(ART_TARGET_DEPENDENCIES) $(ART_TEST_OAT_FILES) +ART_HOST_TEST_DEPENDENCIES := $(ART_HOST_DEPENDENCIES) $(ART_HOST_TEST_EXECUTABLES) $(ART_TEST_OAT_FILES) +ART_TARGET_TEST_DEPENDENCIES := $(ART_TARGET_DEPENDENCIES) $(ART_TARGET_TEST_EXECUTABLES) $(ART_TEST_OAT_FILES) ######################################################################## # host test targets @@ -97,7 +97,7 @@ test-art-target: test-art-target-gtest test-art-target-oat test-art-target-run-t @echo test-art-target PASSED .PHONY: test-art-target-sync -test-art-target-sync: $(ART_TARGET_TEST_DEPENDENCIES) +test-art-target-sync: $(ART_TARGET_TEST_DEPENDENCIES) $(ART_TEST_OUT)/libarttest.so adb remount adb sync adb shell mkdir -p $(ART_TEST_DIR) diff --git a/build/Android.common.mk b/build/Android.common.mk index ba34206ba1..bd0e0be96f 100644 --- a/build/Android.common.mk +++ b/build/Android.common.mk @@ -218,8 +218,6 @@ LIBART_HOST_SRC_FILES := \ src/runtime_support_x86.S LIBARTTEST_COMMON_SRC_FILES := \ - src/base64.cc \ - src/jni_tests.cc \ test/StackWalk/stack_walk_jni.cc \ test/ReferenceMap/stack_walk_refmap_jni.cc diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk index 3ac0170f25..1f57369fdc 100644 --- a/build/Android.gtest.mk +++ b/build/Android.gtest.mk @@ -43,15 +43,18 @@ define build-art-test LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := $$(art_gtest_filename) LOCAL_C_INCLUDES += $(ART_C_INCLUDES) - LOCAL_SHARED_LIBRARIES := libarttest libartd + LOCAL_SHARED_LIBRARIES := libartd + + # options to allow jni_compiler_test to find Java_MyClass_bar within itself using dlopen(NULL, ) + LOCAL_LDFLAGS := -Wl,--export-dynamic -Wl,-u,Java_MyClass_bar ifeq ($$(art_target_or_host),target) LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS) LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libstlport libz LOCAL_STATIC_LIBRARIES := libgtest libgtest_main - LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_NATIVE_TESTS)/$$(LOCAL_MODULE) + LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_NATIVE_TESTS)/art include $(BUILD_EXECUTABLE) - art_gtest_exe := $$(LOCAL_MODULE_PATH) + art_gtest_exe := $$(LOCAL_MODULE_PATH)/$$(LOCAL_MODULE) ART_TARGET_TEST_EXECUTABLES += $$(art_gtest_exe) else # host LOCAL_CFLAGS := $(ART_HOST_CFLAGS) $(ART_HOST_DEBUG_CFLAGS) @@ -67,14 +70,13 @@ define build-art-test art_gtest_exe := $(HOST_OUT_EXECUTABLES)/$$(LOCAL_MODULE) ART_HOST_TEST_EXECUTABLES += $$(art_gtest_exe) endif - art_gtest_target := test-art-$$(art_target_or_host)-gtest-$$(art_gtest_name) ifeq ($$(art_target_or_host),target) .PHONY: $$(art_gtest_target) $$(art_gtest_target): $$(art_gtest_exe) test-art-target-sync adb shell touch $(ART_TEST_DIR)/$$@ adb shell rm $(ART_TEST_DIR)/$$@ - adb shell sh -c "/data/nativetest/$$(notdir $$<)/$$(notdir $$<) && touch $(ART_TEST_DIR)/$$@" + adb shell sh -c "/data/nativetest/art/$$(notdir $$<) && touch $(ART_TEST_DIR)/$$@" $(hide) (adb pull $(ART_TEST_DIR)/$$@ /tmp/ && echo $$@ PASSED) || (echo $$@ FAILED && exit 1) $(hide) rm /tmp/$$@ diff --git a/build/Android.libarttest.mk b/build/Android.libarttest.mk index 16bbcada91..7726df0ca5 100644 --- a/build/Android.libarttest.mk +++ b/build/Android.libarttest.mk @@ -39,6 +39,7 @@ define build-libarttest LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS) LOCAL_SHARED_LIBRARIES += libdl libstlport LOCAL_STATIC_LIBRARIES := libgtest + LOCAL_MODULE_PATH := $(ART_TEST_OUT) include $(BUILD_SHARED_LIBRARY) else # host LOCAL_CFLAGS := $(ART_HOST_CFLAGS) $(ART_HOST_DEBUG_CFLAGS) diff --git a/build/Android.oattest.mk b/build/Android.oattest.mk index 98ec45f7c2..86349a2c4f 100644 --- a/build/Android.oattest.mk +++ b/build/Android.oattest.mk @@ -65,7 +65,7 @@ define declare-test-test-target test-art-target-oat-$(1): $(ART_TEST_OUT)/art-test-dex-$(1).jar test-art-target-sync adb shell touch $(ART_TEST_DIR)/test-art-target-oat-$(1) adb shell rm $(ART_TEST_DIR)/test-art-target-oat-$(1) - adb shell sh -c "oatexecd -Ximage:$(ART_TEST_DIR)/core.art -classpath $(ART_TEST_DIR)/art-test-dex-$(1).jar $(1) $(2) && touch $(ART_TEST_DIR)/test-art-target-oat-$(1)" + adb shell sh -c "oatexecd -Ximage:$(ART_TEST_DIR)/core.art -classpath $(ART_TEST_DIR)/art-test-dex-$(1).jar -Djava.library.path=$(ART_TEST_DIR) $(1) $(2) && touch $(ART_TEST_DIR)/test-art-target-oat-$(1)" $(hide) (adb pull $(ART_TEST_DIR)/test-art-target-oat-$(1) /tmp/ && echo test-art-target-oat-$(1) PASSED) || (echo test-art-target-oat-$(1) FAILED && exit 1) $(hide) rm /tmp/test-art-target-oat-$(1) diff --git a/src/base64.cc b/src/base64.cc deleted file mode 100644 index 1709946e50..0000000000 --- a/src/base64.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#include <vector> - -#include "UniquePtr.h" -#include "globals.h" - -namespace art { - -static const byte kMap[256] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, - 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, - 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255 -}; - -byte* DecodeBase64(const char* src, size_t* dst_size) { - std::vector<byte> tmp; - unsigned long t = 0, y = 0; - int g = 3; - for (size_t i = 0; src[i] != '\0'; ++i) { - byte c = kMap[src[i] & 0xFF]; - if (c == 255) continue; - // the final = symbols are read and used to trim the remaining bytes - if (c == 254) { - c = 0; - // prevent g < 0 which would potentially allow an overflow later - if (--g < 0) { - return NULL; - } - } else if (g != 3) { - // we only allow = to be at the end - return NULL; - } - t = (t << 6) | c; - if (++y == 4) { - tmp.push_back((t >> 16) & 255); - if (g > 1) { - tmp.push_back((t >> 8) & 255); - } - if (g > 2) { - tmp.push_back(t & 255); - } - y = t = 0; - } - } - if (y != 0) { - return NULL; - } - UniquePtr<byte[]> dst(new byte[tmp.size()]); - if (dst_size != NULL) { - *dst_size = tmp.size(); - } - std::copy(tmp.begin(), tmp.end(), dst.get()); - return dst.release(); -} - -} // namespace art diff --git a/src/base64.h b/src/base64.h deleted file mode 100644 index a4344ea672..0000000000 --- a/src/base64.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#ifndef ART_SRC_BASE64_H_ -#define ART_SRC_BASE64_H_ - -#include "globals.h" - -namespace art { - -// Decodes a C string with base64 encoded data. -byte* DecodeBase64(const char* src, size_t* dst_size); - -} // namespace art - -#endif // ART_SRC_BASE64_H_ diff --git a/src/common_test.h b/src/common_test.h index 0456c35d39..3da2f37d89 100644 --- a/src/common_test.h +++ b/src/common_test.h @@ -7,7 +7,6 @@ #include <sys/types.h> #include "UniquePtr.h" -#include "base64.h" #include "class_linker.h" #include "class_loader.h" #include "compiler.h" @@ -29,6 +28,72 @@ namespace art { +static const byte kBase64Map[256] = { + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, + 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, + 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255 +}; + +byte* DecodeBase64(const char* src, size_t* dst_size) { + std::vector<byte> tmp; + unsigned long t = 0, y = 0; + int g = 3; + for (size_t i = 0; src[i] != '\0'; ++i) { + byte c = kBase64Map[src[i] & 0xFF]; + if (c == 255) continue; + // the final = symbols are read and used to trim the remaining bytes + if (c == 254) { + c = 0; + // prevent g < 0 which would potentially allow an overflow later + if (--g < 0) { + return NULL; + } + } else if (g != 3) { + // we only allow = to be at the end + return NULL; + } + t = (t << 6) | c; + if (++y == 4) { + tmp.push_back((t >> 16) & 255); + if (g > 1) { + tmp.push_back((t >> 8) & 255); + } + if (g > 2) { + tmp.push_back(t & 255); + } + y = t = 0; + } + } + if (y != 0) { + return NULL; + } + UniquePtr<byte[]> dst(new byte[tmp.size()]); + if (dst_size != NULL) { + *dst_size = tmp.size(); + } + std::copy(tmp.begin(), tmp.end(), dst.get()); + return dst.release(); +} + static inline const DexFile* OpenDexFileBase64(const char* base64, const std::string& location) { // decode base64 diff --git a/src/jni_compiler_test.cc b/src/jni_compiler_test.cc index 938d733ee8..5e19d4d6ca 100644 --- a/src/jni_compiler_test.cc +++ b/src/jni_compiler_test.cc @@ -17,6 +17,11 @@ #include "scoped_jni_thread_state.h" #include "thread.h" +extern "C" +JNIEXPORT jint JNICALL Java_MyClass_bar(JNIEnv* env, jobject thisObj, jint count) { + return count + 1; +} + namespace art { class JniCompilerTest : public CommonTest { @@ -109,12 +114,11 @@ TEST_F(JniCompilerTest, CompileAndRunNoArgMethod) { TEST_F(JniCompilerTest, CompileAndRunIntMethodThroughStub) { SirtRef<ClassLoader> class_loader(LoadDex("MyClassNatives")); SetupForTest(class_loader.get(), false, "bar", "(I)I", - NULL /* dlsym will find &Java_MyClass_bar later */); + NULL /* calling through stub will load &Java_MyClass_bar */); - std::string path("libarttest.so"); std::string reason; - ASSERT_TRUE(Runtime::Current()->GetJavaVM()->LoadNativeLibrary(path, class_loader.get(), reason)) - << path << ": " << reason; + ASSERT_TRUE(Runtime::Current()->GetJavaVM()->LoadNativeLibrary("", class_loader.get(), reason)) + << reason; jint result = env_->CallNonvirtualIntMethod(jobj_, jklass_, jmethod_, 24); EXPECT_EQ(25, result); diff --git a/src/jni_internal.cc b/src/jni_internal.cc index 8e7c0a2e4f..5385ae2ad3 100644 --- a/src/jni_internal.cc +++ b/src/jni_internal.cc @@ -2853,7 +2853,7 @@ bool JavaVMExt::LoadNativeLibrary(const std::string& path, ClassLoader* class_lo void* handle = NULL; { ScopedThreadStateChange tsc(self, Thread::kVmWait); - handle = dlopen(path.c_str(), RTLD_LAZY); + handle = dlopen(path.empty() ? NULL : path.c_str(), RTLD_LAZY); } VLOG(jni) << "[Call to dlopen(\"" << path << "\") returned " << handle << "]"; diff --git a/src/jni_tests.cc b/src/jni_tests.cc deleted file mode 100644 index 934ccac947..0000000000 --- a/src/jni_tests.cc +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#include "jni.h" -#include <stdio.h> - -extern "C" -JNIEXPORT jint JNICALL Java_MyClass_bar(JNIEnv* env, jobject thisObj, jint count) { - return count + 1; -} |