RFR: 8228604: StackMapFrames are missing from redefined class bytes of retransformed classes
Chris Plummer
cjplummer at openjdk.org
Tue Jan 24 04:01:07 UTC 2023
On Tue, 24 Jan 2023 00:16:10 GMT, Alex Menkov <amenkov at openjdk.org> wrote:
> classFileParser drops stack map frames for JDK classes (when verification is not required).
> As a result JvmtiClassFileReconstituter cannot restore the attribute for class redefinition.
> Note that if the class is in CDS archive, the frames are restored from CDS, so this issue affects only JDK classes which are not in CDS.
> This code is old (from "initial load") and I don't understand the reason it was implemented this way.
>
> Testing: tier1-tier6
Copyright needs updating.
test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/MissedStackMapFrames/MissedStackMapFrames.java line 91:
> 89: int frameCount = getStackMapFrameCount(classfileBuffer);
> 90: log(" Has stack map frames: " + frameCount);
> 91: if (frameCount == 0) {
Shouldn't the check also be that the number of frames is the same in the "load" and "retransform" cases?
test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/MissedStackMapFrames/MissedStackMapFrames.java line 107:
> 105: byte[] retransformBytes = retransformBytes(i);
> 106: checkStackMapFrames(cls + "(load)", loadBytes);
> 107: checkStackMapFrames(cls + "(retranform)", retransformBytes);
"retransform"
-------------
Changes requested by cjplummer (Reviewer).
PR: https://git.openjdk.org/jdk/pull/12155
More information about the hotspot-runtime-dev
mailing list