File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed
stdlib/public/Concurrency Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -648,6 +648,18 @@ void swift_task_reportUnexpectedExecutor(
648
648
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
649
649
JobPriority swift_task_getCurrentThreadPriority (void );
650
650
651
+ #ifdef __APPLE__
652
+ // / A magic symbol whose address is the mask to apply to a frame pointer to
653
+ // / signal that it is an async frame. Do not try to read the actual value of
654
+ // / this global, it will crash.
655
+ // /
656
+ // / On ARM64_32, the address is only 32 bits, and therefore this value covers
657
+ // / the top 32 bits of the in-memory frame pointer. On other 32-bit platforms,
658
+ // / the bit is not used and the address is always 0.
659
+ SWIFT_EXPORT_FROM (swift_Concurrency)
660
+ struct { char c; } swift_async_extendedFramePointerFlags;
661
+ #endif
662
+
651
663
}
652
664
653
665
#pragma clang diagnostic pop
Original file line number Diff line number Diff line change 33
33
#include < dlfcn.h>
34
34
#endif
35
35
36
+ #ifdef __APPLE__
37
+ #if __POINTER_WIDTH__ == 64
38
+ asm (" \n .globl _swift_async_extendedFramePointerFlags" \
39
+ " \n _swift_async_extendedFramePointerFlags = 0x1000000000000000" );
40
+ #elif __ARM64_ARCH_8_32__
41
+ asm (" \n .globl _swift_async_extendedFramePointerFlags" \
42
+ " \n _swift_async_extendedFramePointerFlags = 0x10000000" );
43
+ #else
44
+ asm (" \n .globl _swift_async_extendedFramePointerFlags" \
45
+ " \n _swift_async_extendedFramePointerFlags = 0x0" );
46
+ #endif
47
+ #endif // __APPLE__
48
+
36
49
using namespace swift ;
37
50
using FutureFragment = AsyncTask::FutureFragment;
38
51
using TaskGroup = swift::TaskGroup;
You can’t perform that action at this time.
0 commit comments