You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1.2 KiB
27 lines
1.2 KiB
Description: Use native x86_64 instructions on x32 |
|
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 |
|
. |
|
|
|
Index: ghc-8.0.2/rts/RtsSymbols.c |
|
=================================================================== |
|
--- ghc-8.0.2.orig/rts/RtsSymbols.c |
|
+++ ghc-8.0.2/rts/RtsSymbols.c |
|
@@ -857,7 +857,7 @@ |
|
|
|
|
|
// 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) \
|
|
|