Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
[libcxxabi] Fix arm build failer with libgcc
Browse files Browse the repository at this point in the history
Both arm32 armv7/armv8 bots which do not use compiler-rt are failing
to a linking issue:

[100%] Built target cxxabi_static
CMakeFiles/cxxabi_shared.dir/cxa_demangle.cpp.o: In function `(anonymous namespace)::itanium_demangle::OutputStream::writeUnsigned(unsigned long long, bool)':
/home/buildslave/buildslave/libcxx-libcxxabi-libunwind-armv7-linux-noexceptions/llvm/projects/libcxxabi/src/demangle/Utility.h:55: undefined reference to `__aeabi_uldivmod'
/home/buildslave/buildslave/libcxx-libcxxabi-libunwind-armv7-linux-noexceptions/llvm/projects/libcxxabi/src/demangle/Utility.h:56: undefined reference to `__aeabi_uldivmod'
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)

It seems after r371273 OutputStream is used more extensively and
is pulling OutputStream::writeUnsigned (which thus requires unsigned
integer module).

The straightfoward fix is to explicit link against libgcc if
compiler-rt is not used.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@372921 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
zatrazz committed Sep 25, 2019
1 parent 61bb6c0 commit d2f56de
Showing 2 changed files with 12 additions and 2 deletions.
10 changes: 8 additions & 2 deletions cmake/config-ix.cmake
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ include(CheckCSourceCompiles)
check_library_exists(c fopen "" LIBCXXABI_HAS_C_LIB)
if (NOT LIBCXXABI_USE_COMPILER_RT)
check_library_exists(gcc_s __gcc_personality_v0 "" LIBCXXABI_HAS_GCC_S_LIB)
check_library_exists(gcc __aeabi_uldivmod "" LIBCXXABI_HAS_GCC_LIB)
endif ()

# libc++abi is built with -nodefaultlibs, so we want all our checks to also
@@ -26,8 +27,13 @@ if (LIBCXXABI_HAS_NODEFAULTLIBS_FLAG)
list(APPEND CMAKE_REQUIRED_FLAGS -rtlib=compiler-rt)
find_compiler_rt_library(builtins LIBCXXABI_BUILTINS_LIBRARY)
list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBCXXABI_BUILTINS_LIBRARY}")
elseif (LIBCXXABI_HAS_GCC_S_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES gcc_s)
else ()
if (LIBCXXABI_HAS_GCC_S_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES gcc_s)
endif ()
if (LIBCXXABI_HAS_GCC_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES gcc)
endif ()
endif ()
if (MINGW)
# Mingw64 requires quite a few "C" runtime libraries in order for basic
4 changes: 4 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -91,6 +91,10 @@ if (MINGW)
list(APPEND LIBCXXABI_LIBRARIES ${MINGW_LIBRARIES})
endif()

if (NOT LIBCXXABI_USE_COMPILER_RT)
add_library_flags_if(LIBCXXABI_HAS_GCC_LIB gcc)
endif ()

# Setup flags.
add_link_flags_if_supported(-nodefaultlibs)

0 comments on commit d2f56de

Please sign in to comment.