summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src/cxa_vector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcxxabi/src/cxa_vector.cpp')
-rw-r--r--libcxxabi/src/cxa_vector.cpp66
1 files changed, 37 insertions, 29 deletions
diff --git a/libcxxabi/src/cxa_vector.cpp b/libcxxabi/src/cxa_vector.cpp
index 56e7096b446..c32a2119756 100644
--- a/libcxxabi/src/cxa_vector.cpp
+++ b/libcxxabi/src/cxa_vector.cpp
@@ -114,9 +114,9 @@ extern "C" {
//
// __cxa_vec_new2(element_count, element_size, padding_size, constructor,
// destructor, &::operator new[], &::operator delete[])
-void *__cxa_vec_new(size_t element_count, size_t element_size,
- size_t padding_size, void (*constructor)(void *),
- void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void *
+__cxa_vec_new(size_t element_count, size_t element_size, size_t padding_size,
+ void (*constructor)(void *), void (*destructor)(void *)) {
return __cxa_vec_new2 ( element_count, element_size, padding_size,
constructor, destructor, &::operator new [], &::operator delete [] );
}
@@ -139,10 +139,10 @@ void *__cxa_vec_new(size_t element_count, size_t element_size,
// not be called.
//
// Neither alloc nor dealloc may be NULL.
-void *__cxa_vec_new2(size_t element_count, size_t element_size,
- size_t padding_size, void (*constructor)(void *),
- void (*destructor)(void *), void *(*alloc)(size_t),
- void (*dealloc)(void *)) {
+_LIBCXXABI_FUNC_VIS void *
+__cxa_vec_new2(size_t element_count, size_t element_size, size_t padding_size,
+ void (*constructor)(void *), void (*destructor)(void *),
+ void *(*alloc)(size_t), void (*dealloc)(void *)) {
const size_t heap_size = element_count * element_size + padding_size;
char * const heap_block = static_cast<char *> ( alloc ( heap_size ));
char *vec_base = heap_block;
@@ -167,10 +167,10 @@ void *__cxa_vec_new2(size_t element_count, size_t element_size,
// Same as __cxa_vec_new2 except that the deallocation function takes both
// the object address and its size.
-void *__cxa_vec_new3(size_t element_count, size_t element_size,
- size_t padding_size, void (*constructor)(void *),
- void (*destructor)(void *), void *(*alloc)(size_t),
- void (*dealloc)(void *, size_t)) {
+_LIBCXXABI_FUNC_VIS void *
+__cxa_vec_new3(size_t element_count, size_t element_size, size_t padding_size,
+ void (*constructor)(void *), void (*destructor)(void *),
+ void *(*alloc)(size_t), void (*dealloc)(void *, size_t)) {
const size_t heap_size = element_count * element_size + padding_size;
char * const heap_block = static_cast<char *> ( alloc ( heap_size ));
char *vec_base = heap_block;
@@ -203,9 +203,11 @@ void *__cxa_vec_new3(size_t element_count, size_t element_size,
// pointers may be NULL. If either is NULL, no action is taken when it
// would have been called.
-void __cxa_vec_cctor(void *dest_array, void *src_array, size_t element_count,
- size_t element_size, void (*constructor)(void *, void *),
- void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void __cxa_vec_cctor(void *dest_array, void *src_array,
+ size_t element_count,
+ size_t element_size,
+ void (*constructor)(void *, void *),
+ void (*destructor)(void *)) {
if ( NULL != constructor ) {
size_t idx = 0;
char *src_ptr = static_cast<char *>(src_array);
@@ -227,9 +229,9 @@ void __cxa_vec_cctor(void *dest_array, void *src_array, size_t element_count,
// exception. If the destructor throws an exception, call terminate(). The
// constructor and/or destructor pointers may be NULL. If either is NULL,
// no action is taken when it would have been called.
-void __cxa_vec_ctor(void *array_address, size_t element_count,
- size_t element_size, void (*constructor)(void *),
- void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void
+__cxa_vec_ctor(void *array_address, size_t element_count, size_t element_size,
+ void (*constructor)(void *), void (*destructor)(void *)) {
if ( NULL != constructor ) {
size_t idx;
char *ptr = static_cast <char *> ( array_address );
@@ -248,8 +250,10 @@ void __cxa_vec_ctor(void *array_address, size_t element_count,
// elements if possible. If the destructor throws a second exception, call
// terminate(). The destructor pointer may be NULL, in which case this
// routine does nothing.
-void __cxa_vec_dtor(void *array_address, size_t element_count,
- size_t element_size, void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void __cxa_vec_dtor(void *array_address,
+ size_t element_count,
+ size_t element_size,
+ void (*destructor)(void *)) {
if ( NULL != destructor ) {
char *ptr = static_cast <char *> (array_address);
size_t idx = element_count;
@@ -272,8 +276,10 @@ void __cxa_vec_dtor(void *array_address, size_t element_count,
// size of its elements, call the given destructor on each element. If the
// destructor throws an exception, call terminate(). The destructor pointer
// may be NULL, in which case this routine does nothing.
-void __cxa_vec_cleanup(void *array_address, size_t element_count,
- size_t element_size, void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void __cxa_vec_cleanup(void *array_address,
+ size_t element_count,
+ size_t element_size,
+ void (*destructor)(void *)) {
if ( NULL != destructor ) {
char *ptr = static_cast <char *> (array_address);
size_t idx = element_count;
@@ -308,8 +314,10 @@ void __cxa_vec_cleanup(void *array_address, size_t element_count,
// function be called even if the destructor throws an exception derives
// from the resolution to DR 353 to the C++ standard, which was adopted in
// April, 2003.
-void __cxa_vec_delete(void *array_address, size_t element_size,
- size_t padding_size, void (*destructor)(void *)) {
+_LIBCXXABI_FUNC_VIS void __cxa_vec_delete(void *array_address,
+ size_t element_size,
+ size_t padding_size,
+ void (*destructor)(void *)) {
__cxa_vec_delete2 ( array_address, element_size, padding_size,
destructor, &::operator delete [] );
}
@@ -318,9 +326,9 @@ void __cxa_vec_delete(void *array_address, size_t element_size,
// deallocation instead of the default delete function. If dealloc throws
// an exception, the result is undefined. The dealloc pointer may not be
// NULL.
-void __cxa_vec_delete2(void *array_address, size_t element_size,
- size_t padding_size, void (*destructor)(void *),
- void (*dealloc)(void *)) {
+_LIBCXXABI_FUNC_VIS void
+__cxa_vec_delete2(void *array_address, size_t element_size, size_t padding_size,
+ void (*destructor)(void *), void (*dealloc)(void *)) {
if ( NULL != array_address ) {
char *vec_base = static_cast <char *> (array_address);
char *heap_block = vec_base - padding_size;
@@ -338,9 +346,9 @@ void __cxa_vec_delete2(void *array_address, size_t element_size,
// function takes both the object address and its size. If dealloc throws
// an exception, the result is undefined. The dealloc pointer may not be
// NULL.
-void __cxa_vec_delete3(void *array_address, size_t element_size,
- size_t padding_size, void (*destructor)(void *),
- void (*dealloc)(void *, size_t)) {
+_LIBCXXABI_FUNC_VIS void
+__cxa_vec_delete3(void *array_address, size_t element_size, size_t padding_size,
+ void (*destructor)(void *), void (*dealloc)(void *, size_t)) {
if ( NULL != array_address ) {
char *vec_base = static_cast <char *> (array_address);
char *heap_block = vec_base - padding_size;
OpenPOWER on IntegriCloud