Skip to content

Commit 9fb95ae

Browse files
committed
Merge #18779: doc: Better explain GNU ld's dislike of ld64's options
cd24f37 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 cd24f37 Tree-SHA512: 8c5ff11b647e7d44dbb3f509a07caf8606a6b481c114403f0de72b3ad65395dbe9a3436e731ae1b46a823431ed23c3c6aacab8942d78629d59cd8c258c5dbf02
2 parents b9ba76f + cd24f37 commit 9fb95ae

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

configure.ac

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,9 @@ if test x$use_hardening != xno; then
757757
esac
758758
fi
759759

760-
dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
760+
dnl These flags are specific to ld64, and may cause issues with other linkers.
761+
dnl For example: GNU ld will intepret -dead_strip as -de and then try and use
762+
dnl "ad_strip" as the symbol for the entry point.
761763
if test x$TARGET_OS = xdarwin; then
762764
AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
763765
AX_CHECK_LINK_FLAG([[-Wl,-dead_strip_dylibs]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip_dylibs"])

0 commit comments

Comments
 (0)