RFR: 8326936: RISC-V: Shenandoah GC crashes due to incorrect atomic memory operations

MaxXing duke at openjdk.org
Wed Feb 28 10:01:19 UTC 2024


With compressed oops enabled, Shenandoah GC crashes in the concurrent marking phase due to some incorrect atomic memory operations. This resulted in the failure of multiple related tests, including `gc/shenandoah/TestSmallHeap.java`, `gc/metaspace/TestMetaspacePerfCounters.java#Shenandoah-64`, and so on, tested on XuanTie C910 and QEMU.

This failure is related to a GCC bug we recently discovered: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114130.

In detail, there's a pattern in method `ShenandoahHeap::conc_update_with_forwarded`:


if (in_collection_set(obj)) {
  // Dereferences `obj` without explicit null check.
  oop fwd = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
  // Then calls atomic built-in.
  atomic_update_oop(fwd, p, obj);
}


`atomic_update_oop` then compresses `obj` into a 32-bit word and calls the built-in `__atomic_compare_exchange`. The latter produces incorrect assembly that comparing this unsigned 32-bit word with the sign-extended result of `lr.w` instructions.

This bug can be bypassed by adding an explicit null check (like `if (obj && in_collection_set(obj))`), or adding compiler flag `-fno-delete-null-pointer-checks`.

In previous commits, JDK-8316186 removed RISC-V's `PlatformCmpxchg<4>` but left the flag `-fno-delete-null-pointer-checks` enabled. Then JDK-8316893 removed the flag and made the bug visible. This patch adds `PlatformCmpxchg<4>` back.

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

Commit messages:
 - Fix a bug about GCC atomic built-in function.

Changes: https://git.openjdk.org/jdk/pull/18039/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18039&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8326936
  Stats: 44 lines in 1 file changed: 43 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/18039.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18039/head:pull/18039

PR: https://git.openjdk.org/jdk/pull/18039


More information about the hotspot-runtime-dev mailing list