summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2019-10-01 18:43:02 +0000
committerLouis Dionne <ldionne@apple.com>2019-10-01 18:43:02 +0000
commit04501a22a073d0f64e980aaa8c895a6e86c0a103 (patch)
treef6fcc36facda36f7093498ea88cad3b7b69f1a6c
parentae40dfc1e3ce5f64be3234ed7958792f15800181 (diff)
downloadbcm5719-llvm-04501a22a073d0f64e980aaa8c895a6e86c0a103.tar.gz
bcm5719-llvm-04501a22a073d0f64e980aaa8c895a6e86c0a103.zip
[libc++abi] Remove uses of C++ headers when possible
This reduces the (circular) dependency of libc++abi on a C++ standard library. Outside of the demangler which uses fancier C++ features, the only C++ headers now required by libc++abi are pretty much <new> and <exception>, and that's because libc++abi defines some types that are declared in those headers. llvm-svn: 373381
-rw-r--r--libcxxabi/src/cxa_default_handlers.cpp6
-rw-r--r--libcxxabi/src/cxa_exception.cpp11
-rw-r--r--libcxxabi/src/cxa_thread_atexit.cpp6
-rw-r--r--libcxxabi/src/cxa_vector.cpp2
-rw-r--r--libcxxabi/src/fallback_malloc.cpp14
-rw-r--r--libcxxabi/src/fallback_malloc.h2
-rw-r--r--libcxxabi/src/private_typeinfo.h4
7 files changed, 21 insertions, 24 deletions
diff --git a/libcxxabi/src/cxa_default_handlers.cpp b/libcxxabi/src/cxa_default_handlers.cpp
index 91a63f53766..97192bc788f 100644
--- a/libcxxabi/src/cxa_default_handlers.cpp
+++ b/libcxxabi/src/cxa_default_handlers.cpp
@@ -8,10 +8,8 @@
// This file implements the default terminate_handler and unexpected_handler.
//===----------------------------------------------------------------------===//
-#include <stdexcept>
-#include <new>
#include <exception>
-#include <cstdlib>
+#include <stdlib.h>
#include "abort_message.h"
#include "cxxabi.h"
#include "cxa_handlers.h"
@@ -87,7 +85,7 @@ static void demangling_unexpected_handler()
static std::terminate_handler default_terminate_handler = demangling_terminate_handler;
static std::terminate_handler default_unexpected_handler = demangling_unexpected_handler;
#else
-static std::terminate_handler default_terminate_handler = std::abort;
+static std::terminate_handler default_terminate_handler = ::abort;
static std::terminate_handler default_unexpected_handler = std::terminate;
#endif
diff --git a/libcxxabi/src/cxa_exception.cpp b/libcxxabi/src/cxa_exception.cpp
index 7d56c424e62..54bd1dff399 100644
--- a/libcxxabi/src/cxa_exception.cpp
+++ b/libcxxabi/src/cxa_exception.cpp
@@ -13,7 +13,7 @@
#include "cxxabi.h"
#include <exception> // for std::terminate
-#include <cstring> // for memset
+#include <string.h> // for memset
#include "cxa_exception.h"
#include "cxa_handlers.h"
#include "fallback_malloc.h"
@@ -163,13 +163,12 @@ static size_t get_cxa_exception_offset() {
} __attribute__((aligned));
// Compute the maximum alignment for the target machine.
- constexpr size_t alignment = std::alignment_of<S>::value;
+ constexpr size_t alignment = alignof(S);
constexpr size_t excp_size = sizeof(__cxa_exception);
constexpr size_t aligned_size =
(excp_size + alignment - 1) / alignment * alignment;
constexpr size_t offset = aligned_size - excp_size;
- static_assert((offset == 0 ||
- std::alignment_of<_Unwind_Exception>::value < alignment),
+ static_assert((offset == 0 || alignof(_Unwind_Exception) < alignment),
"offset is non-zero only if _Unwind_Exception isn't aligned");
return offset;
}
@@ -193,7 +192,7 @@ void *__cxa_allocate_exception(size_t thrown_size) throw() {
std::terminate();
__cxa_exception *exception_header =
static_cast<__cxa_exception *>((void *)(raw_buffer + header_offset));
- std::memset(exception_header, 0, actual_size);
+ ::memset(exception_header, 0, actual_size);
return thrown_object_from_cxa_exception(exception_header);
}
@@ -216,7 +215,7 @@ void * __cxa_allocate_dependent_exception () {
void *ptr = __aligned_malloc_with_fallback(actual_size);
if (NULL == ptr)
std::terminate();
- std::memset(ptr, 0, actual_size);
+ ::memset(ptr, 0, actual_size);
return ptr;
}
diff --git a/libcxxabi/src/cxa_thread_atexit.cpp b/libcxxabi/src/cxa_thread_atexit.cpp
index 392403bd047..923b265b27c 100644
--- a/libcxxabi/src/cxa_thread_atexit.cpp
+++ b/libcxxabi/src/cxa_thread_atexit.cpp
@@ -15,7 +15,7 @@
#endif
#endif
-#include <cstdlib>
+#include <stdlib.h>
namespace __cxxabiv1 {
@@ -77,7 +77,7 @@ namespace {
while (auto head = dtors) {
dtors = head->next;
head->dtor(head->obj);
- std::free(head);
+ ::free(head);
}
dtors_alive = false;
@@ -126,7 +126,7 @@ extern "C" {
dtors_alive = true;
}
- auto head = static_cast<DtorList*>(std::malloc(sizeof(DtorList)));
+ auto head = static_cast<DtorList*>(::malloc(sizeof(DtorList)));
if (!head) {
return -1;
}
diff --git a/libcxxabi/src/cxa_vector.cpp b/libcxxabi/src/cxa_vector.cpp
index cc358f05e00..f20e978d36e 100644
--- a/libcxxabi/src/cxa_vector.cpp
+++ b/libcxxabi/src/cxa_vector.cpp
@@ -14,7 +14,7 @@
#include "__cxxabi_config.h"
#include <exception> // for std::terminate
-#include <new> // for std::bad_alloc
+#include <new> // for std::bad_array_new_length
#include "abort_message.h"
diff --git a/libcxxabi/src/fallback_malloc.cpp b/libcxxabi/src/fallback_malloc.cpp
index 9d6240752a1..8f301bcacd1 100644
--- a/libcxxabi/src/fallback_malloc.cpp
+++ b/libcxxabi/src/fallback_malloc.cpp
@@ -18,8 +18,8 @@
#endif
#endif
-#include <cstdlib> // for malloc, calloc, free
-#include <cstring> // for memset
+#include <stdlib.h> // for malloc, calloc, free
+#include <string.h> // for memset
// A small, simple heap manager based (loosely) on
// the startup heap manager from FreeBSD, optimized for space.
@@ -214,7 +214,7 @@ void* __aligned_malloc_with_fallback(size_t size) {
if (void* dest = _aligned_malloc(size, alignof(__aligned_type)))
return dest;
#elif defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION)
- if (void* dest = std::malloc(size))
+ if (void* dest = ::malloc(size))
return dest;
#else
if (size == 0)
@@ -227,13 +227,13 @@ void* __aligned_malloc_with_fallback(size_t size) {
}
void* __calloc_with_fallback(size_t count, size_t size) {
- void* ptr = std::calloc(count, size);
+ void* ptr = ::calloc(count, size);
if (NULL != ptr)
return ptr;
// if calloc fails, fall back to emergency stash
ptr = fallback_malloc(size * count);
if (NULL != ptr)
- std::memset(ptr, 0, size * count);
+ ::memset(ptr, 0, size * count);
return ptr;
}
@@ -244,7 +244,7 @@ void __aligned_free_with_fallback(void* ptr) {
#if defined(_WIN32)
::_aligned_free(ptr);
#else
- std::free(ptr);
+ ::free(ptr);
#endif
}
}
@@ -253,7 +253,7 @@ void __free_with_fallback(void* ptr) {
if (is_fallback_ptr(ptr))
fallback_free(ptr);
else
- std::free(ptr);
+ ::free(ptr);
}
} // namespace __cxxabiv1
diff --git a/libcxxabi/src/fallback_malloc.h b/libcxxabi/src/fallback_malloc.h
index 033ecd63d1e..57808545197 100644
--- a/libcxxabi/src/fallback_malloc.h
+++ b/libcxxabi/src/fallback_malloc.h
@@ -10,7 +10,7 @@
#define _FALLBACK_MALLOC_H
#include "__cxxabi_config.h"
-#include <cstddef> // for size_t
+#include <stddef.h> // for size_t
namespace __cxxabiv1 {
diff --git a/libcxxabi/src/private_typeinfo.h b/libcxxabi/src/private_typeinfo.h
index d7f3f830ba2..cf680d6b1f2 100644
--- a/libcxxabi/src/private_typeinfo.h
+++ b/libcxxabi/src/private_typeinfo.h
@@ -12,7 +12,7 @@
#include "__cxxabi_config.h"
#include <typeinfo>
-#include <cstddef>
+#include <stddef.h>
namespace __cxxabiv1 {
@@ -72,7 +72,7 @@ struct _LIBCXXABI_HIDDEN __dynamic_cast_info
const __class_type_info* dst_type;
const void* static_ptr;
const __class_type_info* static_type;
- std::ptrdiff_t src2dst_offset;
+ ptrdiff_t src2dst_offset;
// Data that represents the answer:
OpenPOWER on IntegriCloud