JDK-8315488 : SA ciReplay support is no longer up-to-date with hotspot ciReplay support
  • Type: Bug
  • Component: hotspot
  • Sub-Component: svc-agent
  • Affected Version: 18,19,20,21,22
  • Priority: P4
  • Status: New
  • Resolution: Unresolved
  • Submitted: 2023-08-31
  • Updated: 2023-09-05
Related Reports
Relates :  
Relates :  
Relates :  
Description
There have been a number of changes to the ciReplay support in hotspot that have not been implemented in SA (mostly done in JDK 18).

One of the issues is that hotspot now produces "version 2" ciReplay files. This was done by JDK-8308672, although the requirement for this change is due to changes made to the ciReplay support by JDK-8254108, which changed the "compile" entry by adding another integer to store late inlining information:

https://github.com/openjdk/jdk/commit/38802ad56a31efc90733cb75ea27f019e2c4f5a4#diff-da5b993c1f0b3e724fb90c155d489ca17045b018ba17477b6cc50e387147290fL723

The version 2 changes are documented here:
https://github.com/openjdk/jdk/blob/20e94784c9f7c30e95550c72aedb5e986a153114/src/hotspot/share/ci/ciReplay.hpp#L132-L137 

As a result of now having "version 2" at the start of the ciReply file, compiler/ciReplay/TestSAServer.java fails:

 Warning: replay files are not equal
1: JvmtiExport can_access_local_variables 0
2: version 2
Warning: replay files are not equal
1: JvmtiExport can_hotswap_or_post_breakpoint 0
2: JvmtiExport can_access_local_variables 0
Warning: replay files are not equal
1: JvmtiExport can_post_on_exceptions 0
2: JvmtiExport can_hotswap_or_post_breakpoint 0 

Even one Warning results in the testing failing. As you can see, the addition of "version 2" as the first line of the hotspot ciReplay file causes the test to get out of sync and complain about every line being different.

Note that this test is already problem listed due to JDK-8029528, but if you remove it from the problem list then it fails because "version 2" is not in the SA generated ciReplay file. hotspot still supports reading in pre "version 2" files, so it still might work with SA generated replay files, but that still needs to be tested. This particular test verifies that hotspot and SA generate the same ciReplay file, which they no longer do.

Simply making the test ignore the "version 2" line helps keep the test in sync and greatly reduces the number of warnings, but there have been other changes in hotspot that result in the hotspot and SA generated files still not being the same. Here are a few:

Warning: replay files are not equal
1: ciMethod compiler/ciReplay/CiReplayBase$TestMain test (I)V 3328 0 6784 0 2728
2: ciMethod compiler/ciReplay/CiReplayBase$TestMain test (I)V 3328 0 6784 0 -1

Warning: replay files are not equal
1: instanceKlass compiler/ciReplay/CiReplayBase$TestMain$$Lambda+0x000014d70a001228
2: instanceKlass @bci compiler/ciReplay/CiReplayBase$TestMain test (I)V 1 <appendix> argL0 ; # compiler/ciReplay/CiReplayBase$TestMain$$Lambda+0x000014d70a001228

Warning: replay files are not equal
1: staticfield java/lang/invoke/LambdaForm$MH+0x000014d70a001800 _D_0 Ljava/lang/invoke/LambdaForm; java/lang/invoke/LambdaForm
2: staticfield @bci compiler/ciReplay/CiReplayBase$TestMain main ([Ljava/lang/String;)V 0 <appendix> form vmentry <vmtarget> ; _D_0 Ljava/lang/invoke/LambdaForm; java/lang/invoke/LambdaForm 

This is due to numerous other ciReplay changes that are in hotspot but not SA. It is believed that most of these changes should are linked to JDK-8254106 and/or labeled with 'ci-replay'. 

https://bugs.openjdk.org/issues/?jql=labels%20%3D%20ci-replay