[compiler-rt] r240617 - [CMake] Fix PR23539: Don't reference C++ ABI symbols prior to Mac OS 10.9.

Alexey Samsonov vonosmas at gmail.com
Thu Jun 25 13:44:40 PDT 2015


On Thu, Jun 25, 2015 at 1:15 PM, Anna Zaks <zaks.anna at gmail.com> wrote:

>
>
> On Thu, Jun 25, 2015 at 11:51 AM, Alexey Samsonov <vonosmas at gmail.com>
> wrote:
>
>> We'd better ask users :)
>>
>> Anna, Hans,
>>
>> Currently when we build sanitizer runtimes on modern Mac OS X hosts, and
>> no explicit -mmacosx-version-min is specified, we implicitly add
>> -mmacosx-version-min=10.7,
>> as it's the minimum supported version that we can target. Do you think it
>> makes sense to use the host version of OS X instead? I personally don't
>> think so, as we might
>> easily use modern hosts for, say, Chromium buildbots, but use the
>> freshly-built Clang to target older version of Mac OS.
>>
>
> The min deployment target should not depend on the system on which you
> build clang.
>   - You might build clang + compiler-rt on a newer OS and deploy back to
> older users/testers. I'd expect this to be very common.
>   - You want to get the same behavior from clang/UBSan regardless of the
> machine on which it has been built.
>
> My understanding is that the downside is that certain checks will be
> disabled by default. The solution there is to set the default min
> deployment target to 10.9 by default. People who still want to deploy back
> to 10.7 could set SANITIZER_MIN_OSX_VERSION to 10.7 when they build clang.
> This would work for me as there are very few users who are on 10.8  and
> earlier (<10 -15% ?); and I'd rather not penalize everyone else.
>

Sounds good, I've submitted r240688 that uses 10.9 as minimum supported
versions unless CMAKE_OSX_DEPLOYMENT_TARGET wasn't explicitly provided by
the user.


