History log of /ndk/sources/cxx-stl/gabi++/src/cxxabi.cc
Revision Date Author Comments
9d84a30e9bd404df28fdeee7afcc69786fc05c78 18-Nov-2015 Egor Kochetov <egor.kochetov@intel.com> Fixed segfault when throwing exceptions via gabi++

Replaced 'malloc' with 'memalign'.
See http://b.android.com/179410

Change-Id: Ib239c80d01a38e7205077febac1a39f3244e2ad7
Signed-off-by: Egor Kochetov <egor.kochetov@intel.com>
92f1ee6990752f26aebdbbfb5a87c474d3edd1e0 31-Dec-2013 Albert J. Wong <ajwong@google.com> Fix new.delete tests by correcting link methodology. Replace GABIXX_LIBCXX with LIBCXXABI.

Removed -Bsymbolic. Specified -O0 in testit_android because the optimizations
make some of the tests fail. Also replaced GABIXX_LIBCXX with LIBCXXABI
and gabi++ to reflect libc++abi, not libc++rt.

The linking of libc++_shared.so incorreclty specified -Bsymbolic
which, aside from causing issues with rtti and exception handlers,
also makes the default implementations of the array operator new,
and the single-object no-throw variant (both of which wrap the normal
single-object new) link directly to the single-object new rather than
jump through the PLT. This means that even if you override
single-object new, the default implementations of these other new
operators will NOT find the override. Bad bad bad.

Ideally, this should use -Bsymbolic-functions with
--dynamic-list-cpp-new and --dynamic-list-cpp-typeinfo so that the
linker can avoid a plt jump for most lookups, but somehow even with
the dynamic-list settings, the operator new/delete functions were
skipping the plt jump. Removed all of these options for now.

willchan, danakj, and thakis contributed to this patch.

BUG=36496

Change-Id: Iaaa25de365b6444e49ceaadaf9d0b1f442b9c85d
965d95b85241f2aabbc731e30e0abd9cebfab7f9 22-Nov-2013 David 'Digit' Turner <digit@android.com> gabi++: Do not use malloc() to allocate C++ thread-local objects.

This avoids a dead-lock when malloc() is called with libc.debug.malloc
defined to something other than 0 on userdebug/eng Android builds.

+ Add a unit test to check that this works.

BUG=61883

Change-Id: Ib7c023a549483fa950392041c7ab970c08eab6d0
2319d708f6756fde7f18e0bf276715f001521c5a 30-Oct-2013 David 'Digit' Turner <digit@android.com> gabi++: Add std::get_new_handler() and __cxa_deleted_virtual()

This patch adds two missing functions to GAbi++:

- std::get_new_handler() is used to retrieve the current std::new_handler

- __cxa_deleted_virtual() is used in C++11 vtables to point to
'deleted methods'.

+ Add missing _GABIXX_NOEXCEPT and _GABIXX_NORETURN declarations.

+ Change throw() declarations into _GABIXX_NOEXCEPT, when compiling
C++11, this translates into the allegedly more efficient 'noexcept'
statement.

Change-Id: Ia5beaba8b6926372b96fa154b23bb118ab064f3e
f345f1845a57834fa559114c27913c2f7a40f501 13-Aug-2013 Andrew Hsieh <andrewhsieh@google.com> Fixed stlport compilation warning with gcc4.8

under "-W -Wall -Wno-unused-parameter"

Change-Id: I3a1bb9ca752b9c2e0ca239889d87c3d513d989c0
d9767af301c97e0f825caead7cab9bfaf0d9e5e2 29-Jul-2013 David 'Digit' Turner <digit@android.com> gabi++: Add _GABIXX_NOEXCEPT.

This adds a new macro that will resolve to the C++11 'noexcept'
keyword, and to 'throw()' otherwise.

Change-Id: Ifa9b6643773b99eb1be5de28e6d27783f2942898
ce2be28ffd56784d084ece009d26a37f829cff00 29-Jul-2013 David 'Digit' Turner <digit@android.com> gabi++: Introduced _GABIXX_HIDDEN macro.

This patch introduces a new GAbi++ macro used to declare
functions that are internal to the library, and should never be
exposed to client code. This doesn't affect the visibility of
other symbols.

Change-Id: I1e4b8e9796fabcfefe4a6f98a47599dc0898fe85
7a9c37698a1e2cdd865b5db7b14f9781cb696da6 28-Jul-2013 David 'Digit' Turner <digit@android.com> gabi++: Fix terminate / unexpected thread-safety.

This patch makes all operations on terminate and unexpected
handlers properly thread-safe. This also marks the appropriate
functions as "noreturn".

