[compiler-rt] 9808f48 - [compiler-rt][builtins] Upstream __isPlatformOrVariantPlatformVersionAtLeast() (#100605)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 30 14:19:42 PDT 2024
Author: Allan Shortlidge
Date: 2024-07-30T17:19:39-04:00
New Revision: 9808f484534f503e9975d367082ff6933676ca20
URL: https://github.com/llvm/llvm-project/commit/9808f484534f503e9975d367082ff6933676ca20
DIFF: https://github.com/llvm/llvm-project/commit/9808f484534f503e9975d367082ff6933676ca20.diff
LOG: [compiler-rt][builtins] Upstream __isPlatformOrVariantPlatformVersionAtLeast() (#100605)
Add `__isPlatformOrVariantPlatformVersionAtLeast()` which is used to
check OS version availability from zippered libraries on macOS. This
routine is needed for complete macCatalyst support in the Swift
compiler.
Added:
Modified:
compiler-rt/lib/builtins/os_version_check.c
compiler-rt/test/builtins/TestCases/Darwin/platform_version_check_test.c
Removed:
################################################################################
diff --git a/compiler-rt/lib/builtins/os_version_check.c b/compiler-rt/lib/builtins/os_version_check.c
index 01fae834ab219..b10f23a81a9c6 100644
--- a/compiler-rt/lib/builtins/os_version_check.c
+++ b/compiler-rt/lib/builtins/os_version_check.c
@@ -14,6 +14,7 @@
#ifdef __APPLE__
#include <TargetConditionals.h>
+#include <assert.h>
#include <dispatch/dispatch.h>
#include <dlfcn.h>
#include <stdint.h>
@@ -270,6 +271,8 @@ static inline uint32_t ConstructVersion(uint32_t Major, uint32_t Minor,
return ((Major & 0xffff) << 16) | ((Minor & 0xff) << 8) | (Subminor & 0xff);
}
+#define PLATFORM_MACOS 1
+
int32_t __isPlatformVersionAtLeast(uint32_t Platform, uint32_t Major,
uint32_t Minor, uint32_t Subminor) {
dispatch_once_f(&DispatchOnceCounter, NULL, initializeAvailabilityCheck);
@@ -282,6 +285,29 @@ int32_t __isPlatformVersionAtLeast(uint32_t Platform, uint32_t Major,
return AvailabilityVersionCheck(1, Versions);
}
+#if TARGET_OS_OSX
+
+int32_t __isPlatformOrVariantPlatformVersionAtLeast(
+ uint32_t Platform, uint32_t Major, uint32_t Minor, uint32_t Subminor,
+ uint32_t Platform2, uint32_t Major2, uint32_t Minor2, uint32_t Subminor2) {
+ dispatch_once_f(&DispatchOnceCounter, NULL, initializeAvailabilityCheck);
+
+ if (!AvailabilityVersionCheck) {
+ // Handle case of back-deployment for older macOS.
+ if (Platform == PLATFORM_MACOS) {
+ return __isOSVersionAtLeast(Major, Minor, Subminor);
+ }
+ assert(Platform2 == PLATFORM_MACOS && "unexpected platform");
+ return __isOSVersionAtLeast(Major2, Minor2, Subminor2);
+ }
+ dyld_build_version_t Versions[] = {
+ {Platform, ConstructVersion(Major, Minor, Subminor)},
+ {Platform2, ConstructVersion(Major2, Minor2, Subminor2)}};
+ return AvailabilityVersionCheck(2, Versions);
+}
+
+#endif
+
#elif __ANDROID__
#include <pthread.h>
diff --git a/compiler-rt/test/builtins/TestCases/Darwin/platform_version_check_test.c b/compiler-rt/test/builtins/TestCases/Darwin/platform_version_check_test.c
index da0e366430a73..ebbeba1cd0014 100644
--- a/compiler-rt/test/builtins/TestCases/Darwin/platform_version_check_test.c
+++ b/compiler-rt/test/builtins/TestCases/Darwin/platform_version_check_test.c
@@ -7,11 +7,22 @@ typedef unsigned int uint32_t;
int32_t __isPlatformVersionAtLeast(uint32_t Platform, uint32_t Major,
uint32_t Minor, uint32_t Subminor);
+int32_t __isPlatformOrVariantPlatformVersionAtLeast(
+ uint32_t Platform, uint32_t Major, uint32_t Minor, uint32_t Subminor,
+ uint32_t Platform2, uint32_t Major2, uint32_t Minor2, uint32_t Subminor2);
+
+void exit(int status);
+
#define PLATFORM_MACOS 1
+#define PLATFORM_IOS 2
int32_t check(uint32_t Major, uint32_t Minor, uint32_t Subminor) {
int32_t Result =
__isPlatformVersionAtLeast(PLATFORM_MACOS, Major, Minor, Subminor);
+ int32_t ResultVariant = __isPlatformOrVariantPlatformVersionAtLeast(
+ PLATFORM_MACOS, Major, Minor, Subminor, PLATFORM_IOS, 13, 0, 0);
+ if (Result != ResultVariant)
+ exit(-1);
return Result;
}
More information about the llvm-commits
mailing list