>
>
>>
>> On Thu, Jun 25, 2015 at 11:47 AM, Frédéric Riss <friss at apple.com> wrote:
>>
>>>
>>> On Jun 25, 2015, at 11:38 AM, Alexey Samsonov <vonosmas at gmail.com>
>>> wrote:
>>>
>>> Ah, right. But that's the expected change - if no version is specified,
>>> we assume that we want to support 10.7, and therefore can't depend on
>>> availability of libc++abi symbols
>>> (otherwise we'll get problems at link time later).
>>>
>>>
>>> True. Wouldn’t it make more sense to default to the current machine’s
>>> version when nothing is specified?
>>>
>>> I'm testing a quick fix now.
>>>
>>> On Thu, Jun 25, 2015 at 11:29 AM, Frédéric Riss <friss at apple.com> wrote:
>>>
>>>>
>>>> On Jun 25, 2015, at 11:24 AM, Alexey Samsonov <vonosmas at gmail.com>
>>>> wrote:
>>>>
>>>> Hi Frederic,
>>>>
>>>> Ah, just noticed it. Sorry for the breakage :-/.
>>>> I don't think your analysis is correct, though - we used to
>>>> unconditionally set MIN_OSX_VERSION to 10.7 before, so the default behavior
>>>> was not changed.
>>>>
>>>>
>>>> what I mean is that you added
>>>>
>>>> if VERSION < 10.9
>>>>
>>>> below
>>>>
>>>> if no version specified
>>>>   VERSION = 10.7
>>>>
>>>> thus your test will always trigger when no version is specified (what I
>>>> called the default behavior). If I revert this patch, the CFI tests pass
>>>> just fine on my machine.
>>>>
>>>> Fred
>>>>
>>>> The problem happens with newly added CFI diagnostic mode, that uses
>>>> UBSan runtime, and depends on the presence of c++abi-specific code there,
>>>> while we disabled
>>>> linking in this code on older versions of Darwin.
>>>>
>>>> I will disable cfi tests on Darwin to fix the bot, and then discuss
>>>> with Peter the way to resolve this.
>>>>
>>>>
>>>> On Thu, Jun 25, 2015 at 11:20 AM, Frédéric Riss <friss at apple.com>
>>>> wrote:
>>>>
>>>>>
>>>>> > On Jun 25, 2015, at 9:22 AM, Frédéric Riss <friss at apple.com> wrote:
>>>>> >
>>>>> > Hi Alexey
>>>>> >
>>>>> > This commit broke the Darwin bot at:
>>>>> > http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA/
>>>>> >
>>>>> > The failures are link errors like:
>>>>> > undef: ___ubsan_handle_cfi_bad_type
>>>>> > Undefined symbols for architecture x86_64:
>>>>> >  "___ubsan_handle_cfi_bad_type", referenced from:
>>>>> >      _main in vdtor-0e96d6.o
>>>>> > ld: symbol(s) not found for architecture x86_64
>>>>> > clang-3.7: error: linker command failed with exit code 1 (use -v to
>>>>> see invocation)
>>>>> >
>>>>> > I guess that somehow the check you added triggers on the bot,
>>>>> although it shouldn’t as the machines there are 10.10
>>>>> >
>>>>> > Did you notice this?
>>>>>
>>>>> What happens is that you added a check against
>>>>> SANITIZER_MIN_OSX_VERSION, but when none is specified (which is the
>>>>> default) the CMakelists decides that the default value is 10.7. So you
>>>>> actually changed the default behavior here. As this breaks a public bot,
>>>>> I’ll revert it if I don’t here from you soon.
>>>>>
>>>>> (There is a more fundamental issue here that the link error is really
>>>>> the wrong diagnostic. The fronted should prevent you from getting into that
>>>>> situation by telling you that the configuration your asking for won’t work.)
>>>>>
>>>>> Fred
>>>>>
>>>>> > Fred
>>>>> >
>>>>> >> On Jun 24, 2015, at 5:57 PM, Alexey Samsonov <vonosmas at gmail.com>
>>>>> wrote:
>>>>> >>
>>>>> >> Author: samsonov
>>>>> >> Date: Wed Jun 24 19:57:42 2015
>>>>> >> New Revision: 240617
>>>>> >>
>>>>> >> URL: http://llvm.org/viewvc/llvm-project?rev=240617&view=rev
>>>>> >> Log:
>>>>> >> [CMake] Fix PR23539: Don't reference C++ ABI symbols prior to Mac
>>>>> OS 10.9.
>>>>> >>
>>>>> >> Summary:
>>>>> >> This patch implements step 1 from
>>>>> >> https://llvm.org/bugs/show_bug.cgi?id=23539#c10
>>>>> >>
>>>>> >> I'd appreciate if you could test it on Mac OS and verify that parts
>>>>> of UBSan
>>>>> >> runtime that reference C++ ABI symbols are properly excluded, and
>>>>> fix ASan/UBSan
>>>>> >> builds.
>>>>> >>
>>>>> >> Test Plan: regression test suite
>>>>> >>
>>>>> >> Reviewers: thakis, hans
>>>>> >>
>>>>> >> Subscribers: llvm-commits, zaks.anna, kubabrecka
>>>>> >>
>>>>> >> Differential Revision: http://reviews.llvm.org/D10621
>>>>> >>
>>>>> >> Modified:
>>>>> >>   compiler-rt/trunk/CMakeLists.txt
>>>>> >>   compiler-rt/trunk/lib/ubsan/CMakeLists.txt
>>>>> >>   compiler-rt/trunk/test/lit.common.cfg
>>>>> >>   compiler-rt/trunk/test/lit.common.configured.in
>>>>> >>
>>>>>  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=240617&r1=240616&r2=240617&view=diff
>>>>> >>
>>>>> ==============================================================================
>>>>> >> --- compiler-rt/trunk/CMakeLists.txt (original)
>>>>> >> +++ compiler-rt/trunk/CMakeLists.txt Wed Jun 24 19:57:42 2015
>>>>> >> @@ -327,6 +327,15 @@ if(APPLE)
>>>>> >>  endif()
>>>>> >> endif()
>>>>> >>
>>>>> >> +if(APPLE 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(SANITIZER_CAN_USE_CXXABI FALSE)
>>>>> >> +else()
>>>>> >> +  set(SANITIZER_CAN_USE_CXXABI TRUE)
>>>>> >> +endif()
>>>>> >> +pythonize_bool(SANITIZER_CAN_USE_CXXABI)
>>>>> >> +
>>>>> >> add_subdirectory(include)
>>>>> >>
>>>>> >> set(COMPILER_RT_LIBCXX_PATH ${LLVM_MAIN_SRC_DIR}/projects/libcxx)
>>>>> >>
>>>>> >> Modified: compiler-rt/trunk/lib/ubsan/CMakeLists.txt
>>>>> >> URL:
>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/CMakeLists.txt?rev=240617&r1=240616&r2=240617&view=diff
>>>>> >>
>>>>> ==============================================================================
>>>>> >> --- compiler-rt/trunk/lib/ubsan/CMakeLists.txt (original)
>>>>> >> +++ compiler-rt/trunk/lib/ubsan/CMakeLists.txt Wed Jun 24 19:57:42
>>>>> 2015
>>>>> >> @@ -28,11 +28,16 @@ set(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CF
>>>>> >> add_custom_target(ubsan)
>>>>> >>
>>>>> >> if(APPLE)
>>>>> >> +  set(UBSAN_COMMON_SOURCES ${UBSAN_SOURCES})
>>>>> >> +  if(SANITIZER_CAN_USE_CXXABI)
>>>>> >> +    list(APPEND UBSAN_COMMON_SOURCES ${UBSAN_CXX_SOURCES})
>>>>> >> +  endif()
>>>>> >> +
>>>>> >>  # Common parts of UBSan runtime.
>>>>> >>  add_compiler_rt_object_libraries(RTUbsan
>>>>> >>    OS ${SANITIZER_COMMON_SUPPORTED_OS}
>>>>> >>    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
>>>>> >> -    SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
>>>>> >> +    SOURCES ${UBSAN_COMMON_SOURCES}
>>>>> >>    CFLAGS ${UBSAN_CXXFLAGS})
>>>>> >>
>>>>> >>  if(COMPILER_RT_HAS_UBSAN)
>>>>> >>
>>>>> >> Modified: compiler-rt/trunk/test/lit.common.cfg
>>>>> >> URL:
>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.cfg?rev=240617&r1=240616&r2=240617&view=diff
>>>>> >>
>>>>> ==============================================================================
>>>>> >> --- compiler-rt/trunk/test/lit.common.cfg (original)
>>>>> >> +++ compiler-rt/trunk/test/lit.common.cfg Wed Jun 24 19:57:42 2015
>>>>> >> @@ -90,6 +90,10 @@ compiler_rt_debug = getattr(config, 'com
>>>>> >> if not compiler_rt_debug:
>>>>> >>  config.available_features.add('compiler-rt-optimized')
>>>>> >>
>>>>> >> +sanitizer_can_use_cxxabi = getattr(config,
>>>>> 'sanitizer_can_use_cxxabi', True)
>>>>> >> +if sanitizer_can_use_cxxabi:
>>>>> >> +  config.available_features.add('cxxabi')
>>>>> >> +
>>>>> >> lit.util.usePlatformSdkOnDarwin(config, lit_config)
>>>>> >>
>>>>> >> def is_darwin_lto_supported():
>>>>> >>
>>>>> >> Modified: compiler-rt/trunk/test/lit.common.configured.in
>>>>> >> URL:
>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.configured.in?rev=240617&r1=240616&r2=240617&view=diff
>>>>> >>
>>>>> ==============================================================================
>>>>> >> --- compiler-rt/trunk/test/lit.common.configured.in (original)
>>>>> >> +++ compiler-rt/trunk/test/lit.common.configured.in Wed Jun 24
>>>>> 19:57:42 2015
>>>>> >> @@ -27,6 +27,7 @@ set_default("python_executable", "@PYTHO
>>>>> >> set_default("compiler_rt_debug", @COMPILER_RT_DEBUG_PYBOOL@)
>>>>> >> set_default("compiler_rt_libdir", "@COMPILER_RT_LIBRARY_OUTPUT_DIR@
>>>>> ")
>>>>> >> set_default("emulator", "@COMPILER_RT_EMULATOR@")
>>>>> >> +set_default("sanitizer_can_use_cxxabi",
>>>>> @SANITIZER_CAN_USE_CXXABI_PYBOOL@)
>>>>> >>
>>>>> >> # LLVM tools dir can be passed in lit parameters, so try to
>>>>> >> # apply substitution.
>>>>> >>
>>>>> >> 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=240617&r1=240616&r2=240617&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 Wed
>>>>> Jun 24 19:57:42 2015
>>>>> >> @@ -1,6 +1,8 @@
>>>>> >> // RUN: %clangxx -frtti -fsanitize=vptr -fno-sanitize-recover=vptr
>>>>> -g %s -O3 -o %t
>>>>> >> // RUN: not %run %t 2>&1 | FileCheck %s
>>>>> >>
>>>>> >> +// REQUIRES: cxxabi
>>>>> >> +
>>>>> >> 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=240617&r1=240616&r2=240617&view=diff
>>>>> >>
>>>>> ==============================================================================
>>>>> >> --- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp
>>>>> (original)
>>>>> >> +++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr.cpp Wed
>>>>> Jun 24 19:57:42 2015
>>>>> >> @@ -24,7 +24,7 @@
>>>>> >> // RUN: echo "vptr_check:S" > %t.loc-supp
>>>>> >> // RUN: UBSAN_OPTIONS="suppressions='%t.loc-supp'" not %run %t x-
>>>>> 2>&1 | FileCheck %s --check-prefix=CHECK-LOC-SUPPRESS
>>>>> >>
>>>>> >> -// REQUIRES: stable-runtime
>>>>> >> +// REQUIRES: stable-runtime, cxxabi
>>>>> >> #include <new>
>>>>> >> #include <assert.h>
>>>>> >> #include <stdio.h>
>>>>> >>
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> llvm-commits mailing list
>>>>> >> llvm-commits at cs.uiuc.edu
>>>>> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>> >
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Alexey Samsonov
>>>> vonosmas at gmail.com
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Alexey Samsonov
>>> vonosmas at gmail.com
>>>
>>>
>>>
>>
>>
>> --
>> Alexey Samsonov
>> vonosmas at gmail.com
>>
>
>


-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150625/2209aea9/attachment.html>


More information about the llvm-commits mailing list