[jdk19] RFR: 8288949: serviceability/jvmti/vthread/ContStackDepthTest/ContStackDepthTest.java failing [v2]

Serguei Spitsyn sspitsyn at openjdk.org
Sat Jul 2 07:20:44 UTC 2022


On Sat, 25 Jun 2022 01:23:47 GMT, Ron Pressler <rpressler at openjdk.org> wrote:

>> Please review the following bug fix:
>> 
>> `Continuation.enterSpecial` is a generated special nmethod (albeit not a Java method), with a well-known frame layout that calls `Continuation.enter`.
>> 
>> Because it is compiled, it resolves the call to `Continuation.enter` to its compiled version, if available. But this results in the compiled `Continuation.enter` being called even when the thread is in interp_only_mode.
>> 
>> This change does three things:
>> 
>> 1. When entering interp_only_mode, `Continuation::set_cont_fastpath_thread_state` will clear enterSpecial's resolved callsite to Continuation.enter.
>> 2. In interp_only_mode, `SharedRuntime::resolve_static_call_C` will return `Continuation.enter`'s c2i entry rather than `verified_code_entry`.
>> 3. In interp_only_mode, the c2i stub will not patch the callsite.
>> 
>> This fix isn't perfect, because a different thread, not in interp_only_mode, might patch the call. A longer-term solution is to create an "interpreted" version of `enterSpecial` and supporting an ad-hoc deoptimization. See https://bugs.openjdk.org/browse/JDK-8289128
>> 
>> 
>> Passes tiers 1-4 and Loom tiers 1-5.
>
> Ron Pressler has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Revert "Remove outdated comment"
>   
>   This reverts commit 8f571d76e34bc64ceb31894184fba4b909e8fbfe.

src/hotspot/share/runtime/sharedRuntime.cpp line 1582:

> 1580:     // but in interp_only_mode we need to go to the interpreted entry
> 1581:     // The c2i won't patch in this mode -- see fixup_callers_callsite
> 1582:     return callee_method->get_c2i_entry();

Nit: Dots at the end of lines 1580-1581 would be nice to follow comments style in this file.

src/hotspot/share/runtime/sharedRuntime.cpp line 2018:

> 2016:     if (JavaThread::current()->is_interp_only_mode())
> 2017:       return;
> 2018:   }

Nit - micro simplification:

  if (nm->method()->is_continuation_enter_intrinsic() && JavaThread::current()->is_interp_only_mode()) {
      return;
  }

-------------

PR: https://git.openjdk.org/jdk19/pull/66


More information about the hotspot-compiler-dev mailing list