diff options
author | 2016-08-11 17:04:14 +0100 | |
---|---|---|
committer | 2016-08-11 17:04:14 +0100 | |
commit | 2ea915326b0ff9e07f0b3ecb68b78f7d3200d200 (patch) | |
tree | c7ac53f09bb71eb6da19b0a71435774637765942 | |
parent | 33699c9529add1c1ec4bb5dcb0807942709de224 (diff) |
ARM64: Use libvixld when compiling for debug mode.
VIXL debug mode checks are valuable to catch dangerous code that can
lead to bugs.
This patch includes a couple of fixes for issues spotted by VIXL in debug mode.
Change-Id: I388ae1ffd9256ad74d0b6ce06f79cc7927a5f28a
-rw-r--r-- | build/Android.common_build.mk | 1 | ||||
-rw-r--r-- | build/Android.gtest.mk | 4 | ||||
-rw-r--r-- | compiler/Android.mk | 4 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_arm64.cc | 18 | ||||
-rw-r--r-- | dex2oat/Android.mk | 5 | ||||
-rw-r--r-- | disassembler/Android.mk | 4 | ||||
-rw-r--r-- | runtime/simulator/Android.mk | 4 |
7 files changed, 21 insertions, 19 deletions
diff --git a/build/Android.common_build.mk b/build/Android.common_build.mk index bac0ff36fe..73951643e4 100644 --- a/build/Android.common_build.mk +++ b/build/Android.common_build.mk @@ -252,6 +252,7 @@ art_non_debug_cflags := \ art_debug_cflags := \ $(ART_DEBUG_OPT_FLAG) \ -DDYNAMIC_ANNOTATIONS_ENABLED=1 \ + -DVIXL_DEBUG \ -UNDEBUG # Assembler flags for non-debug ART and ART tools. diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk index c79205fca6..3d07fc0ca8 100644 --- a/build/Android.gtest.mk +++ b/build/Android.gtest.mk @@ -634,7 +634,7 @@ define define-art-gtest ifeq ($$(art_target_or_host),target) $$(eval LOCAL_CLANG := $$(ART_TARGET_CLANG)) $$(eval $$(call set-target-local-cflags-vars,debug)) - LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libz libcutils libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libz libcutils libvixld-arm64 LOCAL_MODULE_PATH_32 := $$(ART_TARGET_NATIVETEST_OUT)/$$(ART_TARGET_ARCH_32) LOCAL_MODULE_PATH_64 := $$(ART_TARGET_NATIVETEST_OUT)/$$(ART_TARGET_ARCH_64) LOCAL_MULTILIB := both @@ -678,7 +678,7 @@ valgrind-test-art-target-gtest-$$(art_gtest_name): $$(ART_TEST_TARGET_VALGRIND_G LOCAL_CLANG := $$(ART_HOST_CLANG) LOCAL_CFLAGS += $$(ART_HOST_CFLAGS) $$(ART_HOST_DEBUG_CFLAGS) LOCAL_ASFLAGS += $$(ART_HOST_ASFLAGS) $$(ART_HOST_DEBUG_ASFLAGS) - LOCAL_SHARED_LIBRARIES += libicuuc-host libicui18n-host libnativehelper libziparchive-host libz-host libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libicuuc-host libicui18n-host libnativehelper libziparchive-host libz-host libvixld-arm64 LOCAL_LDLIBS := -lpthread -ldl LOCAL_IS_HOST_MODULE := true LOCAL_MULTILIB := both diff --git a/compiler/Android.mk b/compiler/Android.mk index 0ede30d03a..46b7e5d71b 100644 --- a/compiler/Android.mk +++ b/compiler/Android.mk @@ -287,9 +287,9 @@ $$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PAT # Vixl assembly support for ARM64 targets. ifeq ($$(art_ndebug_or_debug),debug) ifeq ($$(art_static_or_shared), static) - LOCAL_WHOLESTATIC_LIBRARIES += libvixl-arm64 + LOCAL_WHOLESTATIC_LIBRARIES += libvixld-arm64 else - LOCAL_SHARED_LIBRARIES += libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libvixld-arm64 endif else ifeq ($$(art_static_or_shared), static) diff --git a/compiler/optimizing/intrinsics_arm64.cc b/compiler/optimizing/intrinsics_arm64.cc index e7c40e6600..e233672705 100644 --- a/compiler/optimizing/intrinsics_arm64.cc +++ b/compiler/optimizing/intrinsics_arm64.cc @@ -1160,8 +1160,10 @@ void IntrinsicCodeGeneratorARM64::VisitStringCompareTo(HInvoke* invoke) { MacroAssembler* masm = GetVIXLAssembler(); LocationSummary* locations = invoke->GetLocations(); - Register str = XRegisterFrom(locations->InAt(0)); - Register arg = XRegisterFrom(locations->InAt(1)); + Register str = InputRegisterAt(invoke, 0); + Register arg = InputRegisterAt(invoke, 1); + DCHECK(str.IsW()); + DCHECK(arg.IsW()); Register out = OutputRegister(invoke); Register temp0 = WRegisterFrom(locations->GetTemp(0)); @@ -1192,8 +1194,8 @@ void IntrinsicCodeGeneratorARM64::VisitStringCompareTo(HInvoke* invoke) { __ Subs(out, str, arg); __ B(&end, eq); // Load lengths of this and argument strings. - __ Ldr(temp0, MemOperand(str.X(), count_offset)); - __ Ldr(temp1, MemOperand(arg.X(), count_offset)); + __ Ldr(temp0, HeapOperand(str, count_offset)); + __ Ldr(temp1, HeapOperand(arg, count_offset)); // Return zero if both strings are empty. __ Orr(out, temp0, temp1); __ Cbz(out, &end); @@ -1222,8 +1224,8 @@ void IntrinsicCodeGeneratorARM64::VisitStringCompareTo(HInvoke* invoke) { // Loop to compare 4x16-bit characters at a time (ok because of string data alignment). __ Bind(&loop); - __ Ldr(temp4, MemOperand(str.X(), temp1)); - __ Ldr(temp0, MemOperand(arg.X(), temp1)); + __ Ldr(temp4, MemOperand(str.X(), temp1.X())); + __ Ldr(temp0, MemOperand(arg.X(), temp1.X())); __ Cmp(temp4, temp0); __ B(ne, &find_char_diff); __ Add(temp1, temp1, char_size * 4); @@ -1242,14 +1244,14 @@ void IntrinsicCodeGeneratorARM64::VisitStringCompareTo(HInvoke* invoke) { __ Clz(temp1, temp1); // If the number of 16-bit chars remaining <= the index where the difference occurs (0-3), then // the difference occurs outside the remaining string data, so just return length diff (out). - __ Cmp(temp2, Operand(temp1, LSR, 4)); + __ Cmp(temp2, Operand(temp1.W(), LSR, 4)); __ B(le, &end); // Extract the characters and calculate the difference. __ Bic(temp1, temp1, 0xf); __ Lsr(temp0, temp0, temp1); __ Lsr(temp4, temp4, temp1); __ And(temp4, temp4, 0xffff); - __ Sub(out, temp4, Operand(temp0, UXTH)); + __ Sub(out, temp4.W(), Operand(temp0.W(), UXTH)); __ Bind(&end); diff --git a/dex2oat/Android.mk b/dex2oat/Android.mk index f5f02cd966..37acef666e 100644 --- a/dex2oat/Android.mk +++ b/dex2oat/Android.mk @@ -62,7 +62,6 @@ DEX2OAT_STATIC_DEPENDENCIES := \ libnativebridge \ libnativeloader \ libsigchain_dummy \ - libvixl-arm64 \ liblog \ libz \ libbacktrace \ @@ -83,14 +82,14 @@ DEX2OAT_STATIC_DEPENDENCIES := \ ifeq ($(ART_BUILD_HOST_NDEBUG),true) $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libcutils libart-compiler libsigchain libziparchive-host liblz4,art/compiler,host,ndebug,$(dex2oat_host_arch))) ifeq ($(ART_BUILD_HOST_STATIC),true) - $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libart libart-compiler libart $(DEX2OAT_STATIC_DEPENDENCIES),art/compiler,host,ndebug,$(dex2oat_host_arch),static)) + $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libart libart-compiler libart libvixl-arm64 $(DEX2OAT_STATIC_DEPENDENCIES),art/compiler,host,ndebug,$(dex2oat_host_arch),static)) endif endif ifeq ($(ART_BUILD_HOST_DEBUG),true) $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libcutils libartd-compiler libsigchain libziparchive-host liblz4,art/compiler,host,debug,$(dex2oat_host_arch))) ifeq ($(ART_BUILD_HOST_STATIC),true) - $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libartd libartd-compiler libartd $(DEX2OAT_STATIC_DEPENDENCIES),art/compiler,host,debug,$(dex2oat_host_arch),static)) + $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libartd libartd-compiler libartd libvixld-arm64 $(DEX2OAT_STATIC_DEPENDENCIES),art/compiler,host,debug,$(dex2oat_host_arch),static)) endif endif diff --git a/disassembler/Android.mk b/disassembler/Android.mk index 778fe8ee96..db327fcdb6 100644 --- a/disassembler/Android.mk +++ b/disassembler/Android.mk @@ -90,9 +90,9 @@ define build-libart-disassembler LOCAL_NATIVE_COVERAGE := $(ART_COVERAGE) # For disassembler_arm64. ifeq ($$(art_ndebug_or_debug),debug) - LOCAL_SHARED_LIBRARIES += libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libvixld-arm64 else - LOCAL_SHARED_LIBRARIES += libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libvixl-arm64 endif ifeq ($$(art_target_or_host),target) include $(BUILD_SHARED_LIBRARY) diff --git a/runtime/simulator/Android.mk b/runtime/simulator/Android.mk index 953a37733d..a34a84100a 100644 --- a/runtime/simulator/Android.mk +++ b/runtime/simulator/Android.mk @@ -88,9 +88,9 @@ define build-libart-simulator LOCAL_NATIVE_COVERAGE := $(ART_COVERAGE) # For simulator_arm64. ifeq ($$(art_ndebug_or_debug),debug) - LOCAL_SHARED_LIBRARIES += libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libvixld-arm64 else - LOCAL_SHARED_LIBRARIES += libvixl-arm64 + LOCAL_SHARED_LIBRARIES += libvixl-arm64 endif ifeq ($$(art_target_or_host),target) include $(BUILD_SHARED_LIBRARY) |