From 06ecc51368bb4181c313dd6fea1bc573b9b9a033 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Sun, 6 Nov 2022 22:03:18 -0800 Subject: 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. --- pkgs/development/libraries/boehm-gc/default.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'pkgs/development/libraries/boehm-gc') 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); -- cgit 1.4.1