<div dir="ltr">Addressed in r230507, thanks!<br></div><br><div class="gmail_quote">On Wed Feb 25 2015 at 1:51:05 PM Dmitry Vyukov <<a href="mailto:dvyukov@google.com">dvyukov@google.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, Feb 24, 2015 at 10:21 PM, Alexey Samsonov <<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>> wrote:<br>
><br>
> On Tue, Feb 24, 2015 at 9:07 AM, Timur Iskhodzhanov <<a href="mailto:timurrrr@google.com" target="_blank">timurrrr@google.com</a>><br>
> wrote:<br>
>><br>
>> Author: timurrrr<br>
>> Date: Tue Feb 24 11:07:22 2015<br>
>> New Revision: 230344<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=230344&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=230344&view=rev</a><br>
>> Log:<br>
>> [ASan/Win] Add support for sanitizer allocator hooks,<br>
>> __asan_default_options and __asan_on_error<br>
>><br>
>> Added:<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/Windows/default_<u></u>options.cc<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/Windows/free_hook_<u></u>realloc.cc<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/Windows/on_error_<u></u>callback.cc<br>
>> Modified:<br>
>>     compiler-rt/trunk/lib/asan/<u></u>asan_win.cc<br>
>>     compiler-rt/trunk/lib/asan/<u></u>asan_win_dll_thunk.cc<br>
>>     compiler-rt/trunk/lib/<u></u>sanitizer_common/sanitizer_<u></u>internal_defs.h<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/default_options.cc<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/free_hook_realloc.cc<br>
>>     compiler-rt/trunk/test/asan/<u></u>TestCases/on_error_callback.cc<br>
>><br>
>> Modified: compiler-rt/trunk/lib/asan/<u></u>asan_win.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=230344&r1=230343&r2=230344&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/compiler-rt/trunk/lib/<u></u>asan/asan_win.cc?rev=230344&<u></u>r1=230343&r2=230344&view=diff</a><br>
>><br>
>> ==============================<u></u>==============================<u></u>==================<br>
>> --- compiler-rt/trunk/lib/asan/<u></u>asan_win.cc (original)<br>
>> +++ compiler-rt/trunk/lib/asan/<u></u>asan_win.cc Tue Feb 24 11:07:22 2015<br>
>> @@ -27,13 +27,26 @@<br>
>>  #include "sanitizer_common/sanitizer_<u></u>mutex.h"<br>
>><br>
>>  extern "C" {<br>
>> -  SANITIZER_INTERFACE_ATTRIBUTE<br>
>> -  int __asan_should_detect_stack_<u></u>use_after_return() {<br>
>> -    __asan_init();<br>
>> -    return __asan_option_detect_stack_<u></u>use_after_return;<br>
>> -  }<br>
>> +SANITIZER_INTERFACE_ATTRIBUTE<br>
>> +int __asan_should_detect_stack_<u></u>use_after_return() {<br>
>> +  __asan_init();<br>
>> +  return __asan_option_detect_stack_<u></u>use_after_return;<br>
>>  }<br>
>><br>
>> +// We don't have a direct equivalent of weak symbols when using MSVC, but<br>
>> we can<br>
>> +// use the /alternatename directive to tell the linker to default a<br>
>> specific<br>
>> +// symbol to a specific value, which works nicely for allocator hooks and<br>
>> +// __asan_default_options().<br>
>> +void __sanitizer_default_malloc_<u></u>hook(void *ptr, uptr size) { }<br>
>> +void __sanitizer_default_free_hook(<u></u>void *ptr) { }<br>
>> +const char* __asan_default_default_<u></u>options() { return ""; }<br>
>> +void __asan_default_on_error() {}<br>
>> +#pragma comment(linker,<br>
>> "/alternatename:___sanitizer_<u></u>malloc_hook=___sanitizer_<u></u>default_malloc_hook")<br>
>> // NOLINT<br>
>> +#pragma comment(linker,<br>
>> "/alternatename:___sanitizer_<u></u>free_hook=___sanitizer_<u></u>default_free_hook")<br>
>> // NOLINT<br>
>> +#pragma comment(linker,<br>
>> "/alternatename:___asan_<u></u>default_options=___asan_<u></u>default_default_options")<br>
>> // NOLINT<br>
>> +#pragma comment(linker,<br>
>> "/alternatename:___asan_on_<u></u>error=___asan_default_on_<u></u>error")<br>
>> // NOLINT<br>
>> +}  // extern "C"<br>
>> +<br>
>>  namespace __asan {<br>
>><br>
>>  // ---------------------- TSD ---------------- {{{1<br>
>><br>
>> Modified: compiler-rt/trunk/lib/asan/<u></u>asan_win_dll_thunk.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win_dll_thunk.cc?rev=230344&r1=230343&r2=230344&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/compiler-rt/trunk/lib/<u></u>asan/asan_win_dll_thunk.cc?<u></u>rev=230344&r1=230343&r2=<u></u>230344&view=diff</a><br>
>><br>
>> ==============================<u></u>==============================<u></u>==================<br>
>> --- compiler-rt/trunk/lib/asan/<u></u>asan_win_dll_thunk.cc (original)<br>
>> +++ compiler-rt/trunk/lib/asan/<u></u>asan_win_dll_thunk.cc Tue Feb 24 11:07:22<br>
>> 2015<br>
>> @@ -304,7 +304,6 @@ INTERFACE_FUNCTION(__<u></u>sanitizer_cov_modul<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_cov_trace_basic_<u></u>block)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_cov_trace_func_<u></u>enter)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_cov_with_check)<br>
>> -INTERFACE_FUNCTION(__<u></u>sanitizer_free_hook)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_allocated_size)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_coverage_guards)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_current_<u></u>allocated_bytes)<br>
>> @@ -314,7 +313,6 @@ INTERFACE_FUNCTION(__<u></u>sanitizer_get_heap_<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_ownership)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_total_unique_<u></u>coverage)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_get_unmapped_bytes)<br>
>> -INTERFACE_FUNCTION(__<u></u>sanitizer_malloc_hook)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_maybe_open_cov_file)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_print_stack_trace)<br>
>>  INTERFACE_FUNCTION(__<u></u>sanitizer_ptr_cmp)<br>
>><br>
>> Modified: compiler-rt/trunk/lib/<u></u>sanitizer_common/sanitizer_<u></u>internal_defs.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=230344&r1=230343&r2=230344&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/compiler-rt/trunk/lib/<u></u>sanitizer_common/sanitizer_<u></u>internal_defs.h?rev=230344&r1=<u></u>230343&r2=230344&view=diff</a><br>
>><br>
>> ==============================<u></u>==============================<u></u>==================<br>
>> --- compiler-rt/trunk/lib/<u></u>sanitizer_common/sanitizer_<u></u>internal_defs.h<br>
>> (original)<br>
>> +++ compiler-rt/trunk/lib/<u></u>sanitizer_common/sanitizer_<u></u>internal_defs.h Tue<br>
>> Feb 24 11:07:22 2015<br>
>> @@ -32,7 +32,7 @@<br>
>>  # define SANITIZER_WEAK_ATTRIBUTE  __attribute__((weak))<br>
>>  #endif<br>
>><br>
>> -#if SANITIZER_LINUX && !defined(SANITIZER_GO)<br>
>> +#if (SANITIZER_LINUX && !defined(SANITIZER_GO)) || SANITIZER_WINDOWS<br>
><br>
><br>
> +Dmitry<br>
><br>
> This doesn't look right to me. Shouldn't it be<br>
> #if (SANITIZER_LINUX || SANITIZER_WINDOWS) && !defined(SANITIZER_GO)<br>
> ?<br>
<br>
Yes, tsan on windows does not support weak hooks.<br>
Timur, please change it to what Alexey says.<br>
Alexey, thanks for noticing this.<br>
</blockquote></div>