Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput. Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.
Other
3.28k
stars
721
forks
source link
Non-fatal assert triggered in sanity.functional with JITServer and AOT cache during ROM class packing #20046
I encountered this when running sanity.functional manually with JITServer+AOT cache (with an appropriate JITServer instance started up manually on the side) with a debug compiler configuration to test the code I wrote to ensure that methods are fully invalidated in the JITServer AOT deserializer's cache. The failure should be unrelated to those changes. The failure was in cmdLineTester_J9securityTests_0, which was the first non-excluded test that was run - I stopped the suite after that. Console log:
and occurred when the JITServerAOTDeserializer::onClassLoad() method tried to compute the "deterministic hash" of a runtime-generated ROM class. Looking at the resulting core, the name of that ROM class was "java/lang/SecurityManager$$Lambda/0x0000000000000000".
This crash goes away in that test component when I specify -Xjit:aotCacheDisableGeneratedClassSupport. I'm also moderately sure that I ran this test suite with a debug build at least once when I was testing the ignore-local-SCC code and this assert did not fire, so it's possible that something about https://github.com/eclipse-openj9/openj9/pull/19549 has caused this assumption to be violated. It could be something related to the name truncation that happens when computing the deterministically-packed representation of a runtime-generated class. I haven't looked into it in detail yet.
I encountered this when running
sanity.functional
manually with JITServer+AOT cache (with an appropriate JITServer instance started up manually on the side) with a debug compiler configuration to test the code I wrote to ensure that methods are fully invalidated in the JITServer AOT deserializer's cache. The failure should be unrelated to those changes. The failure was incmdLineTester_J9securityTests_0
, which was the first non-excluded test that was run - I stopped the suite after that. Console log:The assert is here:
https://github.com/eclipse-openj9/openj9/blob/193c5a4ffbde02471a09273d8a323cb4b327b721/runtime/compiler/control/JITServerHelpers.cpp#L332
and occurred when the
JITServerAOTDeserializer::onClassLoad()
method tried to compute the "deterministic hash" of a runtime-generated ROM class. Looking at the resulting core, the name of that ROM class was"java/lang/SecurityManager$$Lambda/0x0000000000000000"
.This crash goes away in that test component when I specify
-Xjit:aotCacheDisableGeneratedClassSupport
. I'm also moderately sure that I ran this test suite with a debug build at least once when I was testing the ignore-local-SCC code and this assert did not fire, so it's possible that something about https://github.com/eclipse-openj9/openj9/pull/19549 has caused this assumption to be violated. It could be something related to the name truncation that happens when computing the deterministically-packed representation of a runtime-generated class. I haven't looked into it in detail yet.