diff options
-rw-r--r-- | rts/rts.cabal.in | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in index 872a9e3493..9c698b09a3 100644 --- a/rts/rts.cabal.in +++ b/rts/rts.cabal.in @@ -400,6 +400,8 @@ library if os(osx) ld-options: "-Wl,-search_paths_first" + -- See Note [fd_set_overflow] + "-Wl,-U,___darwin_check_fd_set_overflow" if !arch(x86_64) && !arch(aarch64) ld-options: -read_only_relocs warning @@ -560,3 +562,43 @@ library posix/Signals.c posix/TTY.c -- posix/*.c -- we do not want itimer + +-- Note [fd_set_overflow] +-- ~~~~~~~~~~~~~~~~~~~~~~ +-- In this note is the very sad tale of __darwin_fd_set_overflow. +-- The 8.10.5 release was broken because it was built in an environment +-- where the libraries were provided by XCode 12.*, these libraries introduced +-- a reference to __darwin_fd_set_overflow via the FD_SET macro which is used in +-- Select.c. Unfortunately, this symbol is not available with XCode 11.* which +-- led to a linker error when trying to link anything. This is almost certainly +-- a bug in XCode but we still have to work around it. + +-- Undefined symbols for architecture x86_64: +-- "___darwin_check_fd_set_overflow", referenced from: +-- _awaitEvent in libHSrts.a(Select.o) +-- ld: symbol(s) not found for architecture x86_64 + +-- One way to fix this is to upgrade your version of xcode, but this would +-- force the upgrade on users prematurely. Fortunately it also seems safe to pass +-- the linker option "-Wl,-U,___darwin_check_fd_set_overflow" because the usage of +-- the symbol is guarded by a guard to check if it's defined. + +-- __header_always_inline int +-- __darwin_check_fd_set(int _a, const void *_b) +-- { +-- if ((uintptr_t)&__darwin_check_fd_set_overflow != (uintptr_t) 0) { +--#if defined(_DARWIN_UNLIMITED_SELECT) || defined(_DARWIN_C_SOURCE) +-- return __darwin_check_fd_set_overflow(_a, _b, 1); +--#else +-- return __darwin_check_fd_set_overflow(_a, _b, 0); +--#endif +-- } else { +-- return 1; +-- } +--} + +-- Across the internet there are many other reports of this issue +-- See: https://github.com/mono/mono/issues/19393 +-- , https://github.com/sitsofe/fio/commit/b6a1e63a1ff607692a3caf3c2db2c3d575ba2320 + +-- The issue was originally reported in #19950 |