summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--include/sanitizer/common_interface_defs.h6
-rw-r--r--lib/CMakeLists.txt2
-rw-r--r--lib/asan/asan_malloc_win.cc3
-rw-r--r--lib/interception/interception.h4
-rw-r--r--lib/sanitizer_common/sanitizer_internal_defs.h4
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