diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2023-01-07 11:11:15 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-01-07 12:15:15 -0500 |
commit | 8c0ea25fb4a27d4729aabf73f4c00b912bb0c58d (patch) | |
tree | aa2042d3f66e0f9559113848910b930821d40f44 /m4 | |
parent | 734847108420cf826a807c30ad54651659cf3a08 (diff) | |
download | haskell-8c0ea25fb4a27d4729aabf73f4c00b912bb0c58d.tar.gz |
Pass -Wl,-no_fixup_chains to ld64 when appropiate
Recent versions of MacOS use a version of ld where `-fixup_chains` is on by default.
This is incompatible with our usage of `-undefined dynamic_lookup`. Therefore we
explicitly disable `fixup-chains` by passing `-no_fixup_chains` to the linker on
darwin. This results in a warning of the form:
ld: warning: -undefined dynamic_lookup may not work with chained fixups
The manual explains the incompatible nature of these two flags:
-undefined treatment
Specifies how undefined symbols are to be treated. Options are: error, warning,
suppress, or dynamic_lookup. The default is error. Note: dynamic_lookup that
depends on lazy binding will not work with chained fixups.
A relevant ticket is #22429
Here are also a few other links which are relevant to the issue:
Official comment: https://developer.apple.com/forums/thread/719961
More relevant links:
https://openradar.appspot.com/radar?id=5536824084660224
https://github.com/python/cpython/issues/97524
Note in release notes: https://developer.apple.com/documentation/xcode-release-notes/xcode-13-releas e-notes
Diffstat (limited to 'm4')
-rw-r--r-- | m4/fp_ld_no_fixup_chains.m4 | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/m4/fp_ld_no_fixup_chains.m4 b/m4/fp_ld_no_fixup_chains.m4 new file mode 100644 index 0000000000..1d62fd3b20 --- /dev/null +++ b/m4/fp_ld_no_fixup_chains.m4 @@ -0,0 +1,24 @@ +# FP_LD_NO_FIXUP_CHAINS +# -------------------- +# See if whether we are using a version of ld64 on darwin platforms which +# requires us to pass -no_fixup_chains +# +# $1 = the platform +# $2 = the name of the linker flags variable when linking with $CC +AC_DEFUN([FP_LD_NO_FIXUP_CHAINS], [ + case $$1 in + *-darwin) + AC_MSG_CHECKING([whether ld64 requires -no_fixup_chains]) + echo 'int main(void) {return 0;}' > conftest.c + if $CC -o conftest.o -Wl,-no_fixup_chains conftest.c > /dev/null 2>&1 + then + $2="-Wl,-no_fixup_chains" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + rm -f conftest.c conftest.o + ;; + + esac +]) |