RFR 8214572: nsk/jvmti/unit/ForceEarlyReturn/earlyretbase should not suspend the thread when the top frame executes JVMCI code
David Holmes
david.holmes at oracle.com
Tue Dec 4 07:32:20 UTC 2018
On 4/12/2018 4:32 pm, serguei.spitsyn at oracle.com wrote:
> Hi David and Dean,
>
> One option is to add a command line option (disabled by default)
> to enable debugging/profiling of the Graal compiler.
> This will help to avoid all these Graal related issues,
> simplify the development and stabilize the tests.
It would simply tests, which could just disable it. But things would
still need to work correctly if enabled - we can't have the current
problems of trying to do an early return, or popframe, from the wrong frame.
> Not sure the Graal developer will like this proposal though. :)
> Also, it is not very clear what level of complexity we add with this.
> For instance, we will have to identify all spots where new checks have
> to be added.
Yes identifying exactly where you needed to check for this is
non-trivial I think.
And this all needs a broader discussion before choosing this kind of
approach.
Cheers,
David
>
> Thanks,
> Serguei
>
>
> On 12/3/18 20:45, David Holmes wrote:
>> On 4/12/2018 5:53 am, dean.long at oracle.com wrote:
>>> On 11/30/18 7:46 PM, JC Beyler wrote:
>>>> Questions because I'm not familiar with JVMCI consequences so not
>>>> really comments on the webrev but so that I know:
>>>> - Is it normaly that you can suspend when you are in a JVMCI frame?
>>>
>>> Yes, because it's just Java code, and we allow all Java code to be
>>> suspended, even Graal and JVMCI code.
>>
>> A choice which can be argued for and against. On the one hand it is
>> nice to be able to try to debug JVMCI code, and on the other this
>> injects execution of Java code into places which to date could not
>> execute Java code and so can "shift" debugging actions from the
>> application/test code, to the JVMCI code. Arguably the
>> application/test code may need to have been more specific about its
>> intent (ie verifying that the debuggee is suspended in the expected
>> frame) and has just "been lucky" but nevertheless the use of JVMCI may
>> disrupt existing code using these facilities.
>>
>>>> will/is there not a better way that we could detect that we are in a
>>>> JVMCI frame?
>>>
>>> We could check the threads's _adjusting_comp_level flag for this
>>> particular case, if we decided that we don't want to be able to debug
>>> JVMCI Java code.
>>>
>>>> Is it always safe to suspend a JVMCI frame?
>>>
>>> That's a good question. If it was grabbing any locks, then
>>> suspending it could cause problems for other threads calling into JVMCI.
>>>
>>> Another solution would be to do adjusting_comp_level() in a separate
>>> thread. So I think there are at least 3 possible solutions:
>>>
>>> 1) Allow JVMCI adjusting_comp_level call to be suspended/debugged
>>> 2) Don't allow it to be suspended/debugged,
>>> a) by running in a separate thread, or
>>> b) don't suspend when _adjusting_comp_level flag is set
>>>
>>> We could introduce a concept of "system Java" code, which, just like
>>> Unix kernel code that is not debuggable without a kernel debugger,
>>> would not normally be debuggable without setting a special flag.
>>
>> That may be something to consider in the future (albeit something that
>> should IMHO have been considered well in the past!) but I think it's
>> out of scope for this particular issue if we want to address this in
>> 12. There's certainly a need, again IMHO, for a broader discussion as
>> to how VM services written in Java should interact with other platform
>> services intended for use with application and library code. I don't
>> know if JVMCI/Graal explicitly hide themselves from agents and
>> retransformation/redefinition/ClassFileLoadHook, or even basic things
>> like event generation (where JVMCI may now generate many more events
>> than previously encountered).
>>
>>> CCing graal-dev alias.
>>
>> As a non-subscriber my reply will get held for moderation.
>>
>> Cheers,
>> David
>> -----
>>
>>> dl
>
More information about the serviceability-dev
mailing list