[compiler-rt] bed3e1a - [Sanitizer] Update macOS version checking

Julian Lettner via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 9 17:28:09 PDT 2020


Author: Julian Lettner
Date: 2020-07-09T17:28:01-07:00
New Revision: bed3e1a99b41f5a9525bc0edf12ecbcf63aab0cf

URL: https://github.com/llvm/llvm-project/commit/bed3e1a99b41f5a9525bc0edf12ecbcf63aab0cf
DIFF: https://github.com/llvm/llvm-project/commit/bed3e1a99b41f5a9525bc0edf12ecbcf63aab0cf.diff

LOG: [Sanitizer] Update macOS version checking

Support macOS 11 in our runtime version checking code and update
`GetMacosAlignedVersionInternal()` accordingly.  This follows the
implementation of `Triple::getMacOSXVersion()` in the Clang driver.

Reviewed By: delcypher

Differential Revision: https://reviews.llvm.org/D82918

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
    compiler-rt/lib/sanitizer_common/tests/sanitizer_mac_test.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
index c22e7517fc6f..7a3dfbcc2760 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
@@ -606,12 +606,22 @@ HandleSignalMode GetHandleSignalMode(int signum) {
   return result;
 }
 
+// This corresponds to Triple::getMacOSXVersion() in the Clang driver.
 static MacosVersion GetMacosAlignedVersionInternal() {
   u16 kernel_major = GetDarwinKernelVersion().major;
-  const u16 version_offset = 4;
-  CHECK_GE(kernel_major, version_offset);
-  u16 macos_major = kernel_major - version_offset;
-  return MacosVersion(10, macos_major);
+  // Darwin 0-3  -> unsupported
+  // Darwin 4-19 -> macOS 10.x
+  // Darwin 20+  -> macOS 11+
+  CHECK_GE(kernel_major, 4);
+  u16 major, minor;
+  if (kernel_major < 20) {
+    major = 10;
+    minor = kernel_major - 4;
+  } else {
+    major = 11 + kernel_major - 20;
+    minor = 0;
+  }
+  return MacosVersion(major, minor);
 }
 
 static_assert(sizeof(MacosVersion) == sizeof(atomic_uint32_t::Type),

diff  --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_mac_test.cpp b/compiler-rt/lib/sanitizer_common/tests/sanitizer_mac_test.cpp
index b327ba96e223..c8658ea55d03 100644
--- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_mac_test.cpp
+++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_mac_test.cpp
@@ -24,8 +24,12 @@ namespace __sanitizer {
 
 TEST(SanitizerMac, GetMacosAlignedVersion) {
   MacosVersion vers = GetMacosAlignedVersion();
-  EXPECT_EQ(vers.major, 10);
-  EXPECT_EQ(vers.minor, GetDarwinKernelVersion().major - 4);
+  u16 kernel_major = GetDarwinKernelVersion().major;
+  bool macos_11 = (kernel_major >= 20);
+  u16 expected_major = macos_11 ? (kernel_major - 9) : 10;
+  u16 expected_minor = macos_11 ? 0 : (kernel_major - 4);
+  EXPECT_EQ(vers.major, expected_major);
+  EXPECT_EQ(vers.minor, expected_minor);
 }
 
 void ParseVersion(const char *vers, u16 *major, u16 *minor);


        


More information about the llvm-commits mailing list