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

Anton Korobeynikov anton at korobeynikov.info
Fri Feb 13 10:48:14 PST 2015


Since the stuff is heavily broken at this moment, shall we revert the
detection stuff for a moment?

On Fri, Feb 13, 2015 at 7:36 PM, Saleem Abdulrasool
<compnerd at compnerd.org> wrote:
> 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
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



-- 
With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University



More information about the cfe-commits mailing list