Commit 06ecc513 authored by Adam Joseph's avatar Adam Joseph
Browse files

boehmgc: disable SOFT_VDB on powerpc64le for version 8.2.2

Upstream has not yet fixed the bug:

  https://github.com/ivmai/bdwgc/issues/376
  https://github.com/ivmai/bdwgc/issues/479

However there is a recommended workaround:

  https://github.com/ivmai/bdwgc/issues/479#issuecomment-1279687537

This adds `CFLAGS_EXTRA=-DNO_SOFT_VDB` to the `makeFlags`, which
prevents direct accesses to `/proc` being used for tracking dirtied
pages (which must be rescanned):

  https://github.com/ivmai/bdwgc/blob/54522af853de28f45195044dadfd795c4e5942aa/include/private/gcconfig.h#L741

The collector will fall back to using mprotect() to trigger page
faults on writes to clean pages and maintain its own dirty bits,
which is slightly less efficient but (in this case) more reliable.
Unreliable page-dirtiness bits can lead to use-after-free()
corruption; this is not a situation where disabling the tests is a
good idea.
parent 34c43658
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -30,6 +30,17 @@ stdenv.mkDerivation (finalAttrs: {
  ++ lib.optional enableMmap "--enable-mmap"
  ++ lib.optional enableLargeConfig "--enable-large-config";

  # this stanza can be dropped when a release fixes this issue:
  # https://github.com/ivmai/bdwgc/issues/376
  makeFlags = lib.optionals (stdenv.hostPlatform.isPower64 &&
                             lib.versionAtLeast finalAttrs.version "8.2.2")
    [
      # do not use /proc primitives to track dirty bits; see:
      # https://github.com/ivmai/bdwgc/issues/479#issuecomment-1279687537
      # https://github.com/ivmai/bdwgc/blob/54522af853de28f45195044dadfd795c4e5942aa/include/private/gcconfig.h#L741
      "CFLAGS_EXTRA=-DNO_SOFT_VDB"
    ];

  # `gctest` fails under emulation on aarch64-darwin
  doCheck = !(stdenv.isDarwin && stdenv.isx86_64);