public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r10-10848] Darwin: Truncate kernel-provided version to OS major for Darwin >= 20.
@ 2022-06-15 19:17 Iain D Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain D Sandoe @ 2022-06-15 19:17 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:82b771fd6cab421d92cc074a79f98389ac8569c3

commit r10-10848-g82b771fd6cab421d92cc074a79f98389ac8569c3
Author: Simon Wright <simon@pushface.org>
Date:   Sun Jun 12 17:01:22 2022 +0100

    Darwin: Truncate kernel-provided version to OS major for Darwin >= 20.
    
    In common with system tools, GCC uses a version obtained from the kernel as
    the prevailing macOS target, when that is not overridden by command line or
    environment versions (i.e. mmacosx-version-min=, MACOSX_DEPLOYMENT_TARGET).
    
    Presently, GCC assumes that if the OS version is >= 20, the value used should
    include both major and minium version identifiers.  However the system tools
    (for those versions) truncate the value to the major version - this leads to
    link errors when combining objects built with clang and GCC for example:
    
    ld: warning: object file (null.o) was built for newer macOS version (12.2)
    than being linked (12.0)
    
    The change here truncates the values GCC uses to the major version.
    
    gcc/ChangeLog:
    
            PR target/104871
            * config/darwin-driver.c (darwin_find_version_from_kernel): If the OS
            version is darwin20 (macOS 11) or greater, truncate the version to the
            major number.
    
    (cherry picked from commit add1adaa17a294ea25918ffb4fdd40f115362632)

Diff:
---
 gcc/config/darwin-driver.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/gcc/config/darwin-driver.c b/gcc/config/darwin-driver.c
index b2e3afdad0d..f96af2c0262 100644
--- a/gcc/config/darwin-driver.c
+++ b/gcc/config/darwin-driver.c
@@ -160,19 +160,13 @@ darwin_find_version_from_kernel (void)
     goto parse_failed;
 
   /* Darwin20 sees a transition to macOS 11.  In this, it seems that the
-     mapping to macOS minor version is now shifted to the kernel minor
-     version - 1 (at least for the initial releases).  */
+     mapping to macOS minor version and patch level is now always 0, 0
+     (at least for macOS 11 and 12).  */
   if (major_vers >= 20)
     {
-      int minor_vers = *version_p++ - '0';
-      if (ISDIGIT (*version_p))
-	minor_vers = minor_vers * 10 + (*version_p++ - '0');
-      if (*version_p++ != '.')
-	goto parse_failed;
-      if (minor_vers > 0)
-	minor_vers -= 1; /* Kernel 20.3 => macOS 11.2.  */
-      /* It's not yet clear whether patch level will be considered.  */
-      asprintf (&new_flag, "%d.%02d.00", major_vers - 9, minor_vers);
+      /* Apple clang doesn't include the minor version or the patch level
+	 in the object file, nor does it pass it to ld  */
+      asprintf (&new_flag, "%d.00.00", major_vers - 9);
     }
   else if (major_vers - 4 <= 4)
     /* On 10.4 and earlier, the old linker is used which does not


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-06-15 19:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-15 19:17 [gcc r10-10848] Darwin: Truncate kernel-provided version to OS major for Darwin >= 20 Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).