[compiler-rt] r313391 - ubsan: Unbreak ubsan_cxx runtime library on Windows.
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 18 11:50:56 PDT 2017
I think may have broken our Mac builders:
FAILED: lib/ubsan/CMakeFiles/RTUbsan.ios.dir/ubsan_handlers.cc.o
/Applications/Xcode8.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-I/b/c/builder/ClangToTMac/src/third_party/llvm/compiler-rt/lib/ubsan/..
-DLLVM_FORCE_HEAD_REVISION -Wall -std=c++11 -Wno-unused-parameter -O3
-DNDEBUG -arch armv7 -arch armv7s -arch arm64 -arch armv7k -isysroot
/Applications/Xcode8.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
-DLLVM_FORCE_HEAD_REVISION -Wall -std=c++11 -Wno-unused-parameter
-stdlib=libc++ -miphoneos-version-min=8.0 -isysroot
/Applications/Xcode8.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk
-fPIC -fno-builtin -fno-exceptions -funwind-tables
-fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden
-fvisibility-inlines-hidden -fno-lto -O3 -gline-tables-only -Wno-gnu
-Wno-variadic-macros -Wno-c99-extensions -Wno-non-virtual-dtor -frtti
-MMD -MT lib/ubsan/CMakeFiles/RTUbsan.ios.dir/ubsan_handlers.cc.o -MF
lib/ubsan/CMakeFiles/RTUbsan.ios.dir/ubsan_handlers.cc.o.d -o
lib/ubsan/CMakeFiles/RTUbsan.ios.dir/ubsan_handlers.cc.o -c
/b/c/builder/ClangToTMac/src/third_party/llvm/compiler-rt/lib/ubsan/ubsan_handlers.cc
/b/c/builder/ClangToTMac/src/third_party/llvm/compiler-rt/lib/ubsan/ubsan_handlers.cc:675:13:
error: static declaration of '__ubsan_handle_cfi_bad_type' follows
non-static declaration
static void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data,
^
/b/c/builder/ClangToTMac/src/third_party/llvm/compiler-rt/lib/ubsan/ubsan_handlers.h:198:47:
note: previous declaration is here
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_handle_cfi_bad_type(
^
1 error generated.
See https://bugs.chromium.org/p/chromium/issues/detail?id=766256
On Fri, Sep 15, 2017 at 1:24 PM, Peter Collingbourne via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: pcc
> Date: Fri Sep 15 13:24:12 2017
> New Revision: 313391
>
> URL: http://llvm.org/viewvc/llvm-project?rev=313391&view=rev
> Log:
> ubsan: Unbreak ubsan_cxx runtime library on Windows.
>
> This was originally broken by r258744 which introduced a weak reference
> from ubsan to ubsan_cxx. This reference does not work directly on
> Windows because COFF has no direct concept of weak symbols. The fix is
> to use /alternatename to create a weak external reference to ubsan_cxx.
>
> Also fix the definition (and the name, so that we drop cached values)
> of the cmake flag that controls whether to build ubsan_cxx. Now the
> user-controllable flag is always on, and we turn it off internally
> depending on whether we support building it.
>
> Differential Revision: https://reviews.llvm.org/D37882
>
> Modified:
> compiler-rt/trunk/CMakeLists.txt
> compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
> compiler-rt/trunk/lib/ubsan/ubsan_handlers.h
> compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc
> compiler-rt/trunk/test/cfi/target_uninstrumented.cpp
> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/PR33221.cpp
> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp
> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp
> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp
> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp
>
> Modified: compiler-rt/trunk/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/CMakeLists.txt (original)
> +++ compiler-rt/trunk/CMakeLists.txt Fri Sep 15 13:24:12 2017
> @@ -94,14 +94,17 @@ include(config-ix)
> if(APPLE AND SANITIZER_MIN_OSX_VERSION AND SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.9")
> # Mac OS X prior to 10.9 had problems with exporting symbols from
> # libc++/libc++abi.
> - set(use_cxxabi_default OFF)
> -elseif(MSVC)
> - set(use_cxxabi_default OFF)
> + set(cxxabi_supported OFF)
> else()
> - set(use_cxxabi_default ON)
> + set(cxxabi_supported ON)
> endif()
>
> -option(SANITIZER_CAN_USE_CXXABI "Sanitizers can use cxxabi" ${use_cxxabi_default})
> +option(SANITIZER_ALLOW_CXXABI "Allow use of C++ ABI details in ubsan" ON)
> +
> +set(SANITIZE_CAN_USE_CXXABI OFF)
> +if (cxxabi_supported AND SANITIZER_ALLOW_CXXABI)
> + set(SANITIZER_CAN_USE_CXXABI ON)
> +endif()
> pythonize_bool(SANITIZER_CAN_USE_CXXABI)
>
> set(SANITIZER_CXX_ABI "default" CACHE STRING
>
> Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc (original)
> +++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc Fri Sep 15 13:24:12 2017
> @@ -652,16 +652,33 @@ static void handleCFIBadIcall(CFICheckFa
> }
>
> namespace __ubsan {
> +
> #ifdef UBSAN_CAN_USE_CXXABI
> +
> +#ifdef _WIN32
> +
> +extern "C" void __ubsan_handle_cfi_bad_type_default(CFICheckFailData *Data,
> + ValueHandle Vtable,
> + bool ValidVtable,
> + ReportOptions Opts) {
> + Die();
> +}
> +
> +WIN_WEAK_ALIAS(__ubsan_handle_cfi_bad_type, __ubsan_handle_cfi_bad_type_default)
> +#else
> SANITIZER_WEAK_ATTRIBUTE
> -void HandleCFIBadType(CFICheckFailData *Data, ValueHandle Vtable,
> - bool ValidVtable, ReportOptions Opts);
> +#endif
> +void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable,
> + bool ValidVtable, ReportOptions Opts);
> +
> #else
> -static void HandleCFIBadType(CFICheckFailData *Data, ValueHandle Vtable,
> - bool ValidVtable, ReportOptions Opts) {
> +static void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data,
> + ValueHandle Vtable,
> + bool ValidVtable, ReportOptions Opts) {
> Die();
> }
> #endif
> +
> } // namespace __ubsan
>
> void __ubsan::__ubsan_handle_cfi_check_fail(CFICheckFailData *Data,
> @@ -671,7 +688,7 @@ void __ubsan::__ubsan_handle_cfi_check_f
> if (Data->CheckKind == CFITCK_ICall)
> handleCFIBadIcall(Data, Value, Opts);
> else
> - HandleCFIBadType(Data, Value, ValidVtable, Opts);
> + __ubsan_handle_cfi_bad_type(Data, Value, ValidVtable, Opts);
> }
>
> void __ubsan::__ubsan_handle_cfi_check_fail_abort(CFICheckFailData *Data,
> @@ -681,7 +698,7 @@ void __ubsan::__ubsan_handle_cfi_check_f
> if (Data->CheckKind == CFITCK_ICall)
> handleCFIBadIcall(Data, Value, Opts);
> else
> - HandleCFIBadType(Data, Value, ValidVtable, Opts);
> + __ubsan_handle_cfi_bad_type(Data, Value, ValidVtable, Opts);
> Die();
> }
>
>
> Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.h?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/ubsan/ubsan_handlers.h (original)
> +++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.h Fri Sep 15 13:24:12 2017
> @@ -192,6 +192,13 @@ struct CFICheckFailData {
> /// \brief Handle control flow integrity failures.
> RECOVERABLE(cfi_check_fail, CFICheckFailData *Data, ValueHandle Function,
> uptr VtableIsValid)
> +
> +struct ReportOptions;
> +
> +extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_handle_cfi_bad_type(
> + CFICheckFailData *Data, ValueHandle Vtable, bool ValidVtable,
> + ReportOptions Opts);
> +
> }
>
> #endif // UBSAN_HANDLERS_H
>
> Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc (original)
> +++ compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc Fri Sep 15 13:24:12 2017
> @@ -95,8 +95,8 @@ void __ubsan::__ubsan_handle_dynamic_typ
> }
>
> namespace __ubsan {
> -void HandleCFIBadType(CFICheckFailData *Data, ValueHandle Vtable,
> - bool ValidVtable, ReportOptions Opts) {
> +void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable,
> + bool ValidVtable, ReportOptions Opts) {
> SourceLocation Loc = Data->Loc.acquire();
> ErrorType ET = ErrorType::CFIBadType;
>
>
> Modified: compiler-rt/trunk/test/cfi/target_uninstrumented.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/target_uninstrumented.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/cfi/target_uninstrumented.cpp (original)
> +++ compiler-rt/trunk/test/cfi/target_uninstrumented.cpp Fri Sep 15 13:24:12 2017
> @@ -3,6 +3,7 @@
> // RUN: %t 2>&1 | FileCheck %s
>
> // REQUIRES: cxxabi
> +// UNSUPPORTED: win32
>
> #include <stdio.h>
> #include <string.h>
>
> Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/PR33221.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/PR33221.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/PR33221.cpp (original)
> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/PR33221.cpp Fri Sep 15 13:24:12 2017
> @@ -2,6 +2,7 @@
> // RUN: %run %t 2>&1 | FileCheck %s
>
> // REQUIRES: cxxabi
> +// UNSUPPORTED: win32
>
> #include <string.h>
>
>
> Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp (original)
> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp Fri Sep 15 13:24:12 2017
> @@ -3,6 +3,7 @@
> // RUN: %run %t
> //
> // REQUIRES: cxxabi
> +// UNSUPPORTED: win32
>
> struct X {
> virtual ~X() {}
>
> Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp (original)
> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp Fri Sep 15 13:24:12 2017
> @@ -2,6 +2,7 @@
> // RUN: %run %t
>
> // REQUIRES: cxxabi
> +// UNSUPPORTED: win32
>
> int volatile n;
>
>
> Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp (original)
> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp Fri Sep 15 13:24:12 2017
> @@ -2,6 +2,7 @@
> // RUN: not %run %t 2>&1 | FileCheck %s
>
> // REQUIRES: cxxabi
> +// UNSUPPORTED: win32
>
> struct S { virtual int f() { return 0; } };
> struct T : virtual S {};
>
> Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp?rev=313391&r1=313390&r2=313391&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp (original)
> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp Fri Sep 15 13:24:12 2017
> @@ -26,6 +26,7 @@
> // RUN: %env_ubsan_opts=suppressions='"%t.loc-supp"' not %run %t x- 2>&1 | FileCheck %s --check-prefix=CHECK-LOC-SUPPRESS
>
> // REQUIRES: stable-runtime, cxxabi
> +// UNSUPPORTED: win32
> #include <new>
> #include <assert.h>
> #include <stdio.h>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list