diff --git a/buildspecs/j9.flags b/buildspecs/j9.flags index 1fb97701cd9..5dffddd3b0a 100644 --- a/buildspecs/j9.flags +++ b/buildspecs/j9.flags @@ -999,14 +999,14 @@ all data is stored in their own region. It additionaly reduces footprint, mainly DEBUGGING FEATURE. Determines if the interpreter produces debug information at every bytecode. No full trace available. - - Debug mode for tracing uses of updateVMStruct - No tracing of updateVMStruct helpers - Exclusive VM access - Set halt bit in one pass, count responders in another pass Set and count in a single pass + + Debug mode for tracing uses of updateVMStruct + No tracing of updateVMStruct helpers + If set, use helper functions in UnsafeAPI to access native memory diff --git a/runtime/cmake/caches/aix_ppc-64.cmake b/runtime/cmake/caches/aix_ppc-64.cmake index 313fea30cb0..e23638bc692 100644 --- a/runtime/cmake/caches/aix_ppc-64.cmake +++ b/runtime/cmake/caches/aix_ppc-64.cmake @@ -32,6 +32,9 @@ set(OMR_GC_TLH_PREFETCH_FTA OFF CACHE BOOL "") set(J9VM_PORT_RUNTIME_INSTRUMENTATION ON CACHE BOOL "") set(J9VM_MODULE_CODEGEN_PPC ON CACHE BOOL "") set(J9VM_GC_IDLE_HEAP_MANAGER OFF CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH ON CACHE BOOL "") +set(J9VM_INTERP_TWO_PASS_EXCLUSIVE ON CACHE BOOL "") set(J9VM_OPT_SWITCH_STACKS_FOR_SIGNAL_HANDLER OFF CACHE BOOL "") set(J9VM_THR_ASYNC_NAME_UPDATE OFF CACHE BOOL "") diff --git a/runtime/cmake/caches/linux_ppc-64_le_gcc.cmake b/runtime/cmake/caches/linux_ppc-64_le_gcc.cmake index d6c3d6fb5eb..af0d8166f42 100644 --- a/runtime/cmake/caches/linux_ppc-64_le_gcc.cmake +++ b/runtime/cmake/caches/linux_ppc-64_le_gcc.cmake @@ -35,6 +35,9 @@ set(J9VM_PORT_RUNTIME_INSTRUMENTATION ON CACHE BOOL "") set(J9VM_MODULE_CODEGEN_PPC ON CACHE BOOL "") set(J9VM_MODULE_THRTRACE ON CACHE BOOL "") set(J9VM_GC_IDLE_HEAP_MANAGER OFF CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH ON CACHE BOOL "") +set(J9VM_INTERP_TWO_PASS_EXCLUSIVE ON CACHE BOOL "") set(J9VM_OPT_SWITCH_STACKS_FOR_SIGNAL_HANDLER OFF CACHE BOOL "") set(J9VM_PORT_RUNTIME_INSTRUMENTATION ON CACHE BOOL "") diff --git a/runtime/cmake/caches/linux_x86-64.cmake b/runtime/cmake/caches/linux_x86-64.cmake index 42f9f39c00e..7ae5608250f 100644 --- a/runtime/cmake/caches/linux_x86-64.cmake +++ b/runtime/cmake/caches/linux_x86-64.cmake @@ -33,6 +33,9 @@ set(J9VM_MODULE_JIT_IA32 ON CACHE BOOL "") set(J9VM_MODULE_JITRT_IA32 ON CACHE BOOL "") set(J9VM_MODULE_MASM2GAS ON CACHE BOOL "") set(J9VM_GC_IDLE_HEAP_MANAGER ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH ON CACHE BOOL "") +set(J9VM_INTERP_TWO_PASS_EXCLUSIVE ON CACHE BOOL "") set(J9VM_OPT_SWITCH_STACKS_FOR_SIGNAL_HANDLER ON CACHE BOOL "") set(OMR_GC_IDLE_HEAP_MANAGER ON CACHE BOOL "") diff --git a/runtime/cmake/caches/osx_x86-64.cmake b/runtime/cmake/caches/osx_x86-64.cmake index d759e4f9c9c..06f81caea5c 100644 --- a/runtime/cmake/caches/osx_x86-64.cmake +++ b/runtime/cmake/caches/osx_x86-64.cmake @@ -34,6 +34,9 @@ set(J9VM_MODULE_JIT_IA32 ON CACHE BOOL "") set(J9VM_MODULE_JITRT_IA32 ON CACHE BOOL "") set(J9VM_MODULE_MASM2GAS ON CACHE BOOL "") set(J9VM_GC_IDLE_HEAP_MANAGER ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH ON CACHE BOOL "") +set(J9VM_INTERP_TWO_PASS_EXCLUSIVE ON CACHE BOOL "") set(J9VM_OPT_SWITCH_STACKS_FOR_SIGNAL_HANDLER ON CACHE BOOL "") set(OMR_PORT_NUMA_SUPPORT ON CACHE BOOL "") diff --git a/runtime/cmake/caches/win_x86-64.cmake b/runtime/cmake/caches/win_x86-64.cmake index 8995acdfab8..a934bc8e046 100644 --- a/runtime/cmake/caches/win_x86-64.cmake +++ b/runtime/cmake/caches/win_x86-64.cmake @@ -27,6 +27,9 @@ set(J9VM_ENV_LITTLE_ENDIAN ON CACHE BOOL "") set(J9VM_ENV_HAS_FPU OFF CACHE INTERNAL "") set(OMR_GC_IDLE_HEAP_MANAGER OFF CACHE BOOL "") set(J9VM_GC_IDLE_HEAP_MANAGER OFF CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI ON CACHE BOOL "") +set(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH ON CACHE BOOL "") +set(J9VM_INTERP_TWO_PASS_EXCLUSIVE ON CACHE BOOL "") set(J9VM_INTERP_USE_UNSAFE_HELPER OFF CACHE BOOL "") set(J9VM_MODULE_GDB OFF CACHE BOOL "") set(J9VM_MODULE_GDB_PLUGIN OFF CACHE BOOL "") diff --git a/runtime/cmake/options.cmake b/runtime/cmake/options.cmake index 8e022aadd67..e684110d4f7 100644 --- a/runtime/cmake/options.cmake +++ b/runtime/cmake/options.cmake @@ -78,6 +78,7 @@ j9vm_shadowed_option(J9VM_GC_VLHGC "Enables the Very Large Heap Garbage Collect option(J9VM_INTERP_AOT_COMPILE_SUPPORT "Controls if the AOT compilation support is included in the VM") option(J9VM_INTERP_AOT_RUNTIME_SUPPORT "Controls if the AOT runtime support is included in the VM") option(J9VM_INTERP_ATOMIC_FREE_JNI "Use the new atomic-free JNI support") +option(J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH "Atomic free uses FlushProcessWriteBuffers instead of barriers") option(J9VM_INTERP_BYTECODE_PREVERIFICATION "Does this VM support 1st pass bytecode verification (able to dynamically generate pre-verify data)") option(J9VM_INTERP_BYTECODE_VERIFICATION "Does this VM support 2nd pass bytecode verification (pre-verify data in .jxe only)") @@ -105,7 +106,7 @@ option(J9VM_INTERP_ROMABLE_AOT_SUPPORT "ROMable AOT Support for TJ Watson") option(J9VM_INTERP_TRACING "DEBUGGING FEATURE. Determines if the interpreter produces debug information at every bytecode.") - +option(J9VM_INTERP_TWO_PASS_EXCLUSIVE "Exclusive VM access - Set halt bit in one pass, count responders in another pass") option(J9VM_INTERP_USE_SPLIT_SIDE_TABLES "Use split side tables for handling constant pool entry shared between multiple invoke bytecodes") option(J9VM_INTERP_USE_UNSAFE_HELPER "If set, use helper functions in UnsafeAPI to access native memory") diff --git a/runtime/include/j9cfg.h.in b/runtime/include/j9cfg.h.in index b78f85a9968..ed1e3a66ee3 100644 --- a/runtime/include/j9cfg.h.in +++ b/runtime/include/j9cfg.h.in @@ -148,6 +148,7 @@ extern "C" { #cmakedefine J9VM_INTERP_AOT_COMPILE_SUPPORT #cmakedefine J9VM_INTERP_AOT_RUNTIME_SUPPORT #cmakedefine J9VM_INTERP_ATOMIC_FREE_JNI +#cmakedefine J9VM_INTERP_ATOMIC_FREE_JNI_USES_FLUSH #cmakedefine J9VM_INTERP_BYTECODE_PREVERIFICATION #cmakedefine J9VM_INTERP_BYTECODE_VERIFICATION #cmakedefine J9VM_INTERP_COMPRESSED_OBJECT_HEADER @@ -173,6 +174,7 @@ extern "C" { #cmakedefine J9VM_INTERP_SIG_QUIT_THREAD_USES_SEMAPHORES #cmakedefine J9VM_INTERP_SMALL_MONITOR_SLOT #cmakedefine J9VM_INTERP_TRACING +#cmakedefine J9VM_INTERP_TWO_PASS_EXCLUSIVE #cmakedefine J9VM_INTERP_UPDATE_VMCTRACING #cmakedefine J9VM_INTERP_USE_SPLIT_SIDE_TABLES #cmakedefine J9VM_INTERP_USE_UNSAFE_HELPER diff --git a/runtime/vm/CMakeLists.txt b/runtime/vm/CMakeLists.txt index 874388abcaf..8c92ef56b45 100644 --- a/runtime/vm/CMakeLists.txt +++ b/runtime/vm/CMakeLists.txt @@ -1,5 +1,5 @@ ################################################################################ -# Copyright (c) 2017, 2019 IBM Corp. and others +# Copyright (c) 2017, 2020 IBM Corp. and others # # This program and the accompanying materials are made available under # the terms of the Eclipse Public License 2.0 which accompanies this @@ -55,6 +55,7 @@ add_library(j9vm SHARED FastJNI_java_lang_Throwable.cpp FastJNI_sun_misc_Unsafe.cpp findmethod.c + FlushProcessWriteBuffers.cpp gphandle.c growstack.cpp guardedstorage.c