RFR (XS): 8046018: JVMTI Spec: can_redefine_any_class capability spec is inconsistent
David Holmes
david.holmes at oracle.com
Tue May 21 22:58:12 UTC 2019
Hi Dan,
On 22/05/2019 2:34 am, Daniel D. Daugherty wrote:
> On 5/21/19 2:19 AM, serguei.spitsyn at oracle.com wrote:
>> Hi guys,
>>
>> I've found one more fragment in the IsModifiableClass spec which has
>> to be fixed.
>>
>>
>> Updated webrev v2:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8046018-jvmti-cap-spec.2/
>>
>
> src/hotspot/share/prims/jvmti.xml
> No comments.
>
> Looks like there was a specific update to the spec to allow
> can_redefine_any_class
> to include retransform (in addition to redefine):
>
> 1.1.82
> 13 February 2006 Doc fixes: update can_redefine_any_class to include
> retransform. Clarify that exception events cover all Throwables. In
> GetStackTrace, no test is done for start_depth too big if start_depth is
> zero, Clarify fields reported in Primitive Field Callback -- static vs
> instance. Repair confusing names of heap types, including callback
> names. Require consistent usage of stack depth in the face of thread
> launch methods. Note incompatibility of JVM TI memory management with
> other systems.
>
> I can't tell if you've chased down that change and why you no longer
> think that change is necessary.
>
> I'm okay with the change, but I think you have more research to do here.
I already chased that down and mentioned it in the CSR. It was done under:
https://bugs.openjdk.java.net/browse/JDK-6328530
Unfortunately I misread the original bug description. In relation to
can_redefine_any_class it states:
A more precise definition would be:
Can retransform or redefine any non-primitive non-array class.
It appears to me that they did consider can_redefine_any_class to be a
"super" capability that could be added on top of can_redefine_classes to
extend it to "any" class; or on top of can_retransform_classes to extend
it to "any" class. If so the name choice was unfortunate.
Further it seems the implementation never checked this anyway.
David
> Dan
>
>
>> Specdiff:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8046018-jvmti-cap-spec.2/jvmti-specdiff/
>>
>>
>>
>> Enhancement:
>> https://bugs.openjdk.java.net/browse/JDK-8046018
>>
>> Related CSR:
>> https://bugs.openjdk.java.net/browse/JDK-8223915
>>
>>
>> Thanks,
>> Serguei
>>
>>
>> On 5/20/19 21:43, serguei.spitsyn at oracle.com wrote:
>>> Hi David,
>>>
>>> Thank you for looking at this!
>>>
>>>
>>> On 5/20/19 20:53, David Holmes wrote:
>>>> Hi Serguei,
>>>>
>>>> On 21/05/2019 4:07 am, serguei.spitsyn at oracle.com wrote:
>>>>> Please, review a fix for enhancement:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8046018
>>>>>
>>>>> Related CSR:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8223915
>>>>
>>>> I have some comments on the CSR and about this change overall as to
>>>> me it is not a simple clarification at all, but potentially a
>>>> significant change in the meaning of the capability.
>>>
>>>
>>> I've answered your question in the CSR with my comment.
>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8046018-jvmti-cap-spec.1/
>>>>>
>>>>
>>>> You introduced a typo: modifialble
>>>>
>>>> Assuming this proceeds a similar change is needed earlier:
>>>>
>>>> 7444 <capability id="can_redefine_any_class">
>>>> 7445 If possessed then all classes (except primitive,
>>>> array, and some implementation defined
>>>> 7446 classes) are modifiable (redefine or retransform).
>>>
>>> Good catch, thanks!
>>> I've updated the webrev in place.
>>>
>>> Thanks,
>>> Serguei
>>>
>>>>
>>>> Thanks,
>>>> David
>>>> -----
>>>>
>>>>>
>>>>> Summary:
>>>>>
>>>>> The fix is to make the JVMTI can_redefine_any_class capability
>>>>> spec more inconsistent.
>>>>> It is just about a couple of lines.
>>>>>
>>>>> Thanks,
>>>>> Serguei
>>>
>>
>
More information about the serviceability-dev
mailing list