diff --git a/include/swift/SwiftRemoteMirror/SwiftRemoteMirror.h b/include/swift/SwiftRemoteMirror/SwiftRemoteMirror.h index a68b1c6d71a67..849e7c8a24cdd 100644 --- a/include/swift/SwiftRemoteMirror/SwiftRemoteMirror.h +++ b/include/swift/SwiftRemoteMirror/SwiftRemoteMirror.h @@ -38,6 +38,9 @@ extern "C" { #endif SWIFT_REMOTE_MIRROR_LINKAGE +#if !defined(_WIN32) +__attribute__((__weak_import__)) +#endif extern unsigned long long swift_reflection_classIsSwiftMask; /// Get the metadata version supported by the Remote Mirror library. diff --git a/stdlib/public/SwiftRemoteMirror/SwiftRemoteMirror.cpp b/stdlib/public/SwiftRemoteMirror/SwiftRemoteMirror.cpp index 67d6e3c2f7b93..bc4a7bb1f661f 100644 --- a/stdlib/public/SwiftRemoteMirror/SwiftRemoteMirror.cpp +++ b/stdlib/public/SwiftRemoteMirror/SwiftRemoteMirror.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "swift/SwiftRemoteMirror/Platform.h" +#include "swift/SwiftRemoteMirror/SwiftRemoteMirror.h" #define SWIFT_CLASS_IS_SWIFT_MASK swift_reflection_classIsSwiftMask extern "C" { @@ -22,7 +23,6 @@ unsigned long long swift_reflection_classIsSwiftMask = 2; #include "swift/Reflection/TypeLowering.h" #include "swift/Remote/CMemoryReader.h" #include "swift/Runtime/Unreachable.h" -#include "swift/SwiftRemoteMirror/SwiftRemoteMirror.h" using namespace swift; using namespace swift::reflection; diff --git a/stdlib/tools/swift-reflection-test/swift-reflection-test.c b/stdlib/tools/swift-reflection-test/swift-reflection-test.c index 0f8d5b34af4a7..02fb3e5e003f5 100644 --- a/stdlib/tools/swift-reflection-test/swift-reflection-test.c +++ b/stdlib/tools/swift-reflection-test/swift-reflection-test.c @@ -576,7 +576,10 @@ int main(int argc, char *argv[]) { const char *BinaryFilename = argv[1]; - swift_reflection_classIsSwiftMask = computeClassIsSwiftMask(); + // swift_reflection_classIsSwiftMask is weak linked so we can work + // with older Remote Mirror dylibs. + if (&swift_reflection_classIsSwiftMask != NULL) + swift_reflection_classIsSwiftMask = computeClassIsSwiftMask(); uint16_t Version = swift_reflection_getSupportedMetadataVersion(); printf("Metadata version: %u\n", Version);