diff options
-rw-r--r-- | build/Android.executable.mk | 1 | ||||
-rw-r--r-- | build/Android.gtest.mk | 1 | ||||
-rw-r--r-- | compiler/dex/quick/x86/fp_x86.cc | 5 | ||||
-rw-r--r-- | runtime/debugger.cc | 28 | ||||
-rw-r--r-- | runtime/dex_instruction.cc | 14 | ||||
-rw-r--r-- | test/Android.mk | 8 | ||||
-rwxr-xr-x | tools/art | 11 |
7 files changed, 52 insertions, 16 deletions
diff --git a/build/Android.executable.mk b/build/Android.executable.mk index ba54e0476b..551b03ccc6 100644 --- a/build/Android.executable.mk +++ b/build/Android.executable.mk @@ -84,6 +84,7 @@ define build-art-executable else LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) endif + LOCAL_LDLIBS += -lpthread endif ifeq ($$(art_ndebug_or_debug),ndebug) diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk index 62916e3c36..da0b5008a0 100644 --- a/build/Android.gtest.mk +++ b/build/Android.gtest.mk @@ -176,6 +176,7 @@ define build-art-test # GCC host compiled tests fail with this linked, presumably due to destructors that run. LOCAL_STATIC_LIBRARIES += libgtest_host endif + LOCAL_LDLIBS += -lpthread -ldl include $(BUILD_HOST_EXECUTABLE) art_gtest_exe := $(HOST_OUT_EXECUTABLES)/$$(LOCAL_MODULE) ART_HOST_GTEST_EXECUTABLES += $$(art_gtest_exe) diff --git a/compiler/dex/quick/x86/fp_x86.cc b/compiler/dex/quick/x86/fp_x86.cc index ec4d9db0bb..3fb901216d 100644 --- a/compiler/dex/quick/x86/fp_x86.cc +++ b/compiler/dex/quick/x86/fp_x86.cc @@ -146,6 +146,11 @@ void X86Mir2Lir::GenLongToFP(RegLocation rl_dest, RegLocation rl_src, bool is_do if (lo_info != nullptr && lo_info->is_temp) { // Calling FlushSpecificReg because it will only write back VR if it is dirty. FlushSpecificReg(lo_info); + // ResetDef for low/high to prevent NullifyRange from removing stores. + ResetDef(rl_src.reg.GetLowReg()); + if (rl_src.reg.GetLowReg() != rl_src.reg.GetHighReg() && GetRegInfo(rl_src.reg.GetHighReg()) != nullptr) { + ResetDef(rl_src.reg.GetHighReg()); + } } else { // It must have been register promoted if it is not a temp but is still in physical // register. Since we need it to be in memory to convert, we place it there now. diff --git a/runtime/debugger.cc b/runtime/debugger.cc index 20e720b950..024f83028f 100644 --- a/runtime/debugger.cc +++ b/runtime/debugger.cc @@ -968,6 +968,18 @@ void Dbg::DisposeObject(JDWP::ObjectId object_id, uint32_t reference_count) gRegistry->DisposeObject(object_id, reference_count); } +static JDWP::JdwpTypeTag GetTypeTag(mirror::Class* klass) + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { + DCHECK(klass != nullptr); + if (klass->IsArrayClass()) { + return JDWP::TT_ARRAY; + } else if (klass->IsInterface()) { + return JDWP::TT_INTERFACE; + } else { + return JDWP::TT_CLASS; + } +} + JDWP::JdwpError Dbg::GetReflectedType(JDWP::RefTypeId class_id, JDWP::ExpandBuf* pReply) { JDWP::JdwpError status; mirror::Class* c = DecodeClass(class_id, status); @@ -975,7 +987,8 @@ JDWP::JdwpError Dbg::GetReflectedType(JDWP::RefTypeId class_id, JDWP::ExpandBuf* return status; } - expandBufAdd1(pReply, c->IsInterface() ? JDWP::TT_INTERFACE : JDWP::TT_CLASS); + JDWP::JdwpTypeTag type_tag = GetTypeTag(c); + expandBufAdd1(pReply, type_tag); expandBufAddRefTypeId(pReply, class_id); return JDWP::ERR_NONE; } @@ -1049,14 +1062,7 @@ JDWP::JdwpError Dbg::GetReferenceType(JDWP::ObjectId object_id, JDWP::ExpandBuf* return JDWP::ERR_INVALID_OBJECT; } - JDWP::JdwpTypeTag type_tag; - if (o->GetClass()->IsArrayClass()) { - type_tag = JDWP::TT_ARRAY; - } else if (o->GetClass()->IsInterface()) { - type_tag = JDWP::TT_INTERFACE; - } else { - type_tag = JDWP::TT_CLASS; - } + JDWP::JdwpTypeTag type_tag = GetTypeTag(o->GetClass()); JDWP::RefTypeId type_id = gRegistry->AddRefType(o->GetClass()); expandBufAdd1(pReply, type_tag); @@ -1309,7 +1315,7 @@ static void SetLocation(JDWP::JdwpLocation& location, mirror::ArtMethod* m, uint memset(&location, 0, sizeof(location)); } else { mirror::Class* c = m->GetDeclaringClass(); - location.type_tag = c->IsInterface() ? JDWP::TT_INTERFACE : JDWP::TT_CLASS; + location.type_tag = GetTypeTag(c); location.class_id = gRegistry->AddRefType(c); location.method_id = ToMethodId(m); location.dex_pc = (m->IsNative() || m->IsProxyMethod()) ? static_cast<uint64_t>(-1) : dex_pc; @@ -2481,7 +2487,7 @@ void Dbg::PostClassPrepare(mirror::Class* c) { // debuggers seem to like that. There might be some advantage to honesty, // since the class may not yet be verified. int state = JDWP::CS_VERIFIED | JDWP::CS_PREPARED; - JDWP::JdwpTypeTag tag = c->IsInterface() ? JDWP::TT_INTERFACE : JDWP::TT_CLASS; + JDWP::JdwpTypeTag tag = GetTypeTag(c); gJdwpState->PostClassPrepare(tag, gRegistry->Add(c), ClassHelper(c).GetDescriptor(), state); } diff --git a/runtime/dex_instruction.cc b/runtime/dex_instruction.cc index 8fccd6da3e..754624538d 100644 --- a/runtime/dex_instruction.cc +++ b/runtime/dex_instruction.cc @@ -551,6 +551,20 @@ std::string Instruction::DumpString(const DexFile* file) const { uint32_t arg[5]; GetArgs(arg); switch (Opcode()) { + case FILLED_NEW_ARRAY: + { + const int32_t a = VRegA_35c(); + os << opcode << " {"; + for (int i = 0; i < a; ++i) { + if (i > 0) { + os << ", "; + } + os << "v" << arg[i]; + } + os << "}, type@" << VRegB_35c(); + } + break; + case INVOKE_VIRTUAL: case INVOKE_SUPER: case INVOKE_DIRECT: diff --git a/test/Android.mk b/test/Android.mk index da5b35f64b..bb6c43772b 100644 --- a/test/Android.mk +++ b/test/Android.mk @@ -168,7 +168,13 @@ dmart_target := endef # Expand all tests. -$(foreach test, $(wildcard $(LOCAL_PATH)/[0-9]*), $(eval $(call declare-make-art-run-test,$(notdir $(test))))) +TEST_ART_RUN_TESTS := $(wildcard $(LOCAL_PATH)/[0-9]*) +TEST_ART_RUN_TESTS := $(subst $(LOCAL_PATH)/,, $(TEST_ART_RUN_TESTS)) +TEST_ART_TIMING_SENSITIVE_RUN_TESTS := 055-enum-performance +ifdef dist_goal # disable timing sensitive tests on "dist" builds. + $(foreach test, $(TEST_ART_TIMING_SENSITIVE_RUN_TESTS), $(eval TEST_ART_RUN_TESTS := $(filter-out $(test), $(TEST_ART_RUN_TESTS)))) +endif +$(foreach test, $(TEST_ART_RUN_TESTS), $(eval $(call declare-make-art-run-test,$(test)))) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := tests @@ -46,12 +46,15 @@ PROG_NAME="$(follow_links "$BASH_SOURCE")" PROG_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" ANDROID_BUILD_TOP="$(cd "${PROG_DIR}/../../../../" ; pwd -P)/" ANDROID_HOST_OUT=$PROG_DIR/.. +ANDROID_DATA=$PWD/android-data$$ -mkdir -p /tmp/android-data/dalvik-cache -ANDROID_DATA=/tmp/android-data \ +mkdir -p $ANDROID_DATA/dalvik-cache +ANDROID_DATA=$ANDROID_DATA \ ANDROID_ROOT=$ANDROID_HOST_OUT \ LD_LIBRARY_PATH=$ANDROID_HOST_OUT/lib \ - exec $invoke_with $ANDROID_HOST_OUT/bin/dalvikvm $lib \ - -Xbootclasspath:$ANDROID_HOST_OUT/core-hostdex.jar \ + $invoke_with $ANDROID_HOST_OUT/bin/dalvikvm $lib \ -Ximage:$ANDROID_HOST_OUT/framework/core.art \ "$@" +EXIT_STATUS=$? +rm -rf $ANDROID_DATA +exit $EXIT_STATUS |