JDK-8232616 : JVMCI_lock fails to get initialized when cds is disabled
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 13,14
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2019-10-18
  • Updated: 2020-10-27
  • Resolved: 2019-10-21
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 13 JDK 14
13.0.6Fixed 14 b20Fixed
Related Reports
Relates :  
Description
* Reproduce
-------------------------------------
bash configure --disable-cds ...

java \
   -XX:+UnlockExperimentalVMOptions \
   -XX:+EnableJVMCI \
   -Djvmci.Compiler=null \
   -XX:+JVMCIPrintProperties
-------------------------------------

* Symptom
-------------------------------------
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f6fdfec6a91, pid=10257, tid=10258
#
# JRE version: OpenJDK Runtime Environment (14.0) (build 14-internal+0-adhoc.fool.jdk-dev)
# Java VM: OpenJDK 64-Bit Server VM (14-internal+0-adhoc.fool.jdk-dev, mixed mode, tiered, jvmci, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# V  [libjvm.so+0xc15a91]  Mutex::unlock()+0x1
#
-------------------------------------

* List of failing tests due to this bug (127 failures in total) 
-------------------------------------
compiler/aot/DeoptimizationTest.java: check if aot code can be deoptimized
compiler/aot/RecompilationTest.java: check if recompilation after aot goes fine
compiler/aot/SharedUsageTest.java: check if .so can be successfully shared with 2 java processes
compiler/aot/calls/fromAot/AotInvokeDynamic2AotTest.java: check calls from aot to aot code using invokedynamic
compiler/aot/calls/fromAot/AotInvokeDynamic2CompiledTest.java: check calls from aot to jit-compiled code using invokedynamic
compiler/aot/calls/fromAot/AotInvokeDynamic2InterpretedTest.java: check calls from aot to interpreted code using invokedynamic
compiler/aot/calls/fromAot/AotInvokeDynamic2NativeTest.java: check calls from aot to native code using invokedynamic
compiler/aot/calls/fromAot/AotInvokeInterface2AotTest.java: check calls from aot to aot code using invokeinterface
compiler/aot/calls/fromAot/AotInvokeInterface2CompiledTest.java: check calls from aot to jit-compiled code using invokeinterface
compiler/aot/calls/fromAot/AotInvokeInterface2InterpretedTest.java: check calls from aot to interpreted code using invokeinterface
compiler/aot/calls/fromAot/AotInvokeInterface2NativeTest.java: check calls from aot to native code using invokeinterface
compiler/aot/calls/fromAot/AotInvokeSpecial2AotTest.java: check calls from aot to aot code using invokespecial
compiler/aot/calls/fromAot/AotInvokeSpecial2CompiledTest.java: check calls from aot to jit-compiled code using invokespecial
compiler/aot/calls/fromAot/AotInvokeSpecial2InterpretedTest.java: check calls from aot to interpreted code using invokespecial
compiler/aot/calls/fromAot/AotInvokeSpecial2NativeTest.java: check calls from aot to interpreted code using invokespecial
compiler/aot/calls/fromAot/AotInvokeStatic2AotTest.java: check calls from aot to aot code using invokestatic
compiler/aot/calls/fromAot/AotInvokeStatic2CompiledTest.java: check calls from aot to jit-compiled code using invokestatic
compiler/aot/calls/fromAot/AotInvokeStatic2InterpretedTest.java: check calls from aot to interpreted code using invokestatic
compiler/aot/calls/fromAot/AotInvokeStatic2NativeTest.java: check calls from aot to native code using invokestatic
compiler/aot/calls/fromAot/AotInvokeVirtual2AotTest.java: check calls from aot to aot code, using invokevirtual
compiler/aot/calls/fromAot/AotInvokeVirtual2CompiledTest.java: check calls from aot to jit-compiled code, using invokevirtual
compiler/aot/calls/fromAot/AotInvokeVirtual2InterpretedTest.java: check calls from aot to interpreted code, using invokevirtual
compiler/aot/calls/fromAot/AotInvokeVirtual2NativeTest.java: check calls from aot to native code, using invokevirtual
compiler/aot/calls/fromCompiled/CompiledInvokeDynamic2AotTest.java: check calls from jit-compiled to aot code using invokedynamic
compiler/aot/calls/fromCompiled/CompiledInvokeInterface2AotTest.java: check calls from jit-compiled to aot code using invokeinterface
compiler/aot/calls/fromCompiled/CompiledInvokeSpecial2AotTest.java: check calls from jit-compiled to aot code using invokespecial
compiler/aot/calls/fromCompiled/CompiledInvokeStatic2AotTest.java: check calls from jit-compiled to aot code using invokestatic
compiler/aot/calls/fromCompiled/CompiledInvokeVirtual2AotTest.java: check calls from jit-compiled to aot code using invokevirtual
compiler/aot/calls/fromInterpreted/InterpretedInvokeDynamic2AotTest.java: check calls from interpreted to aot code using invokedynamic
compiler/aot/calls/fromInterpreted/InterpretedInvokeInterface2AotTest.java: check calls from interpreted to aot code using invokeinterface
compiler/aot/calls/fromInterpreted/InterpretedInvokeSpecial2AotTest.java: check calls from interpreted to aot code using invokespecial
compiler/aot/calls/fromInterpreted/InterpretedInvokeStatic2AotTest.java: check calls from interpreted to aot code using invokestatic
compiler/aot/calls/fromInterpreted/InterpretedInvokeVirtual2AotTest.java: check calls from interpreted to aot code using invokevirtual
compiler/aot/calls/fromNative/NativeInvokeSpecial2AotTest.java: check calls from native to aot code using invokespecial
compiler/aot/calls/fromNative/NativeInvokeStatic2AotTest.java: check calls from native to aot code using invokestatic
compiler/aot/calls/fromNative/NativeInvokeVirtual2AotTest.java: check calls from native to aot code using invokevirtual
compiler/aot/cli/DisabledAOTWithLibraryTest.java: check if providing aot library with aot disabled is handled properly
compiler/aot/cli/MultipleAOTLibraryTest.java: check if multiple aot libraries are loaded successfully
compiler/aot/cli/SingleAOTLibraryTest.java: check if single aot library is loaded successfully
compiler/aot/cli/SingleAOTOptionTest.java: check if specifying only one aot option handled properly
compiler/aot/cli/jaotc/AtFileTest.java: check at-file jaotc support
compiler/aot/cli/jaotc/CompileAbsoluteDirectoryTest.java: check jaotc can compile directory with classes where directory is specified by absolute path
compiler/aot/cli/jaotc/CompileClassTest.java: check jaotc can compile class
compiler/aot/cli/jaotc/CompileClassWithDebugTest.java: check that jaotc can compile a class with a --debug flag
compiler/aot/cli/jaotc/CompileDirectoryTest.java: check jaotc can compile directory with classes where directory is specified by relative path
compiler/aot/cli/jaotc/CompileJarTest.java: check jaotc can compile jar
compiler/aot/cli/jaotc/CompileModuleTest.java: check jaotc can compile module
compiler/aot/cli/jaotc/IgnoreErrorsTest.java:
compiler/aot/cli/jaotc/ListOptionTest.java: check jaotc can use --compile-commands option successfully and respective compileCommand is applied
compiler/aot/cli/jaotc/ListOptionWrongFileTest.java: check jaotc can handle incorrect --compile-commands file
compiler/aot/fingerprint/SelfChanged.java: AOT methods should be swept if a super class has changed.
compiler/aot/fingerprint/SelfChangedCDS.java: AOT methods should be swept if a super class has changed (with CDS).
compiler/aot/fingerprint/SuperChanged.java: AOT methods should be swept if a super class has changed.
compiler/aot/verification/ClassAndLibraryNotMatchTest.java: check if class and aot library are properly bound to each other
compiler/aot/verification/vmflags/NotTrackedFlagTest.java: check if some not aot-related vm flag change doesn't affect aot library loading
compiler/aot/verification/vmflags/TrackedFlagTest.java: check if tracked flag UseCompressedOops is controlled properly
compiler/jvmci/JVM_GetJVMCIRuntimeTest.java:
compiler/jvmci/SecurityRestrictionsTest.java:
compiler/jvmci/TestJVMCIPrintProperties.java: Ensure -XX:-JVMCIPrintProperties can be enabled and successfully prints expected output to stdout.
compiler/jvmci/compilerToVM/AllocateCompileIdTest.java:
compiler/jvmci/compilerToVM/AsResolvedJavaMethodTest.java:
compiler/jvmci/compilerToVM/CollectCountersTest.java:
compiler/jvmci/compilerToVM/DebugOutputTest.java:
compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java:
compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java:
compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java:
compiler/jvmci/compilerToVM/GetBytecodeTest.java:
compiler/jvmci/compilerToVM/GetClassInitializerTest.java:
compiler/jvmci/compilerToVM/GetExceptionTableTest.java:
compiler/jvmci/compilerToVM/GetImplementorTest.java:
compiler/jvmci/compilerToVM/GetLineNumberTableTest.java:
compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java:
compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java:
compiler/jvmci/compilerToVM/GetStackTraceElementTest.java:
compiler/jvmci/compilerToVM/GetSymbolTest.java:
compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java:
compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java:
compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java:
compiler/jvmci/compilerToVM/HasNeverInlineDirectiveTest.java:
compiler/jvmci/compilerToVM/IsCompilableTest.java:
compiler/jvmci/compilerToVM/IsMatureTest.java:
compiler/jvmci/compilerToVM/IsMatureVsReprofileTest.java:
compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java: Testing compiler.jvmci.CompilerToVM.lookupKlassInPool method
compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java:
compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java:
compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java:
compiler/jvmci/compilerToVM/LookupNameInPoolTest.java:
compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java:
compiler/jvmci/compilerToVM/LookupTypeTest.java:
compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java:
compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java:
compiler/jvmci/compilerToVM/ReadConfigurationTest.java:
compiler/jvmci/compilerToVM/ReprofileTest.java:
compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java:
compiler/jvmci/compilerToVM/ResolveMethodTest.java:
compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java:
compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java: Testing compiler.jvmci.CompilerToVM.resolveTypeInPool method
compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java:
compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java:
compiler/jvmci/errors/TestInvalidCompilationResult.java:
compiler/jvmci/errors/TestInvalidDebugInfo.java:
compiler/jvmci/errors/TestInvalidOopMap.java:
compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.java:
compiler/jvmci/events/JvmciNotifyInstallEventTest.java:
compiler/jvmci/events/JvmciShutdownEventTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/MaxOopMapStackOffsetTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/NativeCallTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java:
compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java:
compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java:
compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java:
compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java:
compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java:
compiler/jvmci/meta/StableFieldTest.java:
runtime/InvocationTests/invocationGraalTests.java: Run invocation tests against Graal compiler
-------------------------------------
Comments
jdk13 backport request I would like to have the patch in openjdk13 as well. JDK13 is the only version affected by the bug as of this moment. The patch didn'y apply cleanly. Review - https://git.openjdk.java.net/jdk13u-dev/pull/5
27-10-2020

Seems like a regression caused by JDK-8207812, linking up.
21-10-2019

URL: https://hg.openjdk.java.net/jdk/jdk/rev/b7465577320f User: dholmes Date: 2019-10-21 01:10:33 +0000
21-10-2019

RFR: https://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2019-October/036459.html
18-10-2019