Skip to content
Snippets Groups Projects
Commit 4a65c0f8 authored by Matthew Pickering's avatar Matthew Pickering Committed by Marge Bot
Browse files

rts: Pass -Wl,_U,___darwin_check_fd_set_overflow on Darwin

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) {
       return __darwin_check_fd_set_overflow(_a, _b, 1);
       return __darwin_check_fd_set_overflow(_a, _b, 0);
   } 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

Fixes #19950
parent 689016dc
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment