[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