[cfe-dev] recent change broke -fcatch-undefined-behavior
Jean-Daniel Dupas
devlists at shadowlab.org
Thu Nov 15 07:37:39 PST 2012
In theory, all these symbols should be provided by libc++abi.dylib on OS X. As exported symbols of the libc++abi are reexported by libc++ and libstdc++, linking on one of the standard library should be enough.
Unfortunately, as I said, the current version (OS X 10.8.2) of libc++abi.dylib contains all the required symbols, but they are all declared private, and so are not exported.
nm -m libc++abi.dylib
…
000000000002eb40 (__DATA,__const) non-external (was signed char private external) typeinfo for std::type_info
…
000000000002ebb0 (__DATA,__const) non-external (was signed char private external) typeinfo for __cxxabiv1::__class_type_info
While it is possible to workaround the "typeinfo for std::type_info" issue by forcing the linker to use libstdc++ (which contains this symbol, unlike libc++), it does not fix the problem for the other missing symbols which are only present in libc++abi.
Le 15 nov. 2012 à 15:11, Alexey Samsonov <samsonov at google.com> a écrit :
> I wonder why the following line doesn't help then:
>
> + // The Ubsan runtime library requires C++ and CoreFoundation.
> + AddCXXStdlibLibArgs(Args, CmdArgs);
>
> On Thu, Nov 15, 2012 at 6:05 PM, Alexander Potapenko <glider at google.com> wrote:
> -lstdc++ should also work on Mac.
>
> On Thu, Nov 15, 2012 at 4:52 PM, Alexey Samsonov <samsonov at google.com> wrote:
> > +glider@
> >
> > Your Darwin-related patches also look good to me. I don't know much about
> > Mac world, but I've observed
> > similar errors on Linux when I tried to add virtual method calls to ASan
> > runtime. To fix this on Linux
> > you need to explicitly add "-lstdc++" to linker flags if -fsanitize=address
> > is present. I don't know
> > what is the analogue of -lstdc++ on Mac.
> >
> > On Thu, Nov 15, 2012 at 4:42 PM, Alexey Samsonov <samsonov at google.com>
> > wrote:
> >>
> >> Hi Jean-Daniel!
> >>
> >> I've applied parts of your patches relevant to Linux+make build support in
> >> r168038, r168039.
> >>
> >> On Thu, Nov 15, 2012 at 12:34 AM, Jean-Daniel Dupas
> >> <devlists at shadowlab.org> wrote:
> >>>
> >>>
> >>> Le 14 nov. 2012 à 21:11, Richard Smith <richard at metafoo.co.uk> a écrit :
> >>>
> >>> On Wed, Nov 14, 2012 at 7:40 AM, Sean McBride <sean at rogue-research.com>
> >>> wrote:
> >>>
> >>> On Tue, 13 Nov 2012 16:17:39 -0800, Richard Smith said:
> >>>
> >>> Thanks for the prod, I've checked in some pending patches to add OS X
> >>> support, in r167888, r167889, and r167890. If you could build
> >>> clang_rt.ubsan_osx and let me know whether everything is working as
> >>> intended, that'd be great; we can then ask to get those patches pulled
> >>> onto the 3.2 branch.
> >>>
> >>>
> >>> I've rebuilt clang r167897 and still get link errors, ex:
> >>>
> >>> Undefined symbols for architecture x86_64:
> >>> "___ubsan_handle_shift_out_of_bounds", referenced from:
> >>>
> >>>
> >>> I don't have a Darwin machine to test against. Does the attached patch
> >>> help?
> >>> <driver-ubsan-darwin.diff>
> >>>
> >>>
> >>> This patch is definitively a step in the right direction.
> >>>
> >>> We need to tweak to clang runtime makefile to tell it to build ubsan on
> >>> OS X (ubsan-make.patch).
> >>>
> >>> Also, in the previous compiler-rt patch has an issue. It neither builds
> >>> sanitize-common objects, not include them in the ubsan archive.
> >>> I fix this by looking at how asan is actually built (ubsan.patch). Note
> >>> that this patch make the previous change to the compiler-rt SDK headers
> >>> useless, as building sanitizer-common requires a full SDK, and so we now use
> >>> the system headers instead of the headers provided by compiler-rt.
> >>>
> >>> But I hit a blocking issue that I don't know how to workaround.
> >>> AFAIK, on darwin, there is no library that currently provide "typeinfo
> >>> for std::type_info".
> >>> The libc++abi provided by OS X does not properly export this symbol (and
> >>> other typeinfo related symbols). As ubsan_type_hash.cpp require them, trying
> >>> to link a software with the libubsan produce the following error:
> >>>
> >>> "typeinfo for __cxxabiv1::__class_type_info", referenced from:
> >>> __ubsan::checkDynamicType(void*, void*, unsigned long) in
> >>> libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
> >>> isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*,
> >>> __cxxabiv1::__class_type_info const*, long) in
> >>> libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
> >>> "typeinfo for std::type_info", referenced from:
> >>> vtable for testing::internal::ExecDeathTest in gtest-all.o
> >>> __ubsan::checkDynamicType(void*, void*, unsigned long) in
> >>> libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
> >>> "typeinfo for __cxxabiv1::__si_class_type_info", referenced from:
> >>> isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*,
> >>> __cxxabiv1::__class_type_info const*, long) in
> >>> libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
> >>> "typeinfo for __cxxabiv1::__vmi_class_type_info", referenced from:
> >>> isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*,
> >>> __cxxabiv1::__class_type_info const*, long) in
> >>> libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
> >>>
> >>>
> >>> Does someone with more knowledge about this subject can help ?
> >>>
> >>>
> >>> -- Jean-Daniel
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> cfe-dev mailing list
> >>> cfe-dev at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >>>
> >>
> >>
> >>
> >> --
> >> Alexey Samsonov, MSK
> >>
> >
> >
> >
> > --
> > Alexey Samsonov, MSK
> >
>
>
>
> --
> Alexander Potapenko
> Software Engineer
> Google Moscow
>
>
>
> --
> Alexey Samsonov, MSK
>
-- Jean-Daniel
More information about the cfe-dev
mailing list