Index | Thread | Search

From:
Evan Silberman <evan@jklol.net>
Subject:
Re: -current Haskell ports aborting with SIGILL
To:
Stuart Henderson <stu@spacehopper.org>
Cc:
Greg Steuck <greg@nest.cx>, Greg Steuck <gnezdo@openbsd.org>, ports@openbsd.org, Antoine Jacoutot <ajacoutot@bsdfrog.org>
Date:
Sun, 18 Feb 2024 13:58:11 -0800

Download raw body.

Thread
Stuart Henderson <stu@spacehopper.org> wrote:
> This is probably worth a try. I've asked if upstream can update it

Hi Stuart,

Unclear if necessary, but not sufficient. Turns out there's one more
unconditional AVX512 check in text's own C code, cbits/measure_off.c:

#if !((defined(__apple_build_version__) && __apple_build_version__ <= 10001145) \
      || (defined(__clang_major__) && __clang_major__ <= 6)) && !defined(__STDC_NO_ATOMICS__)
#define COMPILER_SUPPORTS_AVX512
#endif

Undefing this gets me good results:

text $ cabal repl
Build profile: -w ghc-9.2.7 -O1
In order, the following will be built (use -v for more details):
 - text-2.0.2 (lib) (first run)
Preprocessing library for text-2.0.2..
GHCi, version 9.2.7: https://www.haskell.org/ghc/  :? for help
[ 1 of 46] Compiling Data.Text.Array  ( src/Data/Text/Array.hs, interpreted )
 [ snip ]
 [46 of 46] Compiling Data.Text.Lazy.IO ( src/Data/Text/Lazy/IO.hs, interpreted )
Ok, 46 modules loaded.
ghci> take 1 $ pack "AA"
"A"

whew.

I _think_ the right patch for lang/ghc looks like this but I haven't
tested this exact thing in situ.

blob - /dev/null
blob + 282c4467d3eed9211a7b3c505248569d342863b4 (mode 644)
--- /dev/null
+++ lang/ghc/patches/patch-libraries_text_cbits_measure_off_c
@@ -0,0 +1,13 @@
+Disable AVX512 instructions, not supported on OpenBSD
+Index: libraries/text/cbits/measure_off.c
+--- libraries/text/cbits/measure_off.c.orig
++++ libraries/text/cbits/measure_off.c
+@@ -34,7 +34,7 @@
+   Disable AVX-512 instructions as they are most likely not supported
+   on the hardware running clang-6.
+ */
+-#if !((defined(__apple_build_version__) && __apple_build_version__ <= 10001145) \
++#if !defined(__OpenBSD__) && !((defined(__apple_build_version__) && __apple_build_version__ <= 10001145) \
+       || (defined(__clang_major__) && __clang_major__ <= 6)) && !defined(__STDC_NO_ATOMICS__)
+ #define COMPILER_SUPPORTS_AVX512
+ #endif