mirror of
https://github.com/apple/swift.git
synced 2026-06-20 15:42:51 +02:00
d0017555c7
Replace C++ implementation of swift_beginAccess and swift_endAccess with (almost) pure Swift implementation. Helpers remain in C++ for TLS, getting return addresses, and raising a fatal error on violations. This change also moves the exclusivity access set head from the shared SwiftTLSContext structure to a dedicated TLS key. This improves performance, which is important for exclusivity checking. This is particularly the case where we can inline TLS access with a constant key, as on Darwin ARM64. The code that bridges exclusivity tracking into Concurrency remains in C++. The new Swift implementation exposes a few helpers for it to use as a replacement for directly manipulating the C++ implementation. rdar://161122309
34 lines
1004 B
C++
34 lines
1004 B
C++
//===--- SwiftTLSContext.h ------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_RUNTIME_SWIFTTLSCONTEXT_H
|
|
#define SWIFT_RUNTIME_SWIFTTLSCONTEXT_H
|
|
|
|
namespace swift {
|
|
namespace runtime {
|
|
|
|
class SwiftTLSContext {
|
|
public:
|
|
// The "implicit" boolean parameter which is passed to a dynamically
|
|
// replaceable function.
|
|
// If true, the original function should be executed instead of the
|
|
// replacement function.
|
|
bool CallOriginalOfReplacedFunction = false;
|
|
|
|
static SwiftTLSContext &get();
|
|
};
|
|
|
|
} // namespace runtime
|
|
} // namespace swift
|
|
|
|
#endif
|