Commit Graph

684 Commits

Author SHA1 Message Date
Petr Hosek aa96d2ebbc [libcxxabi][CMake] Provide option to disable installing of the library
This is useful in cases where we only build static library and
libc++abi.a is combined with libc++.a into a single archive in which
case we don't want to have libc++abi.a installed separately. The same
option is already provided by libcxx CMake build.

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

llvm-svn: 318568
2017-11-17 23:25:09 +00:00
Petr Hosek 56a1f07156 [CMake][libcxxabi] Support merging objects when statically linking unwinder
When using LLVM unwinder and static unwinder option is set, merge
libunwind and libc++abi objects into a single archive. libc++ already
supports merging libc++abi.a and libc++.a into a single archive; with
this change, it is possible to also include libunwind.a in the same
archive which is useful when doing static link and using libc++ as
a default C++ library and compiler-rt as a default runtime library.

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

llvm-svn: 318563
2017-11-17 22:49:39 +00:00
Stephan Bergmann 511c284b82 Remove excess whitespace from syslog message; NFC
llvm-svn: 318043
2017-11-13 15:40:31 +00:00
Eric Fiselier c4600ccf89 Fix ASAN build with older compiler-rt versions.
compiler-rt recently added the __asan_handle_no_return() function that libc++abi
needs to use, however older versions of compiler-rt don't declare this interface
publicly and that breaks the libc++abi build.

This patch attempts to fix the issues by declaring the asan function explicitly,
so we don't depend on compiler-rt to provide the declaration.

llvm-svn: 313308
2017-09-14 22:37:34 +00:00
Eric Fiselier 8635f7d2c6 [libc++abi] Fix ASAN build with older compiler-rt versions.
Summary:
compiler-rt recently added the `__asan_handle_no_return()` function that libc++abi needs to use, however older versions of compiler-rt don't provide this interface and that breaks the libc++abi build.

This patch attempts to fix the issues by using a macro to detect if `asan_interface.h` is new enough to provide the function.

See D37871

Reviewers: phosek, vitalybuka

Reviewed By: phosek, vitalybuka

Subscribers: dberris, cfe-commits

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

llvm-svn: 313304
2017-09-14 22:19:28 +00:00
Petr Hosek 229e0854ed Reland "When built with ASan, __cxa_throw calls __asan_handle_no_return"
The ASan runtime on many systems intercepts cxa_throw just so it
can call asan_handle_no_return first. Some newer systems such as
Fuchsia don't use interceptors on standard library functions at all,
but instead use sanitizer-instrumented versions of the standard
libraries. When libc++abi is built with ASan, cxa_throw can just
call asan_handle_no_return itself so no interceptor is required.

Patch by Roland McGrath

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

llvm-svn: 313215
2017-09-13 23:35:07 +00:00
Petr Hosek a69a3a3f62 Revert "[libcxxabi] When built with ASan, __cxa_throw calls __asan_handle_no_return"
This reverts commit r312606 because it's causing an error on
libcxx-libcxxabi-x86_64-linux-ubuntu-asan bot.

llvm-svn: 312609
2017-09-06 03:00:42 +00:00
Petr Hosek 53335d6d86 [libcxxabi] When built with ASan, __cxa_throw calls __asan_handle_no_return
The ASan runtime on many systems intercepts cxa_throw just so it
can call asan_handle_no_return first. Some newer systems such as
Fuchsia don't use interceptors on standard library functions at all,
but instead use sanitizer-instrumented versions of the standard
libraries. When libc++abi is built with ASan, cxa_throw can just
call asan_handle_no_return itself so no interceptor is required.

This is a re-land of r311045, which has become safe after r311869
changed compiler-rt to declare __asan_handle_no_return.

Patch by Roland McGrath

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

llvm-svn: 312606
2017-09-06 02:43:54 +00:00
Petr Hosek ce7aa6f2bd Revert "[libcxxabi] When built with ASan, __cxa_throw calls __asan_handle_no_return"
This reverts commit r311045 because it's causing an error on
libcxx-libcxxabi-x86_64-linux-ubuntu-asan bot.

