As a step to fix libunwind unw_step(), a new function
__gnu_unwind_frame() has been introduced to libunwind, and it is
required to use this function so that some libunwind internal data
structure can be updated properly.
llvm-svn: 238561
So cmake will throw error "include_directories given empty-string as include directory".
Use other variable name for the include path and do not find the default libunwind.h in the system path.
http://reviews.llvm.org/D9641
Patch by Jingyi Wei!
llvm-svn: 236936
Function pointers and member function pointers cannot be converted to void*.
libc++abi incorrectly allows this conversion for function pointers.
Review URL: http://reviews.llvm.org/D8811
llvm-svn: 236299
This papers over a layering violation currently between libc++abi and libunwind.
It reaches into the sources to get the declaration of an ABI defined function.
This should allow the ARM buildbot to continue building libc++abi again.
llvm-svn: 235965
Attempting to default the option to ON for ARM doesnt seem to work. Force the
check lower and perform the check at the two sites that matter: the CPPFLAGS
definition and the header search path setup.
llvm-svn: 235964
libc++abi uses EHABI extensions, which are only part of the LLVM unwinder. When
targeting ARM by default, enable the use of the LLVM unwinder. Hopefully this
will fix the ARM native bot
llvm-svn: 235904
The externC variable was set but unused. This constantly flagged a warning from
gcc. Replace it with a comment until such a time that we need it.
llvm-svn: 235830
Cleans up the -Wundef warning caused by the use of the __LITTLE_ENDIAN__ macro.
Instead use `__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__`. `__BYTE_ORDER__` is
defined by GCC since 4.2 and by clang. This avoids the undef case where a macro
may be undefined. This has previously caught real errors in libunwind.
llvm-svn: 235828
This removes the libunwind build infrastructure as libunwind is gaining its own
CMakeLists.txt. The removal must occur first due to the multiple definitions of
the same target.
llvm-svn: 235794
Summary:
I accidentally implemented the 4.11 [conv.mem] conversions for libc++abi in a recent patch. @majnemer pointed out that 5.13 [except.handle] only allows the pointer conversions in 4.10 and not those is 4.11. This patch no longer allows the following example code:
```c++
struct A {};
struct B : public A {};
int main() {
try {
throw (int A::*)0;
} catch (int B::*) {
// exception caught here.
}
}
```
Reviewers: mclow.lists, jroelofs, majnemer
Reviewed By: majnemer
Subscribers: majnemer, cfe-commits
Differential Revision: http://reviews.llvm.org/D8845
llvm-svn: 234254
Summary:
Currently there are bugs in out detection of multi-level pointer conversions and pointer to member conversions. This patch fixes the following issues.
* Allow multi-level pointers with different nested qualifiers.
* Allow multi-level mixed pointers to objects and pointers to members with different nested qualifiers.
* Allow conversions from `int Base::*` to `int Derived::*` but only for non-nested pointers.
There is still some work that needs to be done to clean this patch up but I want to get some input on it.
Open questions:
* Does `__pointer_to_member_type_info::can_catch(...)` need to adjust the pointer if a base to derived conversion is performed?
Reviewers: danalbert, compnerd, mclow.lists
Reviewed By: mclow.lists
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D8758
llvm-svn: 233984
The unwinder now works on CloudABI. All exception-related libc++ tests
now pass.
This change was actually part of D8169, which also adds support for
FreeBSD. That, however, still requires some more polishing.
llvm-svn: 233676
There is some debugging code in cxa_demangle.cpp that prints messages on
stdout. In general this is not safe, as the program itself may use
stdout to write its output. Change this code to write to stderr.
Differential Revision: http://reviews.llvm.org/D8167
llvm-svn: 232716
Summary: This patch fixes a bug in `readEncodedPointer()` where it would read from memory that was not suitably aligned. This patch fixes it by using memcpy.
Reviewers: danalbert, echristo, compnerd, mclow.lists
Reviewed By: compnerd, mclow.lists
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D8179
llvm-svn: 231839
These are also part of the Unwind interfaces. However, their implementation is
different in EHABI vs frame tables based exception handling. Always provide a
definition. This partially undoes a movement change from earlier to make the
handling a bit simpler rather than grouping the two implementations together.
llvm-svn: 231690
These interfaces are not zero cost related, but rather generic unwind APIs used
by consumers of the Unwind library. Always provide the definition as they are
needed for both Zero Cost and Frame Table based implementations.
llvm-svn: 231666
Linux/GNU on AArch64 EH ABI Level III is implemented using exception frame
tables as defined in LSB II.11.6. The exception frame tables use the DWARF
Exception Header Encoding as described in LSB II.11.5.1. We already defined the
appropriate definition _LIBUNWIND_SUPPORT_DWARF_UNWIND to enable this.
llvm-svn: 231580
AArch64 uses // as the comment character (although, Darwin uses ;). However,
since we are using the C preprocessor on these files, // can be used as the
comment character across the board.
Tweak the platform guard to recognise __aarch64__ as well as __arm64__ for the
platform identifier.
llvm-svn: 231578
- GCC doesn't support #pragma mark, only Apple GCC and clang. Wrap the pragma mark's in #if 0 to make gcc ignore them but xcode still see them.
- Wrap a bunch of "#pragma clang" lines in #ifdef __clang__.
- Pacify gcc's -Wparenthesis in a case where it's quite reasonable.
llvm-svn: 231344
Summary:
This patch builds both static and shared versions of libc++abi by default. It adds/repurposes the following cmake options:
* `LIBCXXABI_ENABLE_SHARED`: Enable/disable building the shared library. (Previously using `OFF` would build the static library instead)
* `LIBCXXABI_ENABLE_STATIC`: Enable/disable building the static library.
This patch also re-purposes the CMake target `cxxabi` to be a meta-target for `cxxabi_shared` and `cxxabi_static`. This could potentially break other builds that depend on `cxxabi` being a library target. We will need to apply a patch to libc++'s CMake before committing this change.
Running the tests is still only supported when the shared version is built. Support for running the tests against the static library will come in another patch.
Reviewers: jroelofs, mclow.lists, danalbert, compnerd
Reviewed By: danalbert, compnerd
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D8013
llvm-svn: 231075
The support for the LSB eh_frame_hdr extension was overzealous in trying to
include headers. Be more careful to permit building on Darwin.
llvm-svn: 230837
This improves the performance of unwinding on DWARF based targets. The
32-bit x86 support for scanning the full eh_frame
(CFI_Parser::findFDE) apparently does not work (at least not on
Linux). Since the eh_frame_hdr code delegates to that, this still
doesn't work for x86 Linux, but it has been tested on x86_64 Linux and
aarch64 Android.
llvm-svn: 230802
TODO: The iwmmx register save & restore functions still need the same treatment.
I didn't do that in this patch because the integrated assembler has a bug
where it refuses to build them on -march=armv6-m, even with
.march armv5t
.arm
in front of those functions.
This should fix PR22384.
http://reviews.llvm.org/D7258
llvm-svn: 230360
Adding just -fno-exceptions breaks libunwind in quite mysterious way
when it's there, but exception handling doesn't work because of dummy
unwind tables.
Also as using exceptions implies references to symbols defined in
libcxx, abort build of libcxxabi as shared library if we have to keep
exceptions (when compiler supports -fno-exceptions, but not
-funwind-tables; one example would be a cross-compiler, in which case
testing for -funwind-tables flag by CMake actually requires libunwind to
be available before it's built).
llvm-svn: 229427
It seems that the remote unwinder is entirely unused at this moment.
unw_local_addr_space was referencing sThisAddressSpace which use to be a static
in global namespace. It has since then become a member variable of
LocalAddressSpace. Update this definition and always export it (needed to
implement unw_get_proc_info_by_ip for ARM).
llvm-svn: 229133
The statically allocated strings have a fixed size which can be computed using
the sizeof operator rather than duplicating the allocation size which can drift.
NFC.
llvm-svn: 229126
Instead of bzero(), we can simply use memset(). The strcpy() calls are
unneeded, as we can simply keep track of a pointer to the constant
strings we are copying.
Reviewed by: Jonathan Roelofs
llvm-svn: 229074
Convert the register saving code to use an explicit memcpy rather than the
implicit memcpy from the assignment. This avoids warnings from -Wcast-qual on
GCC and makes the code more explicit. Furthermore, use sizeof to calculate the
offsets rather than adding magic numbers, improving legibility of the code.
NFC.
llvm-svn: 228904
Ideally, we would do something like inline __declspec(dllexport) to ensure that
the symbol was inlined within libunwind as well as emitted into the final DSO.
This simply moves the definition out of the header to ensure that the *public*
interfaces are defined and exported into the final DSO.
This change also has "gratuitous" code movement so that the EHABI and generic
implementations are co-located making it easier to find them.
The movement from the header has one minor change introduced into the code:
additional tracing to mirror the behaviour of the non-EHABI interfaces.
llvm-svn: 228903
This is a slightly convoluted workaround. GCC does not support the
__has_feature extension of clang, and this results in some issues with
static_asserts. config.h defines static_assert as a macro with a C-specific
trickery. This then propagates into the C++ headers included after config.h,
which are used with C++11 mode, enabling constexpr constructors. The macro'ed
static_assert does not get treated as the static_assert builtin, and will cause
an error due to a non-empty constexpr constructor. Tweaking the include order
permits the use of libc++ headers to build libunwind with GCC on Linux.
llvm-svn: 228809
Mark that the functions always return or abort if the register class is
unhandled. Avoid placing the abort in the switch to permit -Wswitch-cover to
catch missing values.
llvm-svn: 228808