+ Move internal <cxxabi.h> declarations to internal header
src/cxxabi_defines.h

+ Add new <gabixx_config.h> header.

+ Move some exception-specific code to src/exception.cc

+ Rename __cxxabiv1::fatalError() to __gabixx::__fatal_error() in
src/fatal_error.cc

+ Get rid of __cxa_thread_info.

Change-Id: If79bf0263cc5f0be1bbf782a7874125fd4923d17
a841250002d8fbe2c9536c8632290845d7f2451f 09-Apr-2013 Andrew Hsieh <andrewhsieh@google.com> Fix STLPORT_FORCE_REBUILD warnings with NDK_ANALYZE=1

Change-Id: I41ac3174d9e28b4a528b45bf012f09ceaa13ebe7
f616538a7f20e82157587efa026cedc3b9944542 12-Mar-2013 WenHan Gu <Wenhan.gu@mediatek.com> [Bug-fix] Remove redundant free on exception object.

__cxa_decrement_exception_refcount should not call exceptionDestructor()
directly, since __cxa_free_exception will do that.

Change-Id: I6ccfd66d21e08abbba15c704edef980a0cb769fc
Signed-off-by: WenHan Gu <Wenhan.gu@mediatek.com>
3fb3d58dd29ea2300583e9f02aa19882fc509286 12-Mar-2013 WenHan Gu <Wenhan.gu@mediatek.com> [Bug-fix] Wrong offset of pointer to be an argument.

According to spec, argument of __cxa_free_exception should be
the result of a call to __cxa_allocate_exception.

(Same problem on __cxa_increment_exception_refcount and
__cxa_decrement_exception_refcount).

Change-Id: I4b486f737513f2a5050e5723c8260245bf6d21c1
Signed-off-by: WenHan Gu <Wenhan.gu@mediatek.com>
fdf89810ae76eac8def019716322018499531410 04-Mar-2013 Albert J. Wong <ajwong@google.com> Make Hello World run with libcxx and gabi++.

This change does 2 things:

(1) Modifies gabi++ source compatible with libcxx.
(2) Adds stubs for missing libc functions needed by libcxx.

It introduces a new macro, GXXABI_LIBCXX, into gabi++ which conditionally
enables and disables functions in gabi++ to make the exported API behave
like libcxxabi's. Existing gabi++ code is also refactored to remove
symbols + APIs that shouldn't really be in namespace std.

Locale handling code has been patched to hobble along in the c-abi, but
there are TODOs.

The exception handling logic in gabi++ isn't complete, nor are the
libc stubs. Where incomplete functionality is introduced a
preprocess warning is left to indicate lack of functionality.

After this CL, it is possible to make a running Hello World using
libcxx on Android.

Change-Id: Iceafd6f8d6dead6b64320b0c0f852d579cceb34c
6bbe11ee3dcdb5d1f5a26dde6fb09b7ed85b57a5 21-Nov-2012 David 'Digit' Turner <digit@android.com> gabi++: Implement thread-safe C++ runtime support.

The current GAbi++ code is missing some code to make exception
handling work properly in multi-threaded contexts. This patch
adds the missing bits, while allowing the code to run properly
on devices that run platforms older than Froyo (see comments).

Change-Id: Iaa3e4faec19b731499261ef33731cf384cb432aa
7ae983a6ba4bf8ed27a64c492ed5a7178e389bc8 21-Nov-2012 David 'Digit' Turner <digit@android.com> GAbi++: Improve fatal error handling.

This patch does two things to improve fatal error handling in GAbi++:

- Change the default std::terminate() implementation to crash the
current process instead of calling abort(), in order to improve
debugging. See source code comments for details.

- Introduce a new internal fatalError() function that is used to
report errors to stderr and/or the log, then call std::terminate().

+ Add missing 'exceptions' tags to LOCAL_CPP_FEATURES.

Change-Id: I7e95ddc445ec85524a5091df464802e2f0be83ff
419afd910dc325e65df10b53e99e49c1eded6d26 19-Nov-2012 WenHan Gu <Wenhan.gu@mediatek.com> Make gabi++ support C++ exception handling.

After applying this patch, we can make gabi++
support full features on C++ exception handling.

This CL has run through tests in both ndk and GCC testsuites
(196 tests total) that are related to exception handling.
It achieves the same pass rate as gnustl library does!

NDK documentation states that upstream might support exception in gabi++.
Therefore, I did this patch to achieve the goal.

Change-Id: I59a448364b35054fcd9ba6ee33ca87380090d675