From 3972d391408a36537c29ab02026792d30c46315b Mon Sep 17 00:00:00 2001 From: Cheng Shao <terrorjack@type.dance> Date: Mon, 25 Nov 2024 09:43:39 +0000 Subject: [PATCH] rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. (cherry picked from commit 88c4fe1d8a3bdbedf3972fde12f663a974cc2191) (cherry picked from commit 5c7e7695698a664b671777f4c81470ecd7738ccf) (cherry picked from commit 77c8c3ebc13e4ebae612658b0a95e9c2f557af63) --- .gitlab/gen_ci.hs | 2 +- .gitlab/jobs.yaml | 6 +++--- rts/rts.cabal.in | 44 -------------------------------------------- 3 files changed, 4 insertions(+), 48 deletions(-) diff --git a/.gitlab/gen_ci.hs b/.gitlab/gen_ci.hs index 9510cf73103..a86dd3759b8 100755 --- a/.gitlab/gen_ci.hs +++ b/.gitlab/gen_ci.hs @@ -419,7 +419,7 @@ opsysVariables AArch64 (Darwin {}) = ] opsysVariables Amd64 (Darwin {}) = mconcat [ "NIX_SYSTEM" =: "x86_64-darwin" - , "MACOSX_DEPLOYMENT_TARGET" =: "10.13" + , "MACOSX_DEPLOYMENT_TARGET" =: "11.0" -- "# Only Sierra and onwards supports clock_gettime. See #12858" , "ac_cv_func_clock_gettime" =: "no" -- # Only newer OS Xs support utimensat. See #17895 diff --git a/.gitlab/jobs.yaml b/.gitlab/jobs.yaml index 61ea32517c3..c601a6502c8 100644 --- a/.gitlab/jobs.yaml +++ b/.gitlab/jobs.yaml @@ -595,7 +595,7 @@ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ", "HADRIAN_ARGS": "--docs=no-sphinx-pdfs", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "TEST_ENV": "x86_64-darwin-validate", "XZ_OPT": "-9", @@ -2895,7 +2895,7 @@ "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx-pdfs", "IGNORE_PERF_FAILURES": "all", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "TEST_ENV": "x86_64-darwin-release", "XZ_OPT": "-9", @@ -4133,7 +4133,7 @@ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ", "HADRIAN_ARGS": "--docs=no-sphinx-pdfs", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "TEST_ENV": "x86_64-darwin-validate", "ac_cv_func_clock_gettime": "no", diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in index c8da60df7a6..cff9707ecb2 100644 --- a/rts/rts.cabal.in +++ b/rts/rts.cabal.in @@ -495,8 +495,6 @@ library if os(osx) ld-options: "-Wl,-search_paths_first" - -- See Note [fd_set_overflow] - "-Wl,-U,___darwin_check_fd_set_overflow" -- See Note [Undefined symbols in the RTS] "-Wl,-undefined,dynamic_lookup" if !arch(x86_64) && !arch(aarch64) @@ -702,48 +700,6 @@ library -- We don't want to compile posix/ticker/*.c, these will be #included -- from Ticker.c - --- 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 - - -- Note [Undefined symbols in the RTS] -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- The RTS is built with a number of `-u` flags. This is to handle cyclic -- GitLab