JavaThread::set_interp_only_mode may be called while a thread is blocked waiting for a JIT compilation to complete. This happens often with -Xcomp. The VM will enter the compiled code once the compilation finishes. As a consequence, the assumption for interp_only_mode does not hold, i.e., the VM will still dispatch to compiled code for threads that are in interp_only_mode. Assertions based on this assumption will fail. For example, vmTestbase/nsk/jdi tests fail on libgraal at this assertion: https://github.com/openjdk/jdk/blob/8817ba450c0eac6f7c1ff19b16c11a26ff2ed109/src/hotspot/share/prims/jvmtiThreadState.cpp#L867
To reproduce, use the following command:
make test TEST_VM_OPTS="-Xcomp -XX:-TieredCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler" TEST=vmTestbase/nsk/jdi/VirtualMachine/setDefaultStratum/setDefaultStratum003/setDefaultStratum003.java JDK_UNDER_TEST=/path/to/libgraal_build