[compiler-rt] Build custom libc++abi without exceptions.

Summary:
Since neither compiler-rt nor the libc++ we build use exceptions, we
don't need libc++abi to have them either.

This resolves an issue where libFuzzer's private libc++ contains
implementations for __cxa_throw and friends, causing fuzz targets built
with their own C++ library to segfault during exception unwinding.

See https://github.com/google/oss-fuzz/issues/2328.

Reviewers: phosek, EricWF, kcc

Reviewed By: phosek

Subscribers: kcc, dberris, mgorny, christof, llvm-commits, metzman

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D61053

llvm-svn: 359218
This commit is contained in:
Matt Morehouse 2019-04-25 18:14:24 +00:00
parent 538bbe5814
commit 42ef2c6d06
2 changed files with 16 additions and 0 deletions

View File

@ -4,6 +4,7 @@ project(custom-libcxx C CXX)
# Build static libcxxabi.
set(LIBCXXABI_STANDALONE_BUILD 1)
set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE STRING "")
set(LIBCXXABI_LIBCXX_PATH ${COMPILER_RT_LIBCXX_PATH} CACHE PATH "")
set(LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL "")

View File

@ -0,0 +1,15 @@
# Ensures that the libFuzzer library does not export exceptions.
RUN: %cpp_compiler %S/SimpleTest.cpp -o %t
RUN: nm %t 2>&1 | FileCheck %s
CHECK-NOT: t __cxa_allocate_dependent_exception
CHECK-NOT: t __cxa_allocate_exception
CHECK-NOT: t __cxa_begin_catch
CHECK-NOT: t __cxa_call_unexpected
CHECK-NOT: t __cxa_current_exception_type
CHECK-NOT: t __cxa_end_catch
CHECK-NOT: t __cxa_free_dependent_exception
CHECK-NOT: t __cxa_free_exception
CHECK-NOT: t __cxa_get_exception_ptr
CHECK-NOT: t __cxa_throw