llvm-svn: 311047
2017-08-16 22:05:54 +00:00
Petr Hosek 00135562e5 [libcxxabi] When built with ASan, __cxa_throw calls __asan_handle_no_return
The ASan runtime on many systems intercepts cxa_throw just so it
can call asan_handle_no_return first. Some newer systems such as
Fuchsia don't use interceptors on standard library functions at all,
but instead use sanitizer-instrumented versions of the standard
libraries. When libc++abi is built with ASan, cxa_throw can just
call asan_handle_no_return itself so no interceptor is required.

Patch by Roland McGrath

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

llvm-svn: 311045
2017-08-16 21:58:09 +00:00
Erik Pilkington a95eae2d4b [demangler] Fix some more -Wshadow warnings I missed in r310535
llvm-svn: 310546
2017-08-10 02:48:13 +00:00
Erik Pilkington f514ccadbd [demangler] Fix a bunch of -Wshadow warnings
These were causing failures in -Werror builds.

llvm-svn: 310535
2017-08-09 22:45:35 +00:00
Erik Pilkington 7377525fce Mark test as unsupported c++98/03 to fix buildbots
llvm-svn: 310530
2017-08-09 21:51:56 +00:00
Erik Pilkington ab04a08c49 [demangler] Improve representation of substitutions/templates
Differential revision: https://reviews.llvm.org/D36427

llvm-svn: 310525
2017-08-09 21:30:57 +00:00
Erik Pilkington 512253292c [demangler] Rename some variables, NFC
llvm-svn: 310415
2017-08-08 20:57:10 +00:00
Shoaib Meenai 1285013dbe [libc++abi] Use proper calling convention for TLS destructor
This is needed when using Windows threading.

llvm-svn: 310329
2017-08-08 00:54:33 +00:00
Erik Pilkington 39dc8800c1 [demangler] Fix another oss-fuzz bug
llvm-svn: 310226
2017-08-06 20:46:33 +00:00
Erik Pilkington 906d585686 [demangler] Fix another bug found by oss-fuzz in r309340
llvm-svn: 309650
2017-08-01 02:38:41 +00:00
Erik Pilkington deec87836a [demangler] Use _LIBCPP_UNREACHABLE()
llvm-svn: 309649
2017-08-01 02:38:40 +00:00
NAKAMURA Takumi 83105a4ae1 libcxxabi: Suppress LLVM_ENABLE_MODULES
Differential Revision: https://reviews.llvm.org/D35542

llvm-svn: 309551
2017-07-31 09:35:08 +00:00
Erik Pilkington 39bbe2f5de [demangler] Fix some bugs in r309340 found by oss-fuzz
llvm-svn: 309520
2017-07-30 20:09:55 +00:00
Erik Pilkington fe33551051 [demangler] Fix some overzealous -Wreturn-type errors
llvm-svn: 309349
2017-07-28 01:35:14 +00:00
Erik Pilkington bdfd1228f6 [demangler] Attempt to fix linux bots, include <cstdio>
llvm-svn: 309342
2017-07-28 00:53:30 +00:00
Erik Pilkington 94d2ac7160 [demangler] Use an AST to represent demangled names
The demangler now demangles by producing an AST, then traverses that
AST to produce a demangled name. This is done for performance reasons,
now the demangler doesn't manuiplate std::strings, which hurt
performance and caused string operations to be inlined into the
parser, leading to large code size and stack usage.

Differential revision: https://reviews.llvm.org/D35159

llvm-svn: 309340
2017-07-28 00:43:49 +00:00
Hans Wennborg a25946c8e8 Update version to 6.0.0svn
llvm-svn: 308461
2017-07-19 13:42:18 +00:00
Erik Pilkington 28a4d0b981 [demangler] Respect try_to_parse_template_args
Fixes an exponential parse found by oss-fuzz.

llvm-svn: 307941
2017-07-13 19:37:37 +00:00
Eric Fiselier 84800d999c Remove dependancy on __refstring header; use local copy instead.
This patch removes the dependancy on libc++'s __refstring header,
which was only a header in the first place so that libc++abi could
build library code using it, and not because libc++ needed it in
the headers.

