From 54cfca3b4459e03fe782d6a4db03c48092928da2 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Thu, 2 Jul 2015 00:35:47 +0000 Subject: ubsan: Port runtime library to (32- and 64-bit) Windows. Differential Revision: http://reviews.llvm.org/D10856 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@241217 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ubsan/ubsan_diag.cc | 4 ++++ lib/ubsan/ubsan_flags.cc | 11 +++++++++-- lib/ubsan/ubsan_platform.h | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'lib/ubsan') diff --git a/lib/ubsan/ubsan_diag.cc b/lib/ubsan/ubsan_diag.cc index a4c9e3046..b14412217 100644 --- a/lib/ubsan/ubsan_diag.cc +++ b/lib/ubsan/ubsan_diag.cc @@ -186,7 +186,11 @@ static void renderText(const char *Message, const Diag::Arg *Args) { // FIXME: Support floating-point formatting in sanitizer_common's // printf, and stop using snprintf here. char Buffer[32]; +#if SANITIZER_WINDOWS + sprintf_s(Buffer, sizeof(Buffer), "%Lg", (long double)A.Float); +#else snprintf(Buffer, sizeof(Buffer), "%Lg", (long double)A.Float); +#endif Printf("%s", Buffer); break; } diff --git a/lib/ubsan/ubsan_flags.cc b/lib/ubsan/ubsan_flags.cc index eda7557a0..59d6c4a0a 100644 --- a/lib/ubsan/ubsan_flags.cc +++ b/lib/ubsan/ubsan_flags.cc @@ -64,11 +64,18 @@ void InitializeFlags() { } // namespace __ubsan -#if !SANITIZER_SUPPORTS_WEAK_HOOKS extern "C" { + +#if !SANITIZER_SUPPORTS_WEAK_HOOKS SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE const char *__ubsan_default_options() { return ""; } -} // extern "C" #endif +#if SANITIZER_WINDOWS +const char *__ubsan_default_default_options() { return ""; } +#pragma comment(linker, "/alternatename:__ubsan_default_options=__ubsan_default_default_options") +#endif + +} // extern "C" + #endif // CAN_SANITIZE_UB diff --git a/lib/ubsan/ubsan_platform.h b/lib/ubsan/ubsan_platform.h index 8ba253bfe..002ecf32a 100644 --- a/lib/ubsan/ubsan_platform.h +++ b/lib/ubsan/ubsan_platform.h @@ -18,6 +18,8 @@ (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || \ defined(__aarch64__) || defined(__mips__) || defined(__powerpc64__)) # define CAN_SANITIZE_UB 1 +#elif defined(_WIN32) +# define CAN_SANITIZE_UB 1 #else # define CAN_SANITIZE_UB 0 #endif -- cgit v1.2.3