diff options
author | Julian Lettner <jlettner@apple.com> | 2019-07-09 20:47:37 +0000 |
---|---|---|
committer | Julian Lettner <jlettner@apple.com> | 2019-07-09 20:47:37 +0000 |
commit | 090d20397fd640b6efa56d57fd90c6560c43b34b (patch) | |
tree | d97a7b1ad93cbb784f62966f88c0e34ad0a19c17 | |
parent | 0e5e92c2f05a900e816783def8dea3d8c9bb5fa2 (diff) | |
download | compiler-rt-090d20397fd640b6efa56d57fd90c6560c43b34b.tar.gz |
[TSan] Refine longjmp key management on Darwin
NFC.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@365554 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/tsan/rtl/tsan_platform_mac.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/tsan/rtl/tsan_platform_mac.cc b/lib/tsan/rtl/tsan_platform_mac.cc index e43a9ec34..0c2d2aa93 100644 --- a/lib/tsan/rtl/tsan_platform_mac.cc +++ b/lib/tsan/rtl/tsan_platform_mac.cc @@ -238,8 +238,7 @@ void InitializePlatformEarly() { #endif } -static const uptr kPthreadSetjmpXorKeySlot = 0x7; -extern "C" uptr __tsan_darwin_setjmp_xor_key = 0; +static uptr longjmp_xor_key = 0; void InitializePlatform() { DisableCoreDumperIfNecessary(); @@ -254,8 +253,9 @@ void InitializePlatform() { #endif if (GetMacosVersion() >= MACOS_VERSION_MOJAVE) { - __tsan_darwin_setjmp_xor_key = - (uptr)pthread_getspecific(kPthreadSetjmpXorKeySlot); + // Libsystem currently uses a process-global key; this might change. + const unsigned kTLSLongjmpXorKeySlot = 0x7; + longjmp_xor_key = (uptr)pthread_getspecific(kTLSLongjmpXorKeySlot); } } @@ -268,7 +268,8 @@ void InitializePlatform() { uptr ExtractLongJmpSp(uptr *env) { uptr mangled_sp = env[LONG_JMP_SP_ENV_SLOT]; - return mangled_sp ^ __tsan_darwin_setjmp_xor_key; + uptr sp = mangled_sp ^ longjmp_xor_key; + return sp; } #if !SANITIZER_GO |