diff options
author | Reid Kleckner <rnk@google.com> | 2019-04-29 20:44:26 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2019-04-29 20:44:26 +0000 |
commit | d201961150fe163d41c4e0bf9c296ed69780d3b2 (patch) | |
tree | 3e424be016b9bddfe443a5492939fe00d3ca7473 | |
parent | 45fad2fe3524ecee10465b6e20a0e6fc7007121f (diff) | |
download | compiler-rt-d201961150fe163d41c4e0bf9c296ed69780d3b2.tar.gz |
Fix FIXME added in r359339
We have windows.h in asan_win.cc, so we can just use the correct
prototypes for these EH-related interceptors without worrying.
Also fix an unused variable warning while I'm here.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@359500 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/asan/asan_malloc_win.cc | 1 | ||||
-rw-r--r-- | lib/asan/asan_win.cc | 26 |
2 files changed, 12 insertions, 15 deletions
diff --git a/lib/asan/asan_malloc_win.cc b/lib/asan/asan_malloc_win.cc index a45c5a102..b13d798a3 100644 --- a/lib/asan/asan_malloc_win.cc +++ b/lib/asan/asan_malloc_win.cc @@ -208,6 +208,7 @@ INTERCEPTOR_WINAPI(LPVOID, HeapReAlloc, HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes) { GET_STACK_TRACE_MALLOC; GET_CURRENT_PC_BP_SP; + (void)sp; // Realloc should never reallocate in place. if (dwFlags & HEAP_REALLOC_IN_PLACE_ONLY) return nullptr; diff --git a/lib/asan/asan_win.cc b/lib/asan/asan_win.cc index adf4d78f5..c9b81fa8f 100644 --- a/lib/asan/asan_win.cc +++ b/lib/asan/asan_win.cc @@ -104,7 +104,9 @@ INTERCEPTOR_WINAPI(void, RaiseException, void *a, void *b, void *c, void *d) { #ifdef _WIN64 -INTERCEPTOR_WINAPI(int, __C_specific_handler, void *a, void *b, void *c, void *d) { // NOLINT +INTERCEPTOR_WINAPI(EXCEPTION_DISPOSITION, __C_specific_handler, + _EXCEPTION_RECORD *a, void *b, _CONTEXT *c, + _DISPATCHER_CONTEXT *d) { // NOLINT CHECK(REAL(__C_specific_handler)); __asan_handle_no_return(); return REAL(__C_specific_handler)(a, b, c, d); @@ -135,10 +137,9 @@ static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) { return t->ThreadStart(GetTid(), /* signal_thread_is_registered */ nullptr); } -INTERCEPTOR_WINAPI(DWORD, CreateThread, - void* security, uptr stack_size, - DWORD (__stdcall *start_routine)(void*), void* arg, - DWORD thr_flags, void* tid) { +INTERCEPTOR_WINAPI(HANDLE, CreateThread, LPSECURITY_ATTRIBUTES security, + SIZE_T stack_size, LPTHREAD_START_ROUTINE start_routine, + void *arg, DWORD thr_flags, DWORD *tid) { // Strict init-order checking is thread-hostile. if (flags()->strict_init_order) StopInitOrderChecking(); @@ -148,9 +149,9 @@ INTERCEPTOR_WINAPI(DWORD, CreateThread, bool detached = false; // FIXME: how can we determine it on Windows? u32 current_tid = GetCurrentTidOrInvalid(); AsanThread *t = - AsanThread::Create(start_routine, arg, current_tid, &stack, detached); - return REAL(CreateThread)(security, stack_size, - asan_thread_start, t, thr_flags, tid); + AsanThread::Create(start_routine, arg, current_tid, &stack, detached); + return REAL(CreateThread)(security, stack_size, asan_thread_start, t, + thr_flags, tid); } // }}} @@ -166,16 +167,11 @@ void InitializePlatformInterceptors() { (LPCWSTR)&InitializePlatformInterceptors, &pinned)); - // FIXME: ASAN_INTERCEPT_FUNC has some sanity checking that currently does - // not compile, i.e., it compares `(&CreateThread) != WRAP(&CreateThread)`, - // but the type of the interceptor does not match. - // ASAN_INTERCEPT_FUNC(CreateThread); - INTERCEPT_FUNCTION(CreateThread); + ASAN_INTERCEPT_FUNC(CreateThread); ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter); #ifdef _WIN64 - // ASAN_INTERCEPT_FUNC(__C_specific_handler); // FIXME: same as above - INTERCEPT_FUNCTION(__C_specific_handler); + ASAN_INTERCEPT_FUNC(__C_specific_handler); #else ASAN_INTERCEPT_FUNC(_except_handler3); ASAN_INTERCEPT_FUNC(_except_handler4); |