On Thu, Jun 6, 2013 at 12:44 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Thu, Jun 06, 2013 at 12:41:56PM +0400, Konstantin Serebryany wrote: >> As for libstdc++, I completely agree, we don't want to depend on it, >> and we don't. > > ubsan actually needs > U _ZTIN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 > U _ZTIN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3 > U _ZTIN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3 > U _ZTISt9type_info@@GLIBCXX_3.4 > U __dynamic_cast@@CXXABI_1.3
These things are needed only for the C++-specific undefined behavior checking. At least, if I compile a C test using clang -fsanitize=undefined I don't see any of these. Richard, am I right? > plus all the libs have: > w __cxa_demangle@@CXXABI_1.3 This beast is declared as weak: sanitizer_common/sanitizer_symbolizer_itanium.cc extern "C" char *__cxa_demangle(const char *mangled, char *buffer, size_t *length, int *status) SANITIZER_WEAK_ATTRIBUTE; If we have the C++ run-time linked-in, we can use __cxa_demangle. If we don't have the C++ run-time, we most likely don't need __cxa_demangle either. You can confirm this by building some C program with "clang -fsanitize=address" -- it will not depend on libc++. --kcc > > Jakub