Skip to content
Snippets Groups Projects
Commit b5a97e54 authored by pbrook's avatar pbrook
Browse files

* config/cpu/arm/cxxabi_tweaks.h: Define __cxa_vec_ctor_return and

	_GLIBCXX_CXA_VEC_CTOR_RETURN.
	* config/cpu/generic/cxxabi_tweaks.h: Ditto.
	* libsupc++/cxxabi.h (__cxa_vec_ctor, __cxa_vec_cctor): Use
	__cxa_vec_ctor_return.
	* libsupc++/vec.cc (__cxa_vec_ctor, __cxa_vec_cctor): Ditto.
	Use _GLIBCXX_CXA_VEC_CTOR_RETURN.

	* g++.dg/abi/arm_cxa_vec_1.C: New test.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85891 138bc75d-0d04-0410-961f-82ee72b054a4
parent 249ad315
No related merge requests found
2004-08-12 Paul Brook <paul@codesourcery.com>
* g++.dg/abi/arm_cxa_vec_1.C: New test.
2004-08-12 Janis Johnson <janis187@us.ibm.com>
 
* g++.dg/ext/altivec-2.C: Check for hardware support before
......
// Check that __cxa_vec_[c]ctor returns a pointer to the array
// { dg-do run { target arm*-*-* xscale*-*-* } }
#include <cxxabi.h>
#ifdef ___ARM_EABI__
static void cctor (void * a, void * b)
{
*(char *) a = *(char *) b
}
int main()
{
char data;
char data2;
char *p;
p = __cxa_vec_ctor (&data, 1, 1, NULL, NULL);
if (p != &data)
return 1;
p = __cxa_vec_cctor (&data2, &data, 1, 1, cctor, NULL);
if (p != &data2)
return 1;
return 0;
}
#else
int main()
{
return 0;
}
#endif
2004-08-12 Paul Brook <paul@codesourcery.com>
* config/cpu/arm/cxxabi_tweaks.h: Define __cxa_vec_ctor_return and
_GLIBCXX_CXA_VEC_CTOR_RETURN.
* config/cpu/generic/cxxabi_tweaks.h: Ditto.
* libsupc++/cxxabi.h (__cxa_vec_ctor, __cxa_vec_cctor): Use
__cxa_vec_ctor_return.
* libsupc++/vec.cc (__cxa_vec_ctor, __cxa_vec_cctor): Ditto.
Use _GLIBCXX_CXA_VEC_CTOR_RETURN.
2004-08-12 Kelley Cook <kcook@gcc.gnu.org>
* Makefile.in, aclocal.m4, configure, include/Makefile.in,
......
......@@ -45,12 +45,22 @@ namespace __cxxabiv1
// We also want the element size in array cookies.
#define _GLIBCXX_ELTSIZE_IN_COOKIE 1
#else
// __cxa_vec_ctor should return a pointer to the array.
typedef void * __cxa_vec_ctor_return_type;
#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return x
#else // __ARM_EABI__
// The generic ABI uses the first byte of a 64-bit guard variable.
#define _GLIBCXX_GUARD_ACQUIRE(x) (!*(char *) (x))
#define _GLIBCXX_GUARD_RELEASE(x) *(char *) (x) = 1
__extension__ typedef int __guard __attribute__((mode (__DI__)));
#endif
// __cxa_vec_ctor has void return type.
typedef void __cxa_vec_ctor_return_type;
#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
#endif //!__ARM_EABI__
#ifdef __cplusplus
} // namespace __cxxabiv1
......
......@@ -40,6 +40,10 @@ namespace __cxxabiv1
#define _GLIBCXX_GUARD_RELEASE(x) *(char *) (x) = 1
__extension__ typedef int __guard __attribute__((mode (__DI__)));
// __cxa_vec_ctor has void return type.
typedef void __cxa_vec_ctor_return_type;
#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
#ifdef __cplusplus
} // namespace __cxxabiv1
#endif
......
......@@ -73,12 +73,12 @@ namespace __cxxabiv1
void (*__dealloc) (void*, size_t));
// Construct array.
void
__cxa_vec_ctor_return_type
__cxa_vec_ctor(void* __array_address, size_t __element_count,
size_t __element_size, void (*__constructor) (void*),
void (*__destructor) (void*));
void
__cxa_vec_ctor_return_type
__cxa_vec_cctor(void* dest_array, void* src_array, size_t element_count,
size_t element_size, void (*constructor) (void*, void*),
void (*destructor) (void*));
......
......@@ -155,7 +155,7 @@ namespace __cxxabiv1
}
// Construct array.
extern "C" void
extern "C" __cxa_vec_ctor_return_type
__cxa_vec_ctor(void *array_address,
std::size_t element_count,
std::size_t element_size,
......@@ -179,10 +179,11 @@ namespace __cxxabiv1
}
__throw_exception_again;
}
_GLIBCXX_CXA_VEC_CTOR_RETURN (array_address);
}
// Construct an array by copying.
extern "C" void
extern "C" __cxa_vec_ctor_return_type
__cxa_vec_cctor(void *dest_array,
void *src_array,
std::size_t element_count,
......@@ -209,6 +210,7 @@ namespace __cxxabiv1
}
__throw_exception_again;
}
_GLIBCXX_CXA_VEC_CTOR_RETURN (dest_array);
}
// Destruct array.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment