Move demangling utility to stdio

Closes #848
This commit is contained in:
Justine Tunney 2023-07-07 10:26:07 -07:00
parent a1dd777f22
commit 3a8579252d
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
5 changed files with 100 additions and 111 deletions

View file

@ -1,55 +0,0 @@
#ifndef _CXXABI_H
#define _CXXABI_H 1
#include "third_party/libcxx/cstddef"
namespace abi {
/**
* @brief Demangling routine.
* ABI-mandated entry point in the C++ runtime library for demangling.
*
* @param __mangled_name A NUL-terminated character string
* containing the name to be demangled.
*
* @param __output_buffer A region of memory, allocated with
* malloc, of @a *__length bytes, into which the demangled name is
* stored. If @a __output_buffer is not long enough, it is
* expanded using realloc. @a __output_buffer may instead be null;
* in that case, the demangled name is placed in a region of memory
* allocated with malloc.
*
* @param __length If @a __length is non-null, the length of the
* buffer containing the demangled name is placed in @a *__length.
*
* @param __status If @a __status is non-null, @a *__status is set to
* one of the following values:
* 0: The demangling operation succeeded.
* -1: A memory allocation failure occurred.
* -2: @a mangled_name is not a valid name under the C++ ABI mangling rules.
* -3: One of the arguments is invalid.
*
* @return A pointer to the start of the NUL-terminated demangled
* name, or a null pointer if the demangling fails. The caller is
* responsible for deallocating this memory using @c free.
*
* The demangling is performed using the C++ ABI mangling rules,
* with GNU extensions. For example, this function is used in
* __gnu_cxx::__verbose_terminate_handler.
*
* See https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html
* for other examples of use.
*
* @note The same demangling functionality is available via
* libiberty (@c <libiberty/demangle.h> and @c libiberty.a) in GCC
* 3.1 and later, but that requires explicit installation (@c
* --enable-install-libiberty) and uses a different API, although
* the ABI is unchanged.
*/
extern "C" char*
__cxa_demangle(const char* __mangled_name, char* __output_buffer,
size_t* __length, int* __status);
}
#endif

File diff suppressed because it is too large Load diff

View file

@ -67,7 +67,6 @@ THIRD_PARTY_LIBCXX_A_HDRS = \
third_party/libcxx/ctype.h \
third_party/libcxx/cwchar \
third_party/libcxx/cwctype \
third_party/libcxx/cxxabi.h \
third_party/libcxx/deque \
third_party/libcxx/errno.h \
third_party/libcxx/exception \
@ -144,7 +143,6 @@ THIRD_PARTY_LIBCXX_A_SRCS_CC = \
third_party/libcxx/chrono.cc \
third_party/libcxx/condition_variable.cc \
third_party/libcxx/condition_variable_destructor.cc \
third_party/libcxx/demangle.cc \
third_party/libcxx/exception.cc \
third_party/libcxx/functional.cc \
third_party/libcxx/future.cc \
@ -175,7 +173,6 @@ THIRD_PARTY_LIBCXX_A_SRCS = \
THIRD_PARTY_LIBCXX_A_OBJS = \
$(THIRD_PARTY_LIBCXX_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_LIBCXX_A_SRCS_C:%.c=o/$(MODE)/%.o) \
$(THIRD_PARTY_LIBCXX_A_SRCS_CC:%.cc=o/$(MODE)/%.o)
THIRD_PARTY_LIBCXX_A_CHECKS = \
@ -214,16 +211,6 @@ $(THIRD_PARTY_LIBCXX_A_OBJS): private \
-ffunction-sections \
-fdata-sections
# Super gross! But I found no way to do -fno-error=permissive
# this steps from the fact that demangle is a C++ file extension
# but the source I copied was written in C.
# The fix would be to go through all the casts and make them correct.
o/$(MODE)/third_party/libcxx/demangle.o: private \
CXXFLAGS += \
-fpermissive \
-Wno-error
THIRD_PARTY_LIBCXX_LIBS = $(foreach x,$(THIRD_PARTY_LIBCXX_ARTIFACTS),$($(x)))
THIRD_PARTY_LIBCXX_SRCS = $(foreach x,$(THIRD_PARTY_LIBCXX_ARTIFACTS),$($(x)_SRCS))
THIRD_PARTY_LIBCXX_HDRS = $(foreach x,$(THIRD_PARTY_LIBCXX_ARTIFACTS),$($(x)_HDRS))
@ -235,4 +222,3 @@ THIRD_PARTY_LIBCXX_OBJS = $(foreach x,$(THIRD_PARTY_LIBCXX_ARTIFACTS),$($(x)_OBJ
o/$(MODE)/third_party/libcxx: \
$(THIRD_PARTY_LIBCXX_CHECKS) \
$(THIRD_PARTY_LIBCXX_A)