RFC: 8223915: JVMTI Spec: can_redefine_any_class capability spec is inconsistent
David Holmes
david.holmes at oracle.com
Thu May 16 22:01:25 UTC 2019
On 17/05/2019 2:40 am, serguei.spitsyn at oracle.com wrote:
> Hi David,
>
>
> On 5/16/19 05:33, David Holmes wrote:
>> On 16/05/2019 7:47 pm, serguei.spitsyn at oracle.com wrote:
>>> On 5/16/19 02:25, David Holmes wrote:
>>>> Hi Serguei,
>>>>
>>>> On 16/05/2019 5:22 pm, serguei.spitsyn at oracle.com wrote:
>>>>> **Note #2*
>>>>>
>>>>> Just realized there is an incorrectness in current spec of this
>>>>> capability an_redefine_any_class.
>>>>>
>>>>> This section
>>>>> https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.html#jvmtiCapabilities.can_redefine_any_class
>>>>>
>>>>>
>>>>> tells:
>>>>> "Can modify (retransform or redefine) any modifiable class."
>>>>>
>>>>> It is just wrong. Instead, it should tell:
>>>>> "Can modify (retransform or redefine) any class except primitive,
>>>>> array,
>>>>> and some implementation defined classes."
>>>>
>>>> But that's what it does say by saying "any modifiable class".
>>>
>>> I understand your confusion as I have it as well. :)
>>>
>>> The problem is that in the IsModifiableClass spec the affect of
>>> capability is explained as:
>>> "If possessed then all classes (except primitive, array, and some
>>> implementation
>>> defined classes) are modifiable (redefine or retransform)."
>>>
>>> So that successful possession of this capability makes all classes
>>> (except primitive, etc.) to be modifiable.
>>
>> Yes and so:
>>
>> "Can modify (retransform or redefine) any modifiable class."
>>
>> means
>>
>> "Can modify (retransform or redefine) any class (except primitive, etc)."
>>
>> I'm not seeing the problem. ??
>
>
> The problem is that this statement is confusing:
> "Can modify (retransform or redefine) any modifiable class."
>
> It is because possessing the capability makes ALL the classes (except
> primitive, array, ...) modifiable.
> Which means that there can be non-modifiable classes other than
> primitive, array, and some implementation defined classes."
Again I don't see any issue. All classes except primitive, array, ...
are potentially modifiable but you need the actual capability to be able
to modify them.
David
-----
> Thanks,
> Serguei
>
>>
>> David
>>
>>> Thanks,
>>> Serguei
>>>
>>>
>>>> David
>>>> -----
>>>>
>>>>> In another place it is defined as:
>>>>> "If possessed then all classes (except primitive, array, and some
>>>>> implementation
>>>>> defined classes) are modifiable (redefine or retransform). "
>>>>>
>>>>> For reference, see the section "Optional Features" here:
>>>>> https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.html#IsModifiableClass
>>>>>
>>>>>
>>>>> I'll update the CSR to fix this issue.
>>>>>
>>>>> Thanks,
>>>>> Serguei
>>>>>
>>>>>>
>>>>>> -Alan
>>>>>
>>>
>
More information about the serviceability-dev
mailing list