aarch64.c (aarch64_mangle_type): New function.
authorYufeng Zhang <yufeng.zhang@arm.com>
Wed, 5 Dec 2012 10:43:48 +0000 (10:43 +0000)
committerYufeng Zhang <yufeng@gcc.gnu.org>
Wed, 5 Dec 2012 10:43:48 +0000 (10:43 +0000)
gcc/

2012-12-05  Yufeng Zhang  <yufeng.zhang@arm.com>

* config/aarch64/aarch64.c (aarch64_mangle_type): New function.
(TARGET_MANGLE_TYPE): Define.

gcc/testsuite/

2012-12-05  Yufeng Zhang  <yufeng.zhang@arm.com>

* g++.dg/abi/arm_va_list.C: Also test on aarch64*-*-*.

From-SVN: r194200

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/arm_va_list.C

index aa10fd35db8e5b75b929be2efe297b156281cf52..795a1bdfb86c4a9ea63329d07380a0388fff4528 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-05  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_mangle_type): New function.
+       (TARGET_MANGLE_TYPE): Define.
+
 2012-12-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * config/aarch64/aarch64-builtins.c
index 971e71f1ef4ea3bd2749854b473a821f12274d92..1cabf7ac6178e260728ccd97e9d10e5017c2d15d 100644 (file)
@@ -5862,6 +5862,20 @@ aarch64_preferred_simd_mode (enum machine_mode mode)
   return word_mode;
 }
 
+/* Implement TARGET_MANGLE_TYPE.  */
+
+const char *
+aarch64_mangle_type (const_tree type)
+{
+  /* The AArch64 ABI documents say that "__va_list" has to be
+     managled as if it is in the "std" namespace.  */
+  if (lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
+    return "St9__va_list";
+
+  /* Use the default mangling.  */
+  return NULL;
+}
+
 /* Return the equivalent letter for size.  */
 static unsigned char
 sizetochar (int size)
@@ -6815,6 +6829,9 @@ aarch64_c_mode_for_suffix (char suffix)
 #undef TARGET_LIBGCC_CMP_RETURN_MODE
 #define TARGET_LIBGCC_CMP_RETURN_MODE aarch64_libgcc_cmp_return_mode
 
+#undef TARGET_MANGLE_TYPE
+#define TARGET_MANGLE_TYPE aarch64_mangle_type
+
 #undef TARGET_MEMORY_MOVE_COST
 #define TARGET_MEMORY_MOVE_COST aarch64_memory_move_cost
 
index 0bba403e0c5ec23bbc26d70bd3aa8d7ddeb2189d..aa90fd954709ead5f39b20358a519ee0db99fc25 100644 (file)
@@ -1,3 +1,7 @@
+2012-12-05  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       * g++.dg/abi/arm_va_list.C: Also test on aarch64*-*-*.
+
 2012-12-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * gcc.dg/vect/vect-rounding-btrunc.c: New test.
index 45a426a4f388ef15fc2a48750fef73f58219f89c..4f6f3a46da41b6ff00e37ac6bb593b81855a183d 100644 (file)
@@ -1,9 +1,10 @@
-// { dg-do compile }
+// { dg-do compile { target { aarch64*-*-* arm*-*-* } } }
 // { dg-options "-Wno-abi" }
-// { dg-require-effective-target arm_eabi }
+// { dg-require-effective-target arm_eabi { target arm*-*-* } }
 
 // AAPCS \S 7.1.4 requires that va_list be a typedef for "struct
 // __va_list".  The mangling is as if it were "std::__va_list".
+// AAPCS64 \S 7.1.4 has the same requirement for AArch64 targets.
 // #include <stdarg.h>
 typedef __builtin_va_list va_list;