Review Request (M) 7187554: JSR 292: JVMTI PopFrame needs to handle appendix arguments

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Tue Aug 6 15:28:00 PDT 2013


Coleen,

Thank you a lot for reviewing!

At least, one mlvm test is reliably passing with this fix:
   vm/mlvm/indy/func/jvmti/stepBreakPopReturn

It is possible that the fix positively impacts more tests but the 
picture is not
clear yet as it is masked by a couple of more jsr-292 related jvmti and 
test bugs.

Thanks,
Serguei

On 8/6/13 2:52 PM, Coleen Phillimore wrote:
>
> Serguei,
>
> This looks good.  It's a lot cleaner than I thought it'd be.  Do more 
> of these nsk.mlvm tests pass with this change?
>
> Thanks!
> Coleen
>
> On 07/30/2013 01:00 PM, serguei.spitsyn at oracle.com wrote:
>> The updated webrev:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.3/ 
>>
>>
>> Thanks,
>> Serguei
>>
>> On 7/29/13 10:11 PM, David Holmes wrote:
>>> Hi Serguei,
>>>
>>> I'm fine with restoring to what was in the first webrev.
>>>
>>> Further trimming of the JVMTI code is something the embedded folk 
>>> could look at. It may not be worthwhile.
>>>
>>> Thanks,
>>> David
>>>
>>> On 30/07/2013 3:05 PM, serguei.spitsyn at oracle.com wrote:
>>>> On 7/29/13 8:22 PM, David Holmes wrote:
>>>>> On 30/07/2013 10:34 AM, serguei.spitsyn at oracle.com wrote:
>>>>>> Christian and David,
>>>>>>
>>>>>> Thank you for the quick review and comments!
>>>>>>
>>>>>> This is a new version of webrev:
>>>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.2 
>>>>>>
>>>>>>
>>>>>
>>>>> Sorry. You need that guard after all - at least you do if you 
>>>>> continue
>>>>> to use it in interpreterRuntime - otherwise member_name_arg_or_null
>>>>> will not exist:
>>>>>
>>>>>   __ call_VM(rax, CAST_FROM_FN_PTR(address,
>>>>> InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
>>>>>
>>>> You are right, nice catch again.
>>>> Probably, it was the reason, I did not remove the #if/#endif in the
>>>> first place. :)
>>>>
>>>>> I'm a little surprised that the assembly code does not have that 
>>>>> whole
>>>>> section guarded with INCLUDE_JVMTI - perhaps it should?
>>>> It should.
>>>> But it can be non-trivial because of other dependencies like the 
>>>> above.
>>>> To make it right, both _remove_activation_preserving_args_entry and
>>>> generate_earlyret_entry_for
>>>> must be isolated with #if INCLUDE_JVMTI.
>>>> Then more files have to be involved in this chain of changes:
>>>>    interpreter/templateInterpreter.hpp
>>>>    interpreter/templateInterpreter.hpp
>>>>    memory/universe.hpp
>>>>    memory/universe.cpp
>>>>    code/codeCache.hpp
>>>>    code/codeCache.cpp
>>>>    . . . etc ..
>>>>
>>>> Please, note, that the HOTSWAP macro is used in many places as well.
>>>> I'm not sure we still need it, so that another decision is needed 
>>>> for it.
>>>>
>>>> So, it seems that this kind of clean up is going far beyond my fix.
>>>> My suggestion is to restore the "#if INCLUDE_JVMTI" in 3
>>>> platform-dependent files as it was in the webrev v1.
>>>> I'm a little bit reluctant to open another clean-up bug for this issue
>>>> but maybe it is needed.
>>>> Please, let me know if you are comfortable with this solution.
>>>>
>>>> Thanks,
>>>> Serguei
>>>>
>>>>>
>>>>> Run this through a JPRT test build for productEmb to check that the
>>>>> minimal VM builds ok.
>>>>>
>>>>> David
>>>>> -----
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>>
>>>>>> On 7/28/13 9:11 PM, David Holmes wrote:
>>>>>>> Hi Serguei,
>>>>>>>
>>>>>>> On 26/07/2013 10:14 AM, serguei.spitsyn at oracle.com wrote:
>>>>>>>>
>>>>>>>> Please, review the fix for:
>>>>>>>>    bug: http://bugs.sun.com/view_bug.do?bug_id=7187554
>>>>>>>>    jbs: https://jbs.oracle.com/bugs/browse/JDK-7187554
>>>>>>>>
>>>>>>>> Open webrev:
>>>>>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.1 
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> In the templateInterpreter code why did you put this guard on 
>>>>>>> your new
>>>>>>> code (from x86_32 version):
>>>>>>>
>>>>>>> 1923 #if INCLUDE_JVMTI
>>>>>>>
>>>>>>> when the whole chunk of code this is situated in is specifically 
>>>>>>> for
>>>>>>> JVMTI support
>>>>>>>
>>>>>>> 1824   //
>>>>>>> 1825   // JVMTI PopFrame support
>>>>>>> 1826   //
>>>>>>>
>>>>>>> ???
>>>>>>>
>>>>>>> David
>>>>>>> -----
>>>>>>>
>>>>>>>>
>>>>>>>> Summary:
>>>>>>>>    Restore the appendix argument of a polymorphic intrinsic call
>>>>>>>>    needed for a invokestatic re-execution after JVMTI PopFrame().
>>>>>>>>
>>>>>>>> Description
>>>>>>>>    When JVMTI's PopFrame removes a frame that was called via a 
>>>>>>>> call
>>>>>>>> site
>>>>>>>> that
>>>>>>>>    takes an appendix and that call site is reexecuted the 
>>>>>>>> appendix is
>>>>>>>> not on
>>>>>>>>    the stack anymore because it got removed by the adapter.
>>>>>>>>    This fix is to detect such a case and push the appendix on the
>>>>>>>> stack
>>>>>>>> again before reexecution.
>>>>>>>>
>>>>>>>>
>>>>>>>> Testing:
>>>>>>>>    UTE tests - in progress: vm.mlvm.testlist, nsk.jvmti.testlist,
>>>>>>>> nsk.jdi.testlist
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Serguei
>>>>>>
>>>>
>>
>



More information about the hotspot-dev mailing list