diff options
| author | Ismail Pazarbasi <ismail.pazarbasi@gmail.com> | 2015-11-11 02:44:19 +0000 |
|---|---|---|
| committer | Ismail Pazarbasi <ismail.pazarbasi@gmail.com> | 2015-11-11 02:44:19 +0000 |
| commit | 26f70505f32bd83f0b39d45a2f6ac7d4333de271 (patch) | |
| tree | bf640dedb68d4faff25c747cbff8441e633dcddf | |
| parent | fcb8c7e4072cc754ed473d0d30e8167c00daaaa2 (diff) | |
| download | bcm5719-llvm-26f70505f32bd83f0b39d45a2f6ac7d4333de271.tar.gz bcm5719-llvm-26f70505f32bd83f0b39d45a2f6ac7d4333de271.zip | |
Implement `internal_start/join_thread` on Mac OS X
Summary: Depends on D9637
Test Plan:
Reviewers: kcc, glider, samsonov
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D9638
llvm-svn: 252696
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_mac.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc index 3151cf8b911..03e97c84e2b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc @@ -371,8 +371,18 @@ uptr GetRSS() { return info.resident_size; } -void *internal_start_thread(void (*func)(void *arg), void *arg) { return 0; } -void internal_join_thread(void *th) { } +void *internal_start_thread(void(*func)(void *arg), void *arg) { + // Start the thread with signals blocked, otherwise it can steal user signals. + __sanitizer_sigset_t set, old; + internal_sigfillset(&set); + internal_sigprocmask(SIG_SETMASK, &set, &old); + pthread_t th; + pthread_create(&th, 0, (void*(*)(void *arg))func, arg); + internal_sigprocmask(SIG_SETMASK, &old, 0); + return th; +} + +void internal_join_thread(void *th) { pthread_join((pthread_t)th, 0); } void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) { ucontext_t *ucontext = (ucontext_t*)context; |