This patch allows libc++ to stop shipping <__refstring> publicaly
at the cost of duplicating it across projects. Ideally libc++abi
would always require the libc++ sources when building, but that's
a separate discussion I plan to start on the mailing lists shortly.

llvm-svn: 307748
2017-07-12 01:34:21 +00:00
Petr Hosek 60fe5792ae [libcxxabi][CMake] Add install path variable to allow overriding the destination
This is going to be used by the runtime build in the multi-target
setup to allow using different install prefix for each target.

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

llvm-svn: 307611
2017-07-11 01:42:26 +00:00
Erik Pilkington c113b96ec4 [Demangler] NFC: Don't make the parse_* functions templates
Differential revision: https://reviews.llvm.org/D35158

llvm-svn: 307482
2017-07-08 18:54:08 +00:00
Erik Pilkington ffac67419b [Demangler] NFC: Move Db struct to beginning of file
Differential revision: https://reviews.llvm.org/D35158

llvm-svn: 307481
2017-07-08 18:54:07 +00:00
Eric Fiselier ce02c1bc15 Fix incomplete type test on OS X; workaround weird DYLD_LIBRARY_PATH behavior
llvm-svn: 307230
2017-07-06 00:29:09 +00:00
Marshall Clow f74609b15f Add some catch(...) blocks to the tests so that if they fail, we get a good error message. No functional change.
llvm-svn: 305977
2017-06-22 00:49:03 +00:00
Eric Fiselier 187fd40ca4 Use _LIBCPP_FALLTHROUGH() to avoid warnings about [[gnu::fallthrough]] being unsupported
llvm-svn: 305500
2017-06-15 20:18:10 +00:00
Ismail Donmez dea7590a04 Set a default value for LIBCXXABI_LIBDIR_SUFFIX, fixes installing into lib64 after r304374
llvm-svn: 305278
2017-06-13 08:16:44 +00:00
Saleem Abdulrasool cf0e48ca01 build: use cmake to pass -std=c++11
Rather than manually checking for support for the spelling of the C++
standard, indicate to CMake that we require that the compiler support
C++11 and that we compile without the GNU extensions.  This simplifies
the flags handling in libc++abi itself by relying on CMake to translate
the flag and add it as appropriate.

llvm-svn: 305175
2017-06-11 23:59:26 +00:00
Saleem Abdulrasool e3568b4b3d build: use POSITION_INDEPENDENT_CODE CMake property
Use the POSITION_INDEPENDENT_CODE target property to indicate that we
should be building with -fPIC or the equivalent flag based on the
toolchain that we are using.  This makes the check more portable and
simplifies the flags management.  Because we don't want this setting to
propagate in the case of an in-tree build, set the property on the
targets we construct explicitly rather than setting
CMAKE_POSITION_INDEPENDENT_CODE to ON globally.

llvm-svn: 305174
2017-06-11 23:59:24 +00:00
Saleem Abdulrasool d1c2302fc5 cxa_demangle: fix -Wimplicit-fallthrough for GCC:7
Use the C++11 (formalised in C++17) tag to indicate a fallthrough in the
switch case.  Silences a -Wimplicit-fallthrough warning with gcc:7

llvm-svn: 305173
2017-06-11 22:57:31 +00:00
Saleem Abdulrasool 52bb919615 private_typeinfo: add missing field initializers
Cleanup the -Wmissing-field-initializers warnings from gcc:7 builds.
NFC.

llvm-svn: 305172
2017-06-11 22:57:26 +00:00
Martell Malone 2fdf185bea [libcxxabi] HandleLLVMOptions in out of tree build
Differential revision: https://reviews.llvm.org/D33753

llvm-svn: 304664
2017-06-03 17:23:19 +00:00
Martell Malone 062f8f00ae [libcxxabi] Rework CMakeLists.txt into modules
Refactor cmake to remove dependence on LLVM's cmake modules.
This improves handling of cmake checks when cross compiling and brings
libcxxabi in line with libcxx and other project modules.

