From 75ad9c6cbcbb1833a7614d0d80cebf27a00105f3 Mon Sep 17 00:00:00 2001
From: Iain Sandoe <iain@sandoe.co.uk>
Date: Mon, 6 Dec 2021 13:17:10 +0000
Subject: [PATCH] Darwin: Amend pie options when linking mdynamic-no-pic.

On i686 Darwin from macOS 10.7 onwards the default is to
link executables as PIE, which conflicts with code generated
using mdynamic-no-pic.  Rather than warn about this and then
get the user to add -Wl,-no_pie, we can inject this in the
link specs.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* config/darwin.h (DARWIN_PIE_SPEC): Add -no_pie when
	linking mdynamic-no-pic code on macOS > 10.7.

(cherry picked from commit 1c1563fb8ff227590eb5ab0fc3d22f3b0a57c241)
Signed-off-by: Kirill A. Korinsky <kirill@korins.ky>
---
 gcc/config/darwin.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git gcc/config/darwin.h gcc/config/darwin.h
index c79d2e12ed1..f82bcd11b46 100644
--- gcc/config/darwin.h
+++ gcc/config/darwin.h
@@ -277,13 +277,17 @@ extern GTY(()) int darwin_ms_struct;
 #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}"
 #endif
 
-/* FIXME: we should check that the linker supports the -pie and -no_pie.
+/* Code built with mdynamic-no-pic does not support PIE/PIC, so  we disallow
+   these combinations; we also ensure that the no_pie option is passed to
+   ld64 on system versions that default to PIE when mdynamic-no-pic is given.
+   FIXME: we should check that the linker supports the -pie and -no_pie.
    options.  */
 #define DARWIN_PIE_SPEC \
 "%{pie|fpie|fPIE:\
    %{mdynamic-no-pic: \
      %n'-mdynamic-no-pic' overrides '-pie', '-fpie' or '-fPIE'; \
-     :%:version-compare(>= 10.5 mmacosx-version-min= -pie) }} "
+     :%:version-compare(>= 10.5 mmacosx-version-min= -pie) }; \
+   mdynamic-no-pic:%:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } "
 
 #define DARWIN_NOPIE_SPEC \
 "%{no-pie|fno-pie|fno-PIE: \
-- 
2.42.1

