[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