Darwin : Update the kernel version to macOS version mapping.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 19 Dec 2020 13:05:34 +0000 (13:05 +0000)
committerIain Sandoe <iain@sandoe.co.uk>
Mon, 21 Dec 2020 20:19:30 +0000 (20:19 +0000)
With the change to macOS 11 and Darwin20, the algorithm for mapping
kernel version to macOS version has changed.

We now have darwin 20.X.Y => macOS 11.(X > 0 ? X - 1 : 0).??.
It currently unclear if the Y will be mapped to macOS patch version
and, if so, whether it will be one-based or 0-based.
Likewise, it's unknown if Darwin 21 will map to macOS 12, so these
entries are unchanged for the present.

gcc/ChangeLog:

* config/darwin-driver.c (darwin_find_version_from_kernel):
Compute the minor OS version from the minor kernel version.

gcc/config/darwin-driver.c

index 8ae300057fd36a3ab0a187a75a2502ec82aa3f3f..4a9426ef273797d7d12f1912d619d19346165915 100644 (file)
@@ -149,9 +149,22 @@ darwin_find_version_from_kernel (void)
   if (*version_p++ != '.')
     goto parse_failed;
 
-  /* Darwin20 sees a transition to macOS 11.  */
+  /* 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).  At this stage, we
+     don't know what macOS version will correspond to Darwin21.  */
   if (major_vers >= 20)
-    asprintf (&new_flag, "11.%02d.00", 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, "11.%02d.00", minor_vers);
+    }
   else if (major_vers - 4 <= 4)
     /* On 10.4 and earlier, the old linker is used which does not
        support three-component system versions.