RFR: 8309663: test fails "assert(check_alignment(result)) failed: address not aligned: 0x00000008baadbabe"

Serguei Spitsyn sspitsyn at openjdk.org
Wed Jun 14 09:10:59 UTC 2023


On Wed, 14 Jun 2023 01:02:09 GMT, Alex Menkov <amenkov at openjdk.org> wrote:

> If virtual thread has frames in stackChunks, need to apply load barriers before processing nmethods (javaVFrame::locals() and javaVFrame::expressions() do it internally)
> 
> Testing: tier1-tier5 (still in progress);
> 400 runs of VThreadStackRefTest.java test on linux-x64 and linux-x64-debug with "-XX:+UseZGC -Xcomp -XX:-TieredCompilation"

src/hotspot/share/prims/jvmtiTagMap.cpp line 2325:

> 2323:         // Need to apply load barriers for unmounted vthreads.
> 2324:         nmethod* nm = jvf->cb()->as_nmethod();
> 2325:         nm->run_nmethod_entry_barrier();

This looks good in general.
However, I'm looking at the `stackChunkOopDesc::do_barriers0()` implementation and wonder if a similar trick is needed for interpreter frames (to support `Class Redefinition`):

template <stackChunkOopDesc::BarrierType barrier, ChunkFrames frame_kind, typename RegisterMapT>
void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream<frame_kind>& f, const RegisterMapT* map) {
  // We need to invoke the write barriers so as not to miss oops in old chunks that haven't yet been concurrently scanned
  assert (!f.is_done(), "");

  if (f.is_interpreted()) {
    Method* m = f.to_frame().interpreter_frame_method();
    // Class redefinition support
    m->record_gc_epoch();
  } else if (f.is_compiled()) {
    nmethod* nm = f.cb()->as_nmethod();
    // The entry barrier takes care of having the right synchronization
    // when keeping the nmethod alive during concurrent execution.
    nm->run_nmethod_entry_barrier();
    // There is no need to mark the Method, as class redefinition will walk the
    // CodeCache, noting their Methods
  }
  . . .

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14460#discussion_r1229273861


More information about the hotspot-gc-dev mailing list