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

Saleem Abdulrasool compnerd at compnerd.org
Wed Feb 11 21:46:36 PST 2015


On Wed, Feb 11, 2015 at 12:21 PM, Sergey Dmitrouk <
sdmitrouk at accesssoftek.com> wrote:

> Hi,
>
> Although code compiles and works in most cases, part of this change (namely
> addition of `-fno-exceptions` flag) seems to break exception handling on
> ARM.
> E.g. `catch` doesn't work in this example and `std::terminate()` is
> invoked:
>
>     int main(void)
>     {
>         try
>         {
>             throw 1;
>         }
>         catch (int)
>         {
>         }
>         return 0;
>     }
>
> Is it possible that `-fno-exceptions` makes Clang skip generation of
> some auxiliary data, which results in such strange behaviour?
>
> It's not just about `int` type, class types were not caught as well even
> with `catch (...)` statement.  In fact almost all tests under
> test-suite/SingleSource/Regression/C++/EH failed.
>
> Anyone else seeing this?  libcxxabi is used with LLVM, Clang, compiler-rt
> and libcxx here.
>

Can you provide more information about how you are building things?
Perhaps an exact set of steps to reproduce this.  The change should only
effects unwind.  As such, the following is sufficient for checking the
result:

$ cat reduced.cc
extern "C" int printf(const char *, ...);
int main(int argc, char **argv) {
  try { throw 1; } catch (const int &i) { printf("caught %u\n", i); }
  return 0;
}
$ armv7a-hardfloat-linux-gnueabi-g++-4.8.3 -fno-stack-protector -c
reduced.cc -o reduced.o
$ armv7a-hardfloat-linux-gnueabi-g++-4.8.3 -nodefaultlibs reduced.o -o
reduced -Llib -lunwind -lc -lc++abi
$ LD_LIBRARY_PATH=lib ./reduced
caught 1

That was with current ToT of libc++abi and libunwind (LLVM).


> Regards,
> Sergey
>
> On Fri, Feb 06, 2015 at 09:47:57AM -0800, Saleem Abdulrasool wrote:
> > Author: compnerd
> > Date: Fri Feb  6 11:47:57 2015
> > New Revision: 228408
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=228408&view=rev
> > Log:
> > unwind: use -fno-rtti -fno-exceptions -funwind-tables
> >
> > RTTI and exceptions are not needed for the unwinder, the use of C++
> there is for
> > very specific cases, and does not require dynamic_cast nor does it use
> > exceptions.  This avoids unnecessary references to type information being
> > emitted.
> >
> > Modified:
> >     libcxxabi/trunk/cmake/config-ix.cmake
> >     libcxxabi/trunk/src/Unwind/CMakeLists.txt
> >
> > Modified: libcxxabi/trunk/cmake/config-ix.cmake
> > URL:
> http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/cmake/config-ix.cmake?rev=228408&r1=228407&r2=228408&view=diff
> >
> ==============================================================================
> > --- libcxxabi/trunk/cmake/config-ix.cmake (original)
> > +++ libcxxabi/trunk/cmake/config-ix.cmake Fri Feb  6 11:47:57 2015
> > @@ -5,6 +5,8 @@ include(CheckCXXCompilerFlag)
> >  # Check compiler flags
> >  check_c_compiler_flag(-funwind-tables
>  LIBCXXABI_HAS_FUNWIND_TABLES)
> >  check_cxx_compiler_flag(-fPIC                 LIBCXXABI_HAS_FPIC_FLAG)
> > +check_cxx_compiler_flag(-fno-exceptions
>  LIBCXXABI_HAS_NO_EXCEPTIONS_FLAG)
> > +check_cxx_compiler_flag(-fno-rtti
>  LIBCXXABI_HAS_NO_RTTI_FLAG)
> >  check_cxx_compiler_flag(-fstrict-aliasing
>  LIBCXXABI_HAS_FSTRICT_ALIASING_FLAG)
> >  check_cxx_compiler_flag(-nodefaultlibs
> LIBCXXABI_HAS_NODEFAULTLIBS_FLAG)
> >  check_cxx_compiler_flag(-nostdinc++
>  LIBCXXABI_HAS_NOSTDINCXX_FLAG)
> >
> > Modified: libcxxabi/trunk/src/Unwind/CMakeLists.txt
> > URL:
> http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/Unwind/CMakeLists.txt?rev=228408&r1=228407&r2=228408&view=diff
> >
> ==============================================================================
> > --- libcxxabi/trunk/src/Unwind/CMakeLists.txt (original)
> > +++ libcxxabi/trunk/src/Unwind/CMakeLists.txt Fri Feb  6 11:47:57 2015
> > @@ -68,6 +68,11 @@ target_link_libraries(unwind ${libraries
> >  append_if(LIBCXXABI_COMPILE_FLAGS LIBCXXABI_HAS_FPIC_FLAG -fPIC)
> >  append_if(LIBCXXABI_LINK_FLAGS LIBCXXABI_HAS_NODEFAULTLIBS_FLAG
> -nodefaultlibs)
> >
> > +set(LIBUNWIND_COMPILE_FLAGS)
> > +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)
> > +
> >  set(LIBCXXABI_UNWINDER_NAME "unwind")
> >
> >  if ( APPLE )
> > @@ -86,11 +91,12 @@ if ( APPLE )
> >  endif()
> >
> >  string(REPLACE ";" " " LIBCXXABI_COMPILE_FLAGS
> "${LIBCXXABI_COMPILE_FLAGS}")
> > +string(REPLACE ";" " " LIBUNWIND_COMPILE_FLAGS
> "${LIBUNWIND_COMPILE_FLAGS}")
> >  string(REPLACE ";" " " LIBCXXABI_LINK_FLAGS "${LIBCXXABI_LINK_FLAGS}")
> >
> >  set_target_properties(unwind
> >    PROPERTIES
> > -    COMPILE_FLAGS "${LIBCXXABI_COMPILE_FLAGS}"
> > +    COMPILE_FLAGS "${LIBCXXABI_COMPILE_FLAGS}
> ${LIBUNWIND_COMPILE_FLAGS}"
> >      LINK_FLAGS    "${LIBCXXABI_LINK_FLAGS}"
> >      OUTPUT_NAME   "${LIBCXXABI_UNWINDER_NAME}"
> >      VERSION       "1.0"
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



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


More information about the cfe-commits mailing list