annotate libsanitizer/asan/asan_posix.cc @ 117:f81c5aa9f14f

fix
author mir3636
date Tue, 28 Nov 2017 21:17:15 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 //===-- asan_posix.cc -----------------------------------------------------===//
kono
parents:
diff changeset
2 //
kono
parents:
diff changeset
3 // This file is distributed under the University of Illinois Open Source
kono
parents:
diff changeset
4 // License. See LICENSE.TXT for details.
kono
parents:
diff changeset
5 //
kono
parents:
diff changeset
6 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
7 //
kono
parents:
diff changeset
8 // This file is a part of AddressSanitizer, an address sanity checker.
kono
parents:
diff changeset
9 //
kono
parents:
diff changeset
10 // Posix-specific details.
kono
parents:
diff changeset
11 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 #include "sanitizer_common/sanitizer_platform.h"
kono
parents:
diff changeset
14 #if SANITIZER_POSIX
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 #include "asan_internal.h"
kono
parents:
diff changeset
17 #include "asan_interceptors.h"
kono
parents:
diff changeset
18 #include "asan_mapping.h"
kono
parents:
diff changeset
19 #include "asan_report.h"
kono
parents:
diff changeset
20 #include "asan_stack.h"
kono
parents:
diff changeset
21 #include "sanitizer_common/sanitizer_libc.h"
kono
parents:
diff changeset
22 #include "sanitizer_common/sanitizer_posix.h"
kono
parents:
diff changeset
23 #include "sanitizer_common/sanitizer_procmaps.h"
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 #include <pthread.h>
kono
parents:
diff changeset
26 #include <signal.h>
kono
parents:
diff changeset
27 #include <stdlib.h>
kono
parents:
diff changeset
28 #include <sys/time.h>
kono
parents:
diff changeset
29 #include <sys/resource.h>
kono
parents:
diff changeset
30 #include <unistd.h>
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 namespace __asan {
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 void AsanOnDeadlySignal(int signo, void *siginfo, void *context) {
kono
parents:
diff changeset
35 StartReportDeadlySignal();
kono
parents:
diff changeset
36 SignalContext sig(siginfo, context);
kono
parents:
diff changeset
37 ReportDeadlySignal(sig);
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 // ---------------------- TSD ---------------- {{{1
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 static pthread_key_t tsd_key;
kono
parents:
diff changeset
43 static bool tsd_key_inited = false;
kono
parents:
diff changeset
44 void AsanTSDInit(void (*destructor)(void *tsd)) {
kono
parents:
diff changeset
45 CHECK(!tsd_key_inited);
kono
parents:
diff changeset
46 tsd_key_inited = true;
kono
parents:
diff changeset
47 CHECK_EQ(0, pthread_key_create(&tsd_key, destructor));
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 void *AsanTSDGet() {
kono
parents:
diff changeset
51 CHECK(tsd_key_inited);
kono
parents:
diff changeset
52 return pthread_getspecific(tsd_key);
kono
parents:
diff changeset
53 }
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 void AsanTSDSet(void *tsd) {
kono
parents:
diff changeset
56 CHECK(tsd_key_inited);
kono
parents:
diff changeset
57 pthread_setspecific(tsd_key, tsd);
kono
parents:
diff changeset
58 }
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 void PlatformTSDDtor(void *tsd) {
kono
parents:
diff changeset
61 AsanThreadContext *context = (AsanThreadContext*)tsd;
kono
parents:
diff changeset
62 if (context->destructor_iterations > 1) {
kono
parents:
diff changeset
63 context->destructor_iterations--;
kono
parents:
diff changeset
64 CHECK_EQ(0, pthread_setspecific(tsd_key, tsd));
kono
parents:
diff changeset
65 return;
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67 AsanThread::TSDDtor(tsd);
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 } // namespace __asan
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 #endif // SANITIZER_POSIX