aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYufeng Zhang <yufeng.zhang@arm.com>2012-12-05 10:43:48 +0000
committerYufeng Zhang <yufeng@gcc.gnu.org>2012-12-05 10:43:48 +0000
commitac2b960fcf50ac868ecc2f407e67d7085bf069de (patch)
tree5891ab7cae5753c8b500b00a96ea82264be3a484
parent570104dff64cb067e333f4f05dd3ac5d6cd4eeb8 (diff)
downloadgcc-ac2b960fcf50ac868ecc2f407e67d7085bf069de.zip
gcc-ac2b960fcf50ac868ecc2f407e67d7085bf069de.tar.gz
gcc-ac2b960fcf50ac868ecc2f407e67d7085bf069de.tar.bz2
aarch64.c (aarch64_mangle_type): New function.
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c17
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/abi/arm_va_list.C5
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aa10fd3..795a1bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 971e71f..1cabf7a 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0bba403e..aa90fd9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/g++.dg/abi/arm_va_list.C b/gcc/testsuite/g++.dg/abi/arm_va_list.C
index 45a426a..4f6f3a4 100644
--- a/gcc/testsuite/g++.dg/abi/arm_va_list.C
+++ b/gcc/testsuite/g++.dg/abi/arm_va_list.C
@@ -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;