1 //===-- asan_win.cc -------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file is a part of AddressSanitizer, an address sanity checker. 11 // 12 // Windows-specific details. 13 //===----------------------------------------------------------------------===// 14 15 #include "sanitizer_common/sanitizer_platform.h" 16 #if SANITIZER_WINDOWS 17 #include <windows.h> 18 19 #include <dbghelp.h> 20 #include <stdlib.h> 21 22 #include "asan_interceptors.h" 23 #include "asan_internal.h" 24 #include "asan_thread.h" 25 #include "sanitizer_common/sanitizer_libc.h" 26 #include "sanitizer_common/sanitizer_mutex.h" 27 28 extern "C" { 29 SANITIZER_INTERFACE_ATTRIBUTE 30 int __asan_should_detect_stack_use_after_return() { 31 __asan_init(); 32 return __asan_option_detect_stack_use_after_return; 33 } 34 } 35 36 namespace __asan { 37 38 // ---------------------- TSD ---------------- {{{1 39 static bool tsd_key_inited = false; 40 41 static __declspec(thread) void *fake_tsd = 0; 42 43 void AsanTSDInit(void (*destructor)(void *tsd)) { 44 // FIXME: we're ignoring the destructor for now. 45 tsd_key_inited = true; 46 } 47 48 void *AsanTSDGet() { 49 CHECK(tsd_key_inited); 50 return fake_tsd; 51 } 52 53 void AsanTSDSet(void *tsd) { 54 CHECK(tsd_key_inited); 55 fake_tsd = tsd; 56 } 57 58 void PlatformTSDDtor(void *tsd) { 59 AsanThread::TSDDtor(tsd); 60 } 61 // ---------------------- Various stuff ---------------- {{{1 62 void MaybeReexec() { 63 // No need to re-exec on Windows. 64 } 65 66 void *AsanDoesNotSupportStaticLinkage() { 67 #if defined(_DEBUG) 68 #error Please build the runtime with a non-debug CRT: /MD or /MT 69 #endif 70 return 0; 71 } 72 73 void AsanCheckDynamicRTPrereqs() { UNIMPLEMENTED(); } 74 75 void AsanCheckIncompatibleRT() {} 76 77 void AsanPlatformThreadInit() { 78 // Nothing here for now. 79 } 80 81 void ReadContextStack(void *context, uptr *stack, uptr *ssize) { 82 UNIMPLEMENTED(); 83 } 84 85 void AsanOnSIGSEGV(int, void *siginfo, void *context) { 86 UNIMPLEMENTED(); 87 } 88 89 } // namespace __asan 90 91 #endif // _WIN32 92