diff options
30 files changed, 24 insertions, 47 deletions
diff --git a/compiler/debug/elf_debug_info_writer.h b/compiler/debug/elf_debug_info_writer.h index 6c6bd63b14..2801240d69 100644 --- a/compiler/debug/elf_debug_info_writer.h +++ b/compiler/debug/elf_debug_info_writer.h @@ -30,6 +30,7 @@ #include "dex_file-inl.h" #include "dex_file.h" #include "elf_builder.h" +#include "heap_poisoning.h" #include "linear_alloc.h" #include "mirror/array.h" #include "mirror/class-inl.h" diff --git a/compiler/linker/arm64/relative_patcher_arm64.cc b/compiler/linker/arm64/relative_patcher_arm64.cc index 270ba3c08d..82f502a3af 100644 --- a/compiler/linker/arm64/relative_patcher_arm64.cc +++ b/compiler/linker/arm64/relative_patcher_arm64.cc @@ -23,6 +23,7 @@ #include "compiled_method.h" #include "driver/compiler_driver.h" #include "entrypoints/quick/quick_entrypoints_enum.h" +#include "heap_poisoning.h" #include "linker/output_stream.h" #include "lock_word.h" #include "mirror/array-inl.h" diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc index c61ef0a0bc..8814cfc251 100644 --- a/compiler/optimizing/code_generator_arm64.cc +++ b/compiler/optimizing/code_generator_arm64.cc @@ -27,6 +27,7 @@ #include "entrypoints/quick/quick_entrypoints.h" #include "entrypoints/quick/quick_entrypoints_enum.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_arm64.h" #include "linker/arm64/relative_patcher_arm64.h" diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc index 6147259bd3..baf68c4e11 100644 --- a/compiler/optimizing/code_generator_arm_vixl.cc +++ b/compiler/optimizing/code_generator_arm_vixl.cc @@ -27,6 +27,7 @@ #include "compiled_method.h" #include "entrypoints/quick/quick_entrypoints.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics_arm_vixl.h" #include "linker/arm/relative_patcher_thumb2.h" #include "mirror/array-inl.h" diff --git a/compiler/optimizing/code_generator_mips.cc b/compiler/optimizing/code_generator_mips.cc index 9db2bd35ca..6256722661 100644 --- a/compiler/optimizing/code_generator_mips.cc +++ b/compiler/optimizing/code_generator_mips.cc @@ -26,6 +26,7 @@ #include "entrypoints/quick/quick_entrypoints.h" #include "entrypoints/quick/quick_entrypoints_enum.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_mips.h" #include "mirror/array-inl.h" diff --git a/compiler/optimizing/code_generator_mips64.cc b/compiler/optimizing/code_generator_mips64.cc index a27cbce3db..e8ae2db019 100644 --- a/compiler/optimizing/code_generator_mips64.cc +++ b/compiler/optimizing/code_generator_mips64.cc @@ -24,6 +24,7 @@ #include "entrypoints/quick/quick_entrypoints.h" #include "entrypoints/quick/quick_entrypoints_enum.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_mips64.h" #include "mirror/array-inl.h" diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc index c153cf78da..0b9130fa5a 100644 --- a/compiler/optimizing/code_generator_x86.cc +++ b/compiler/optimizing/code_generator_x86.cc @@ -23,6 +23,7 @@ #include "entrypoints/quick/quick_entrypoints.h" #include "entrypoints/quick/quick_entrypoints_enum.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_x86.h" #include "lock_word.h" diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index bbf05a70d6..39a65806a4 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -22,6 +22,7 @@ #include "compiled_method.h" #include "entrypoints/quick/quick_entrypoints.h" #include "gc/accounting/card_table.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_x86_64.h" #include "lock_word.h" diff --git a/compiler/optimizing/intrinsics_arm64.cc b/compiler/optimizing/intrinsics_arm64.cc index 1ed1b7537e..96efe7f3b1 100644 --- a/compiler/optimizing/intrinsics_arm64.cc +++ b/compiler/optimizing/intrinsics_arm64.cc @@ -21,6 +21,7 @@ #include "code_generator_arm64.h" #include "common_arm64.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "lock_word.h" #include "mirror/array-inl.h" diff --git a/compiler/optimizing/intrinsics_arm_vixl.cc b/compiler/optimizing/intrinsics_arm_vixl.cc index d2dc88a73b..e2494f0ce8 100644 --- a/compiler/optimizing/intrinsics_arm_vixl.cc +++ b/compiler/optimizing/intrinsics_arm_vixl.cc @@ -20,6 +20,7 @@ #include "art_method.h" #include "code_generator_arm_vixl.h" #include "common_arm.h" +#include "heap_poisoning.h" #include "lock_word.h" #include "mirror/array-inl.h" #include "mirror/object_array-inl.h" diff --git a/compiler/optimizing/intrinsics_mips.cc b/compiler/optimizing/intrinsics_mips.cc index 2669d97d82..fe5579c8be 100644 --- a/compiler/optimizing/intrinsics_mips.cc +++ b/compiler/optimizing/intrinsics_mips.cc @@ -20,6 +20,7 @@ #include "art_method.h" #include "code_generator_mips.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "mirror/array-inl.h" #include "mirror/object_array-inl.h" diff --git a/compiler/optimizing/intrinsics_mips64.cc b/compiler/optimizing/intrinsics_mips64.cc index 74be954a75..80448f1389 100644 --- a/compiler/optimizing/intrinsics_mips64.cc +++ b/compiler/optimizing/intrinsics_mips64.cc @@ -20,6 +20,7 @@ #include "art_method.h" #include "code_generator_mips64.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "mirror/array-inl.h" #include "mirror/object_array-inl.h" diff --git a/compiler/optimizing/intrinsics_x86.cc b/compiler/optimizing/intrinsics_x86.cc index a18b0cc400..abd9014438 100644 --- a/compiler/optimizing/intrinsics_x86.cc +++ b/compiler/optimizing/intrinsics_x86.cc @@ -23,6 +23,7 @@ #include "base/bit_utils.h" #include "code_generator_x86.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_utils.h" #include "lock_word.h" diff --git a/compiler/optimizing/intrinsics_x86_64.cc b/compiler/optimizing/intrinsics_x86_64.cc index 5abdb1d1bd..7798c0d99e 100644 --- a/compiler/optimizing/intrinsics_x86_64.cc +++ b/compiler/optimizing/intrinsics_x86_64.cc @@ -23,6 +23,7 @@ #include "base/bit_utils.h" #include "code_generator_x86_64.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "intrinsics.h" #include "intrinsics_utils.h" #include "lock_word.h" diff --git a/compiler/optimizing/scheduler_arm.cc b/compiler/optimizing/scheduler_arm.cc index d6eb6e3c52..66756a5fc7 100644 --- a/compiler/optimizing/scheduler_arm.cc +++ b/compiler/optimizing/scheduler_arm.cc @@ -19,6 +19,7 @@ #include "arch/arm/instruction_set_features_arm.h" #include "code_generator_utils.h" #include "common_arm.h" +#include "heap_poisoning.h" #include "mirror/array-inl.h" #include "mirror/string.h" diff --git a/compiler/utils/arm/assembler_arm_vixl.cc b/compiler/utils/arm/assembler_arm_vixl.cc index 9df1b7434a..34849cd58d 100644 --- a/compiler/utils/arm/assembler_arm_vixl.cc +++ b/compiler/utils/arm/assembler_arm_vixl.cc @@ -21,6 +21,7 @@ #include "base/bit_utils.h" #include "base/bit_utils_iterator.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "thread.h" using namespace vixl::aarch32; // NOLINT(build/namespaces) diff --git a/compiler/utils/arm64/assembler_arm64.cc b/compiler/utils/arm64/assembler_arm64.cc index d8a48a563c..bb989588d6 100644 --- a/compiler/utils/arm64/assembler_arm64.cc +++ b/compiler/utils/arm64/assembler_arm64.cc @@ -17,6 +17,7 @@ #include "assembler_arm64.h" #include "base/logging.h" #include "entrypoints/quick/quick_entrypoints.h" +#include "heap_poisoning.h" #include "offsets.h" #include "thread.h" diff --git a/compiler/utils/mips/assembler_mips.h b/compiler/utils/mips/assembler_mips.h index 0f163ac83f..0b4eb9ca55 100644 --- a/compiler/utils/mips/assembler_mips.h +++ b/compiler/utils/mips/assembler_mips.h @@ -28,6 +28,7 @@ #include "base/stl_util_identity.h" #include "constants_mips.h" #include "globals.h" +#include "heap_poisoning.h" #include "managed_register_mips.h" #include "offsets.h" #include "utils/assembler.h" diff --git a/compiler/utils/mips64/assembler_mips64.h b/compiler/utils/mips64/assembler_mips64.h index dd6dcd1896..bb54382811 100644 --- a/compiler/utils/mips64/assembler_mips64.h +++ b/compiler/utils/mips64/assembler_mips64.h @@ -28,6 +28,7 @@ #include "base/stl_util_identity.h" #include "constants_mips64.h" #include "globals.h" +#include "heap_poisoning.h" #include "managed_register_mips64.h" #include "offsets.h" #include "utils/assembler.h" diff --git a/compiler/utils/x86/assembler_x86.h b/compiler/utils/x86/assembler_x86.h index 2964dbaabc..dce3ad228c 100644 --- a/compiler/utils/x86/assembler_x86.h +++ b/compiler/utils/x86/assembler_x86.h @@ -26,6 +26,7 @@ #include "base/macros.h" #include "constants_x86.h" #include "globals.h" +#include "heap_poisoning.h" #include "managed_register_x86.h" #include "offsets.h" #include "utils/assembler.h" diff --git a/compiler/utils/x86_64/assembler_x86_64.h b/compiler/utils/x86_64/assembler_x86_64.h index 3dab235d1c..fc0839b5a8 100644 --- a/compiler/utils/x86_64/assembler_x86_64.h +++ b/compiler/utils/x86_64/assembler_x86_64.h @@ -25,6 +25,7 @@ #include "base/macros.h" #include "constants_x86_64.h" #include "globals.h" +#include "heap_poisoning.h" #include "managed_register_x86_64.h" #include "offsets.h" #include "utils/assembler.h" diff --git a/runtime/arch/arm/asm_support_arm.h b/runtime/arch/arm/asm_support_arm.h index 3d85872617..ac17303cf9 100644 --- a/runtime/arch/arm/asm_support_arm.h +++ b/runtime/arch/arm/asm_support_arm.h @@ -56,7 +56,4 @@ #define BAKER_MARK_INTROSPECTION_GC_ROOT_LDR_WIDE_OFFSET -8 #define BAKER_MARK_INTROSPECTION_GC_ROOT_LDR_NARROW_OFFSET -6 -// Flag for enabling R4 optimization in arm runtime -// #define ARM_R4_SUSPEND_FLAG - #endif // ART_RUNTIME_ARCH_ARM_ASM_SUPPORT_ARM_H_ diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S index ab9ca840ef..6ff8dd60b8 100644 --- a/runtime/arch/arm/quick_entrypoints_arm.S +++ b/runtime/arch/arm/quick_entrypoints_arm.S @@ -571,10 +571,6 @@ ENTRY art_quick_invoke_stub_internal add ip, ip, #4 @ skip r0 ldm ip, {r1-r3} @ copy r1 - r3 -#ifdef ARM_R4_SUSPEND_FLAG - mov r4, #SUSPEND_CHECK_INTERVAL @ reset r4 to suspend check interval -#endif - REFRESH_MARKING_REGISTER ldr ip, [r0, #ART_METHOD_QUICK_CODE_OFFSET_32] @ get pointer to the code @@ -1533,14 +1529,6 @@ GENERATE_ALLOC_ARRAY_TLAB art_quick_alloc_array_resolved64_tlab, artAllocArrayFr */ .extern artTestSuspendFromCode ENTRY art_quick_test_suspend -#ifdef ARM_R4_SUSPEND_FLAG - ldrh rSUSPEND, [rSELF, #THREAD_FLAGS_OFFSET] - cbnz rSUSPEND, 1f @ check Thread::Current()->suspend_count_ == 0 - mov rSUSPEND, #SUSPEND_CHECK_INTERVAL @ reset rSUSPEND to SUSPEND_CHECK_INTERVAL - bx lr @ return if suspend_count_ == 0 -1: - mov rSUSPEND, #SUSPEND_CHECK_INTERVAL @ reset rSUSPEND to SUSPEND_CHECK_INTERVAL -#endif SETUP_SAVE_EVERYTHING_FRAME r0, RUNTIME_SAVE_EVERYTHING_FOR_SUSPEND_CHECK_METHOD_OFFSET @ save everything for GC stack crawl mov r0, rSELF bl artTestSuspendFromCode @ (Thread*) diff --git a/runtime/arch/mips/quick_entrypoints_mips.S b/runtime/arch/mips/quick_entrypoints_mips.S index 74e0a7ae25..f6204bd8b6 100644 --- a/runtime/arch/mips/quick_entrypoints_mips.S +++ b/runtime/arch/mips/quick_entrypoints_mips.S @@ -971,7 +971,6 @@ ENTRY art_quick_invoke_stub move $fp, $sp # save sp in fp .cfi_def_cfa_register 30 move $s1, $a3 # move managed thread pointer into s1 - addiu $s0, $zero, SUSPEND_CHECK_INTERVAL # reset s0 to suspend check interval addiu $t0, $a2, 4 # create space for ArtMethod* in frame. subu $t0, $sp, $t0 # reserve & align *stack* to 16 bytes: srl $t0, $t0, 4 # native calling convention only aligns to 8B, @@ -1131,7 +1130,6 @@ ENTRY art_quick_invoke_static_stub move $fp, $sp # save sp in fp .cfi_def_cfa_register 30 move $s1, $a3 # move managed thread pointer into s1 - addiu $s0, $zero, SUSPEND_CHECK_INTERVAL # reset s0 to suspend check interval addiu $t0, $a2, 4 # create space for ArtMethod* in frame. subu $t0, $sp, $t0 # reserve & align *stack* to 16 bytes: srl $t0, $t0, 4 # native calling convention only aligns to 8B, @@ -2061,12 +2059,6 @@ ONE_ARG_SAVE_EVERYTHING_DOWNCALL art_quick_initialize_type_and_verify_access, ar */ .extern artTestSuspendFromCode ENTRY_NO_GP art_quick_test_suspend - lh rSUSPEND, THREAD_FLAGS_OFFSET(rSELF) - bnez rSUSPEND, 1f - addiu rSUSPEND, $zero, SUSPEND_CHECK_INTERVAL # reset rSUSPEND to SUSPEND_CHECK_INTERVAL - jalr $zero, $ra - nop -1: SETUP_SAVE_EVERYTHING_FRAME RUNTIME_SAVE_EVERYTHING_FOR_SUSPEND_CHECK_METHOD_OFFSET # save everything for stack crawl la $t9, artTestSuspendFromCode diff --git a/runtime/arch/mips64/quick_entrypoints_mips64.S b/runtime/arch/mips64/quick_entrypoints_mips64.S index 1817502c77..d4ad275f35 100644 --- a/runtime/arch/mips64/quick_entrypoints_mips64.S +++ b/runtime/arch/mips64/quick_entrypoints_mips64.S @@ -1052,7 +1052,6 @@ ENTRY_NO_GP art_quick_invoke_stub sd $a4, 0($sp) .cfi_rel_offset 8, 0 - daddiu $s0, $zero, SUSPEND_CHECK_INTERVAL # reset rSUSPEND to SUSPEND_CHECK_INTERVAL move $s1, $a3 # move managed thread pointer into s1 (rSELF) move $s8, $sp # save sp in s8 (fp) @@ -1155,7 +1154,6 @@ ENTRY_NO_GP art_quick_invoke_static_stub sd $a4, 0($sp) .cfi_rel_offset 8, 0 - daddiu $s0, $zero, SUSPEND_CHECK_INTERVAL # reset rSUSPEND to SUSPEND_CHECK_INTERVAL move $s1, $a3 # move managed thread pointer into s1 (rSELF) move $s8, $sp # save sp in s8 (fp) @@ -1975,12 +1973,6 @@ ONE_ARG_SAVE_EVERYTHING_DOWNCALL art_quick_initialize_type_and_verify_access, ar */ .extern artTestSuspendFromCode ENTRY_NO_GP art_quick_test_suspend - lh rSUSPEND, THREAD_FLAGS_OFFSET(rSELF) - bne rSUSPEND, $zero, 1f - daddiu rSUSPEND, $zero, SUSPEND_CHECK_INTERVAL # reset rSUSPEND to SUSPEND_CHECK_INTERVAL - jalr $zero, $ra - nop -1: SETUP_SAVE_EVERYTHING_FRAME RUNTIME_SAVE_EVERYTHING_FOR_SUSPEND_CHECK_METHOD_OFFSET # save everything for stack crawl jal artTestSuspendFromCode # (Thread*) diff --git a/runtime/asm_support.h b/runtime/asm_support.h index a4e34592f5..e18f11080f 100644 --- a/runtime/asm_support.h +++ b/runtime/asm_support.h @@ -20,20 +20,6 @@ #include "heap_poisoning.h" #include "read_barrier_config.h" -#if defined(__arm__) || defined(__mips__) -// In quick code for ARM and MIPS we make poor use of registers and perform frequent suspend -// checks in the event of loop back edges. The SUSPEND_CHECK_INTERVAL constant is loaded into a -// register at the point of an up-call or after handling a suspend check. It reduces the number of -// loads of the TLS suspend check value by the given amount (turning it into a decrement and compare -// of a register). This increases the time for a thread to respond to requests from GC and the -// debugger, damaging GC performance and creating other unwanted artifacts. For example, this count -// has the effect of making loops and Java code look cold in profilers, where the count is reset -// impacts where samples will occur. Reducing the count as much as possible improves profiler -// accuracy in tools like traceview. -// TODO: get a compiler that can do a proper job of loop optimization and remove this. -#define SUSPEND_CHECK_INTERVAL 96 -#endif - // To generate tests related to the constants in this header, either define ADD_TEST_EQ before // including, or use asm_support_check.h. #ifndef ADD_TEST_EQ // Allow #include-r to replace with their own. diff --git a/runtime/globals.h b/runtime/globals.h index f10c7805c5..53932fd8cd 100644 --- a/runtime/globals.h +++ b/runtime/globals.h @@ -20,8 +20,6 @@ #include <stddef.h> #include <stdint.h> -#include "heap_poisoning.h" - namespace art { static constexpr size_t KB = 1024; diff --git a/runtime/mirror/object-inl.h b/runtime/mirror/object-inl.h index 6eb200d0d3..f1a86e5353 100644 --- a/runtime/mirror/object-inl.h +++ b/runtime/mirror/object-inl.h @@ -27,6 +27,7 @@ #include "class_flags.h" #include "class_linker.h" #include "dex_cache.h" +#include "heap_poisoning.h" #include "lock_word-inl.h" #include "monitor.h" #include "obj_ptr-inl.h" diff --git a/runtime/mirror/object-readbarrier-inl.h b/runtime/mirror/object-readbarrier-inl.h index f0769409d4..0a956633d4 100644 --- a/runtime/mirror/object-readbarrier-inl.h +++ b/runtime/mirror/object-readbarrier-inl.h @@ -20,6 +20,7 @@ #include "object.h" #include "atomic.h" +#include "heap_poisoning.h" #include "lock_word-inl.h" #include "object_reference-inl.h" #include "read_barrier.h" diff --git a/runtime/mirror/object_reference.h b/runtime/mirror/object_reference.h index c62ee6cb61..7fd9c71b24 100644 --- a/runtime/mirror/object_reference.h +++ b/runtime/mirror/object_reference.h @@ -20,6 +20,7 @@ #include "atomic.h" #include "base/mutex.h" // For Locks::mutator_lock_. #include "globals.h" +#include "heap_poisoning.h" #include "obj_ptr.h" namespace art { |