[Darwin] Make a final check on PIC options.
authorIain Sandoe <iain@sandoe.co.uk>
Sun, 7 Jul 2019 16:34:15 +0000 (16:34 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Sun, 7 Jul 2019 16:34:15 +0000 (16:34 +0000)
Final check on PCI options; for Darwin these are not dependent on the PIE
ones, although PIE does require PIC to support it.  Specifically, for Darwin,
"fPIC fno-PIE" should result in the same as "-fno-PIE -fPIC".

2019-07-07  Iain Sandoe  <iain@sandoe.co.uk>

* config/darwin.c (darwin_override_options): Make a final check on PIC
options.

From-SVN: r273181

gcc/ChangeLog
gcc/config/darwin.c

index 39da4f2947a0aee34a3cb928debcb7a201e6fda5..0ef7eb6b93b793c692fe83b1d2a432c881bdddba 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-07  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin.c (darwin_override_options): Make a final check on PIC
+       options.
+
 2019-07-07  Iain Sandoe  <iain@sandoe.co.uk>
 
        * config/darwin.c (darwin_override_options): Don't jam symbol stubs
index 02bcf01e7a64b9937b2e4bebd2393c1914814817..5ac092583ba112b0b539f55ccb183259952766df 100644 (file)
@@ -3241,6 +3241,8 @@ darwin_override_options (void)
       && write_symbols == DWARF2_DEBUG)
     flag_var_tracking_uninit = flag_var_tracking;
 
+  /* Final check on PCI options; for Darwin these are not dependent on the PIE
+     ones, although PIE does require PIC to support it.  */
   if (MACHO_DYNAMIC_NO_PIC_P)
     {
       if (flag_pic)
@@ -3249,9 +3251,11 @@ darwin_override_options (void)
                 " %<-fpie%> or %<-fPIE%>");
       flag_pic = 0;
     }
-  else if (flag_pic == 1)
+  else if (flag_pic == 1
+          || (flag_pic == 0 && !(flag_mkernel || flag_apple_kext)))
     {
-      /* Darwin's -fpic is -fPIC.  */
+      /* Darwin's -fpic is -fPIC.
+        We only support "static" code in the kernel and kernel exts.  */
       flag_pic = 2;
     }