summary refs log tree commit diff
path: root/pkgs/development/libraries/boehm-gc
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-11-06 22:03:18 -0800
committerAdam Joseph <adam@westernsemico.com>2022-11-06 22:11:48 -0800
commit06ecc51368bb4181c313dd6fea1bc573b9b9a033 (patch)
tree76b21a11a2f02f8de494123596faf1dea94f0fba /pkgs/development/libraries/boehm-gc
parent34c4365854efb3bd47e4be041e2b5b235990524e (diff)
downloadnixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar.gz
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar.bz2
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar.lz
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar.xz
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.tar.zst
nixpkgs-06ecc51368bb4181c313dd6fea1bc573b9b9a033.zip
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.
Diffstat (limited to 'pkgs/development/libraries/boehm-gc')
-rw-r--r--pkgs/development/libraries/boehm-gc/default.nix11
1 files changed, 11 insertions, 0 deletions
diff --git a/pkgs/development/libraries/boehm-gc/default.nix b/pkgs/development/libraries/boehm-gc/default.nix
index 513ae50298e..1a5924fbf55 100644
--- a/pkgs/development/libraries/boehm-gc/default.nix
+++ b/pkgs/development/libraries/boehm-gc/default.nix
@@ -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);