Differential revision: https://reviews.llvm.org/D33635

llvm-svn: 304374
2017-06-01 00:09:20 +00:00
Eric Fiselier 27db230ab0 Remove requirement for libunwind sources. Patch by Shiz.
As per r241993, libunwind_ext.h is not used anymore, and thus only the public libunwind includes are needed.
This eases distro packaging efforts and removes an unneeded requirement for out-of-tree building.

Reviewed as D33178

llvm-svn: 304359
2017-05-31 22:11:42 +00:00
Erik Pilkington a34ea7583f [demangler] Fix a exponential string copying bug
The problem was that if base_name() was called from a context without
an actual base name, it could gulp up the entire string, which can
result in recursive duplications. The fix is to be more strict as to
what qualifies as a base name.

Differential revision: https://reviews.llvm.org/D33637

llvm-svn: 304113
2017-05-28 23:15:50 +00:00
Martell Malone 41119cd07b [libcxxabi] Disable DLL annotations on static
rL288692 renames
_LIBCXXABI_DISABLE_DLL_IMPORT_EXPORT to
_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS

llvm-svn: 304110
2017-05-28 22:46:50 +00:00
Martell Malone fedd33f155 [libcxxabi] iconv is not needed for mingw-w64
llvm-svn: 304026
2017-05-26 19:39:39 +00:00
Erik Pilkington 00efd50476 [Demangler] Remove a failing assert introduced in r303718
llvm-svn: 303806
2017-05-24 20:53:13 +00:00
Tamas Berghammer 8bc9b88a24 __cxa_demangle: Fix constructor cv qualifier handling
Summary:
Previously if we parsed a constructor then we set parsed_ctor_dtor_cv
to true and never reseted it. This causes issue when a template argument
references a constructor (e.g. type of lambda defined inside a
constructor) as we will have the parsed_ctor_dtor_cv flag set what will
cause issues when parsing later arguments.

Reviewers: EricWF, compnerd

Subscribers: cfe-commits

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

llvm-svn: 303737
2017-05-24 11:21:34 +00:00
Erik Pilkington 17dfebcc39 [demangler] Fix a crash in the demangler during parsing of a lamdba
The problem is that multiple types could have been parsed from parse_type(),
which the lamdba parameter parsing didn't handle.

Differential revision: https://reviews.llvm.org/D33368

llvm-svn: 303718
2017-05-24 05:44:19 +00:00
Akira Hatanaka 7d5d9dc18a [libcxxabi] Fix the test case committed in r303175.
Free the __cxa_exception object allocated with __cxa_allocate_exception.

This is an attempt to fix this asan bot:

http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-asan/builds/560

llvm-svn: 303194
2017-05-16 18:18:03 +00:00
Akira Hatanaka 0c1016a337 [libcxxabi] Align unwindHeader on a double-word boundary.
r276215 made a change to annotate _Unwind_Exception with attribute
"aligned" so that an exception object following field __cxa_exception
is sufficiently aligned. This fix hasn't been incorporated to unwind.h
on Darwin since it is an ABI breaking change.

Instead of annotating struct _Unwind_Exception with the attribute, this
commit annotates field unwindHeader of __cxa_exception. This ensures the
exception object is sufficiently aligned without breaking the ABI.

This recommits r302978 and r302981, which were reverted in r303016
because a libcxx test was failing on an AArch64 bot. I also modified the
libcxxabi test case to check the alignment of the pointer returned by
__cxa_allocate_exception rather than compiling the test with -O1 and
checking whether it segfaults.

rdar://problem/25364625

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

llvm-svn: 303175
2017-05-16 15:19:08 +00:00
Akira Hatanaka c1c78617e7 Revert r302978 and r302981.
Revert the two commits to understand why the following aarch64 bot is
failing.

http://lab.llvm.org:8011/builders/libcxx-libcxxabi-libunwind-aarch64-linux

llvm-svn: 303016
2017-05-14 18:46:19 +00:00