From patchwork Wed Nov 21 14:31:03 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yufeng Zhang X-Patchwork-Id: 200780 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 0FF242C0091 for ; Thu, 22 Nov 2012 01:31:34 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1354113095; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:Sender:Delivered-To; bh=iGWmGdm y5j91izLctns6XQJJIrY=; b=WlC/jPTPwZHRgiJHK7yAc3xqNie4e8/gd1V+Z5t tTXtoId8QFmIksM7lxHev4AccK2H10UyM505m5hDuzOo49H+Ozj59KC4i7X9ekll qz0NJqx9Acr1RU7HRjn32xK9yQywmVoOM9saAbEqe1rHaxQjpVIXOHYETcYRQYgE az8w= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:X-MC-Unique:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=xeCQsXyWHH2opOhvOoXFvZ2a6B2+SCTWSdLW3osJoNEhnLBH4mVDENvlnP98D2 gKLvrplkQonq2jskOLzfHk7MyOqotfjtutUFfwNq3TW4i3/oqtswI7m+KuNYxqf7 Ozf9zYoTzMpH1q2P56fh8DzAXW5i5kUvMxCZ7RmllRGKQ=; Received: (qmail 29777 invoked by alias); 21 Nov 2012 14:31:19 -0000 Received: (qmail 29761 invoked by uid 22791); 21 Nov 2012 14:31:15 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 21 Nov 2012 14:31:06 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Wed, 21 Nov 2012 14:31:05 +0000 Received: from [10.1.69.62] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.0); Wed, 21 Nov 2012 14:31:03 +0000 Message-ID: <50ACE5A7.1080204@arm.com> Date: Wed, 21 Nov 2012 14:31:03 +0000 From: Yufeng Zhang User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [PATCH][AARCH64] Fix the name mangling of va_list X-MC-Unique: 112112114310501501 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, This patch updates the AArch64 port to mangle __va_list as it is in namespace std in C++. This is specified in the AArch64 AAPCS64 ABI doc. OK for the trunk? Thanks, Yufeng gcc/ChangeLog 2012-11-21 Yufeng Zhang * config/aarch64/aarch64.c (aarch64_mangle_type): New function. (TARGET_MANGLE_TYPE): Define. gcc/testsuite/ChangeLog 2012-11-21 Yufeng Zhang * g++.dg/abi/arm_va_list.C: Also test on aarch64*-*-*. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 4437fef..792b086 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5859,6 +5859,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; +} + /* Legitimize a memory reference for sync primitive implemented using LDXR/STXR instructions. We currently force the form of the reference to be indirect without offset. */ @@ -6923,6 +6937,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/g++.dg/abi/arm_va_list.C b/gcc/testsuite/g++.dg/abi/arm_va_list.C index 45a426a..d983ee1 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". +// So is required for the AArch64 target. // #include typedef __builtin_va_list va_list;