[libcxxabi] r228408 - unwind: use -fno-rtti -fno-exceptions -funwind-tables

Saleem Abdulrasool compnerd at compnerd.org
Fri Feb 13 08:36:30 PST 2015


On Thu, Feb 12, 2015 at 1:13 PM, Sergey Dmitrouk <sdmitrouk at accesssoftek.com
> wrote:

> How about the attached patch?  Seems to work for me (it's trivial, but
> syntax is weird, so I wasn't sure).


It would prevent building unwind as a DSO without libc++abi linked in, so,
this isn't the way to handle this.  I think you need to tweak the detection
of the -funwind-tables option.


>
> --
> Sergey
>
> On Thu, Feb 12, 2015 at 07:36:14AM -0800, Sergey Dmitrouk wrote:
> > On Thu, Feb 12, 2015 at 07:13:09AM -0800, Saleem Abdulrasool wrote:
> > >    I've been successful with clang as well.
> > >    Reproduction steps would help in identifying what is happening.
> >
> > Looks like I found the culprit, it's CMake.  I'm cross compiling
> > libcxxabi for ARM on x86_64 host, compiler targets ARM only (so ARM is
> > also the default target).  cmake/config-ix.cmake contains (also note
> "_c_"
> > instead of "_cxx_", but it doesn't affect results):
> >
> >     check_c_compiler_flag(-funwind-tables LIBCXXABI_HAS_FUNWIND_TABLES)
> >
> > This test fails on linking stage:
> >
> >     CMakeFiles/cmTryCompileExec3829915952.dir/src.cxx.o:(.ARM.exidx+0x0):
> >     undefined reference to `__aeabi_unwind_cpp_pr0'
> >
> > because successful linking requires symbol defined in libunwind (and
> that's
> > what is being built).  Now here:
> >
> >     append_if(LIBUNWIND_COMPILE_FLAGS LIBCXXABI_HAS_NO_EXCEPTIONS_FLAG
> -fno-exceptions)
> >     append_if(LIBUNWIND_COMPILE_FLAGS LIBCXXABI_HAS_NO_RTTI_FLAG
> -fno-rtti)
> >     append_if(LIBUNWIND_COMPILE_FLAGS LIBCXXABI_HAS_FUNWIND_TABLES
> -funwind-tables)
> >
> > `-fno-exceptions` is added, but not `-funwind-tables`.  As a result
> > libunwind sees "can't unwind" marker in exidx records and gives up.
> >
> > I found this bug report, which seems to be related:
> >     http://www.cmake.org/Bug/view.php?id=15264
> >
> > Not adding `-fno-exceptions` flag if `-funwind-tables` isn't available
> seems
> > to be reasonable by itself, but will also work around this issue with
> CMake.
> >
> > --
> > Sergey
>



-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150213/976d847e/attachment.html>


More information about the cfe-commits mailing list