Use native x86_64 instructions on x32
authorDebian Haskell Group <pkg-haskell-maintainers@lists.alioth.debian.org>
Sat, 24 Sep 2022 07:06:11 +0000 (08:06 +0100)
committerIlias Tsitsimpis <iliastsi@debian.org>
Sat, 24 Sep 2022 07:06:11 +0000 (08:06 +0100)
This patch enables a few native 64-bit integer instructions
on x32 which are available on this architecture despite using
32-bit pointers. These instructions are present on x86_64 but
not on x86 and ghc checks the size of (void *) to determine
that. This method fails on x32 since despite using 32-bit
pointers and hence sizeof(void *) == 4, it still uses the
full x86_64 instruction set and software-emulated variants
of the aforementioned 64-bit integer instructions are
therefore not present in the toolchain which will make ghc
fail to build on x32.
See: https://ghc.haskell.org/trac/ghc/ticket/11571

Gbp-Pq: Name x32-use-native-x86_64-insn.patch

rts/RtsSymbols.c

index 130f0b2ca34a7b02b79c49cce8be32eab11df465..91dbed9ec54da13630b65987930702794e9cc408 100644 (file)
@@ -1010,7 +1010,7 @@ extern char **environ;
 
 
 // 64-bit support functions in libgcc.a
-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
+#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) && !(defined(__x86_64__) && defined(__ILP32__))
 #define RTS_LIBGCC_SYMBOLS                             \
       SymI_NeedsProto(__divdi3)                        \
       SymI_NeedsProto(__udivdi3)                       \