diff options
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | include/sanitizer/common_interface_defs.h | 6 | ||||
-rw-r--r-- | lib/CMakeLists.txt | 2 | ||||
-rw-r--r-- | lib/asan/asan_malloc_win.cc | 3 | ||||
-rw-r--r-- | lib/interception/interception.h | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_internal_defs.h | 4 |
6 files changed, 19 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 67c7799a..d5f66964 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,9 +67,11 @@ set(SANITIZER_COMMON_CFLAGS -fno-exceptions -fomit-frame-pointer -funwind-tables - -fvisibility=hidden -O3 ) +if(NOT WIN32) + list(APPEND SANITIZER_COMMON_CFLAGS -fvisibility=hidden) +endif() check_cxx_compiler_flag(-Wno-variadic-macros SUPPORTS_NO_VARIADIC_MACROS_FLAG) if(SUPPORTS_NO_VARIADIC_MACROS_FLAG) list(APPEND SANITIZER_COMMON_CFLAGS -Wno-variadic-macros) diff --git a/include/sanitizer/common_interface_defs.h b/include/sanitizer/common_interface_defs.h index 1aa4f0b7..cbce63f1 100644 --- a/include/sanitizer/common_interface_defs.h +++ b/include/sanitizer/common_interface_defs.h @@ -40,8 +40,14 @@ // in a portable way by the language itself. namespace __sanitizer { +#if defined(_WIN64) +// 64-bit Windows uses LLP64 data model. +typedef unsigned long long uptr; // NOLINT +typedef signed long long sptr; // NOLINT +#else typedef unsigned long uptr; // NOLINT typedef signed long sptr; // NOLINT +#endif // defined(_WIN64) typedef unsigned char u8; typedef unsigned short u16; // NOLINT typedef unsigned int u32; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index cb72594e..a1dc48c4 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,6 @@ # First, add the subdirectories which contain feature-based runtime libraries # and several convenience helper libraries. -if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|Windows") +if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux") # AddressSanitizer is supported on Linux and Mac OS X. # Windows support is work in progress. add_subdirectory(asan) diff --git a/lib/asan/asan_malloc_win.cc b/lib/asan/asan_malloc_win.cc index 6c00e77c..3ec76d89 100644 --- a/lib/asan/asan_malloc_win.cc +++ b/lib/asan/asan_malloc_win.cc @@ -17,9 +17,10 @@ #include "asan_interceptors.h" #include "asan_internal.h" #include "asan_stack.h" - #include "interception/interception.h" +#include <stddef.h> + // ---------------------- Replacement functions ---------------- {{{1 using namespace __asan; // NOLINT diff --git a/lib/interception/interception.h b/lib/interception/interception.h index 6ff73556..7dad07fc 100644 --- a/lib/interception/interception.h +++ b/lib/interception/interception.h @@ -170,7 +170,11 @@ // challenging, as we don't even pass function type to // INTERCEPT_FUNCTION macro, only its name. namespace __interception { +#if defined(_WIN64) +typedef unsigned long long uptr; // NOLINT +#else typedef unsigned long uptr; // NOLINT +#endif // _WIN64 } // namespace __interception #define INCLUDED_FROM_INTERCEPTION_LIB diff --git a/lib/sanitizer_common/sanitizer_internal_defs.h b/lib/sanitizer_common/sanitizer_internal_defs.h index 6fdbd975..00549f03 100644 --- a/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/lib/sanitizer_common/sanitizer_internal_defs.h @@ -142,6 +142,8 @@ void NORETURN CheckFailed(const char *file, int line, const char *cond, // Limits for integral types. We have to redefine it in case we don't // have stdint.h (like in Visual Studio 9). +#undef __INT64_C +#undef __UINT64_C #if __WORDSIZE == 64 # define __INT64_C(c) c ## L # define __UINT64_C(c) c ## UL @@ -164,7 +166,7 @@ void NORETURN CheckFailed(const char *file, int line, const char *cond, enum LinkerInitialized { LINKER_INITIALIZED = 0 }; -#if !defined(_WIN32) || defined(__clang__) +#if !defined(_MSC_VER) || defined(__clang__) # define GET_CALLER_PC() (uptr)__builtin_return_address(0) # define GET_CURRENT_FRAME() (uptr)__builtin_frame_address(0) #else |