From 1090f1aab42d02dc9c4cc71732753b9b418e7737 Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 28 Apr 2020 17:19:00 +0800 Subject: [PATCH] Merge #18779: doc: Better explain GNU ld's dislike of ld64's options cd24f37ea9168bd56b8c518ea6125e242cc4213d doc: Better explain GNU ld's dislike of ld64's options (fanquake) Pull request description: There's also now more than a single option being special cased for darwin. If we didn't special case these options they would still end up on the link line and the binaries produced would just segfault. I'm going to plug #17874 here as well, because adding `-fatal-warnings` to our `AX_CHECK_LINK_FLAG` calls would mostly prevent this sort of option mangling from happening. An example of the warning behaviour: ```bash echo "int main() {}" | g++ -x c++ -std=c++11 -Wl,-dead_strip - /usr/bin/ld: warning: cannot find entry symbol ad_strip; defaulting to 0000000000001040 nm -C a.out 0000000000001000 t _init 0000000000001040 T _start U ad_strip ``` ACKs for top commit: dongcarl: ACK cd24f37ea9168bd56b8c518ea6125e242cc4213d Tree-SHA512: 8c5ff11b647e7d44dbb3f509a07caf8606a6b481c114403f0de72b3ad65395dbe9a3436e731ae1b46a823431ed23c3c6aacab8942d78629d59cd8c258c5dbf02 --- configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 96657f2101..f62ebbc1eb 100644 --- a/configure.ac +++ b/configure.ac @@ -822,7 +822,9 @@ if test x$use_hardening != xno; then esac fi -dnl this flag screws up non-darwin gcc even when the check fails. special-case it. +dnl These flags are specific to ld64, and may cause issues with other linkers. +dnl For example: GNU ld will intepret -dead_strip as -de and then try and use +dnl "ad_strip" as the symbol for the entry point. if test x$TARGET_OS = xdarwin; then AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"]) AX_CHECK_LINK_FLAG([[-Wl,-dead_strip_dylibs]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip_dylibs"])