RFR: 8276227: ciReplay: SIGSEGV if classfile for replay compilation is not present after JDK-8275868 [v2]

Dean Long dlong at openjdk.java.net
Tue Nov 2 20:41:11 UTC 2021


On Tue, 2 Nov 2021 10:32:46 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:

>> The fix for [JDK-8275868](https://bugs.openjdk.java.net/browse/JDK-8275868) does not handle the case when the classfile for the method to be replay compiled is not present. This will fail to load the klass. Afterwards, we are trying to access the protection domain of the failed to load klass (i.e. a null pointer) which results in a segmentation fault. The fix is straight forward to only set the new protection domain if the klass was loaded successfully. I additionally changed the code such that we are only trying to set the protection domain when reading the first `instanceKlass` entry. This avoids some potential problems with older replay files where we do not have this additional first entry set by JDK-8275868.
>> 
>> Thanks,
>> Christian
>
> Christian Hagedorn has updated the pull request incrementally with one additional commit since the last revision:
> 
>   add test

Marked as reviewed by dlong (Reviewer).

src/hotspot/share/ci/ciReplay.cpp line 890:

> 888:     // This also ensures that older replay files work.
> 889:     _protection_domain_initialized = true;
> 890: 

I don't see how this helps older replay files.  In fact, it seems like it could make replay for older replay files fail, if the first entry has a different protection domain than the main class.

If we really want to preserve the old behavior of old replay files, then I think we need to add a version number or some other keyword so that we can tell if a replay file is old or not.  However, in my opinion supporting old replay files should not be a goal.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6189


More information about the hotspot-compiler-dev mailing list