summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsmail Pazarbasi <ismail.pazarbasi@gmail.com>2015-11-11 02:44:19 +0000
committerIsmail Pazarbasi <ismail.pazarbasi@gmail.com>2015-11-11 02:44:19 +0000
commit26f70505f32bd83f0b39d45a2f6ac7d4333de271 (patch)
treebf640dedb68d4faff25c747cbff8441e633dcddf
parentfcb8c7e4072cc754ed473d0d30e8167c00daaaa2 (diff)
downloadbcm5719-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.cc14
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;
OpenPOWER on IntegriCloud