cxxabi_tweaks.h: Define __cxa_vec_ctor_return and _GLIBCXX_CXA_VEC_CTOR_RETURN.
authorPaul Brook <paul@codesourcery.com>
Thu, 12 Aug 2004 18:50:38 +0000 (18:50 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Thu, 12 Aug 2004 18:50:38 +0000 (18:50 +0000)
* 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.

From-SVN: r85891

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C [new file with mode: 0644]
libstdc++-v3/ChangeLog
libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
libstdc++-v3/libsupc++/cxxabi.h
libstdc++-v3/libsupc++/vec.cc

index 2400d1dd16cf64447d00319c79b11f25e9359034..9256ed9fd45e30d829bace30447d6351f7730d62 100644 (file)
@@ -1,3 +1,7 @@
+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
diff --git a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C
new file mode 100644 (file)
index 0000000..da66a73
--- /dev/null
@@ -0,0 +1,32 @@
+// 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
index 06db841d65f6a6a3765a29a26d812e2b9e477c2e..a4474c9dcad362c6154418466701c2dc621c42de 100644 (file)
@@ -1,3 +1,13 @@
+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,
index 9dd9435c90e48e4da058bcd647f275e52f19c416..95fe12c9d8ff4782e5de9f8b9fca3b53d3afc8b2 100644 (file)
@@ -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
index 983be135be1cdcd27fc0d1b463fb7d0d0ee9547b..48a0dec568bb18424c0f4c8a9472ed253e2ee2ad 100644 (file)
@@ -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
index b85019588df7bbd8c60b592cd2ee3e5e2d43a157..dfed54e69ee7b69b7b2331cb792abe09b9d62ff9 100644 (file)
@@ -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*));
index 7681acc77292d00c4831de974b3fb23f9dfdba92..2708c19aca9a0532017c13f751d72089ca1b49db 100644 (file)
@@ -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.