From patchwork Tue Jan 26 14:43:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 60462 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp2000914lbb; Tue, 26 Jan 2016 06:44:26 -0800 (PST) X-Received: by 10.98.68.193 with SMTP id m62mr34165440pfi.153.1453819466096; Tue, 26 Jan 2016 06:44:26 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id f5si2425783pat.113.2016.01.26.06.44.25 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Jan 2016 06:44:26 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-420057-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; spf=pass (google.com: domain of gcc-patches-return-420057-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-420057-patch=linaro.org@gcc.gnu.org; dkim=pass header.i=@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:in-reply-to:references:date:message-id:subject :from:to:content-type; q=dns; s=default; b=iYO5PSP34fFIkwJFkiB0N HA+e/7q1jpOyJ6Xty3kiTVz1JTh/12A1PYdKtPkdw69EZs7yjrCBWmFfmMcn+1Kf 6Cds0lsvS2Ppy5bDVOsz9AphdhsAMYrY5zdp/QPKklzw8W/hRv9ayA+Q+60Ez2sC z3VHzgoGr/jpiTQdN2MJg4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:in-reply-to:references:date:message-id:subject :from:to:content-type; s=default; bh=AkjATLTsIAcbSXFndLvlqlikoWc =; b=AFNUdsPHd5y3tgg4+s1VyGbmIQE1ec6mXkab7CIL1mMZhQl0yUbr2r5wCCI swmu4mkEyAAOpzRz2IEyth9bAAH+U3PZtmnpKx+jmTRyO6zekrIYphOT5g7aQrlr dGvKPseRkddyV5ziPO7b5EzsE22yIVupUogFbrk7mA4aq6/4= Received: (qmail 92700 invoked by alias); 26 Jan 2016 14:43:43 -0000 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 Received: (qmail 92344 invoked by uid 89); 26 Jan 2016 14:43:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=calle, callee, mlittle-endian, mlittleendian X-HELO: mail-qk0-f170.google.com Received: from mail-qk0-f170.google.com (HELO mail-qk0-f170.google.com) (209.85.220.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 26 Jan 2016 14:43:39 +0000 Received: by mail-qk0-f170.google.com with SMTP id x1so63376784qkc.1 for ; Tue, 26 Jan 2016 06:43:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=pfQsGlB5MpvWE4k7lfQCFX7OlvTQ+7QX6EnzORh5neg=; b=MFAFu177XO5LZf/P8qJQUiOlYpqgi/vjV+V3vdbmue6Ovhk5N0/fYluGOKfiiM7A/H i/vM+WBkHUWqv66bvB17rKz8fWLHFOTk3ZkAEW9sROuCPrsT0qNlvMIzZCe3AohaZh5z kfiMEHunf+IiSPj93jdXa/9E7I/xZ8CrKdBp6wpi/2F7P9Mhlp1bm4FIVt+M5vttulQV 9+yJeHURKqjQGATZlENZfrn+26BX/jOERfOyufUbudVOXFXFic0dZzMzi0/oygP5zxUV ZxZ98BXukaCDEhJIOnAsgYaYpodDCWqR6SBY+bDBjiQ5SE7l7VlsVwNszIfeR5W1DWMS 7W4g== X-Gm-Message-State: AG10YORKPSAdIrB1QbqQr4h9JXNtXj5OURsu/jeA5S5SQO3HKjYFO1CyFE6Fo+/TOCSTvR0AJ5RBJpxUSi9715xI MIME-Version: 1.0 X-Received: by 10.55.75.85 with SMTP id y82mr28386214qka.29.1453819416727; Tue, 26 Jan 2016 06:43:36 -0800 (PST) Received: by 10.140.90.84 with HTTP; Tue, 26 Jan 2016 06:43:36 -0800 (PST) In-Reply-To: References: Date: Tue, 26 Jan 2016 15:43:36 +0100 Message-ID: Subject: Re: [AArch64] Disable pcrelative_literal_loads with fix-cortex-a53-843419 From: Christophe Lyon To: "gcc-patches@gcc.gnu.org" , Ramana Radhakrishnan X-IsSubscribed: yes With the attachment.... On 26 January 2016 at 15:42, Christophe Lyon wrote: > Hi, > > This is a followup to PR63304. > > As discussed in bugzilla, this patch disables pcrelative_literal_loads > when -mfix-cortex-a53-843419 (or its default configure option) is > used. > > I copied the behavior of -mfix-cortex-a53-835769 (e.g. in > aarch64_can_inline_p), and I have tested by building the Linux kernel > using -mfix-cortex-a53-843419 and checked that > R_AARCH64_ADR_PREL_PG_HI21 relocations are not emitted anymore (under > CONFIG_ARM64_ERRATUM_843419). > > For reference, this is motivated by: > https://bugs.linaro.org/show_bug.cgi?id=1994 > and further details on Launchpad: > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1533009 > > OK for trunk? > > Thanks, > > Christophe. 2016-01-26 Christophe Lyon * config/aarch64/aarch64.h (TARGET_FIX_ERR_A53_843419_DEFAULT): Always define to 0 or 1. (TARGET_FIX_ERR_A53_843419): New macro. * config/aarch64/aarch64-elf-raw.h (TARGET_FIX_ERR_A53_843419_DEFAULT): Update for above changes. * config/aarch64/aarch64-linux.h: Likewise. * config/aarch64/aarch64.c (aarch64_override_options_after_change_1): Do not default aarch64_nopcrelative_literal_loads to true if Cortex-A53 erratum 843419 is on. (aarch64_attributes): Handle fix-cortex-a53-843419. (aarch64_can_inline_p): Likewise. * config/aarch64/aarch64.opt (aarch64_fix_a53_err843419): Save. diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 8b463c9..ec96ce3 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -179,6 +179,20 @@ extern unsigned aarch64_architecture_version; ((aarch64_fix_a53_err835769 == 2) \ ? TARGET_FIX_ERR_A53_835769_DEFAULT : aarch64_fix_a53_err835769) +/* Make sure this is always defined so we don't have to check for ifdefs + but rather use normal ifs. */ +#ifndef TARGET_FIX_ERR_A53_843419_DEFAULT +#define TARGET_FIX_ERR_A53_843419_DEFAULT 0 +#else +#undef TARGET_FIX_ERR_A53_843419_DEFAULT +#define TARGET_FIX_ERR_A53_843419_DEFAULT 1 +#endif + +/* Apply the workaround for Cortex-A53 erratum 843419. */ +#define TARGET_FIX_ERR_A53_843419 \ + ((aarch64_fix_a53_err843419 == 2) \ + ? TARGET_FIX_ERR_A53_843419_DEFAULT : aarch64_fix_a53_err843419) + /* ARMv8.1 Adv.SIMD support. */ #define TARGET_SIMD_RDMA (TARGET_SIMD && AARCH64_ISA_RDMA) diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h index 2dcb6d4..9097017 100644 --- a/gcc/config/aarch64/aarch64-elf-raw.h +++ b/gcc/config/aarch64/aarch64-elf-raw.h @@ -35,7 +35,7 @@ " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}" #endif -#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT +#if TARGET_FIX_ERR_A53_843419_DEFAULT #define CA53_ERR_843419_SPEC \ " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}" #else diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h index 6064b26..5fcaa59 100644 --- a/gcc/config/aarch64/aarch64-linux.h +++ b/gcc/config/aarch64/aarch64-linux.h @@ -53,7 +53,7 @@ " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}" #endif -#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT +#if TARGET_FIX_ERR_A53_843419_DEFAULT #define CA53_ERR_843419_SPEC \ " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}" #else diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 03bc1b9..3bea61e 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -8062,9 +8062,11 @@ aarch64_override_options_after_change_1 (struct gcc_options *opts) if (opts->x_nopcrelative_literal_loads == 1) aarch64_nopcrelative_literal_loads = false; - /* If it is not set on the command line, we default to no - pc relative literal loads. */ - if (opts->x_nopcrelative_literal_loads == 2) + /* If it is not set on the command line, we default to no pc + relative literal loads, unless the workaround for Cortex-A53 + erratum 843419 is in effect. */ + if (opts->x_nopcrelative_literal_loads == 2 + && !TARGET_FIX_ERR_A53_843419) aarch64_nopcrelative_literal_loads = true; /* In the tiny memory model it makes no sense @@ -8748,6 +8750,8 @@ static const struct aarch64_attribute_info aarch64_attributes[] = OPT_mgeneral_regs_only }, { "fix-cortex-a53-835769", aarch64_attr_bool, true, NULL, OPT_mfix_cortex_a53_835769 }, + { "fix-cortex-a53-843419", aarch64_attr_bool, true, NULL, + OPT_mfix_cortex_a53_843419 }, { "cmodel", aarch64_attr_enum, false, NULL, OPT_mcmodel_ }, { "strict-align", aarch64_attr_mask, false, NULL, OPT_mstrict_align }, { "omit-leaf-frame-pointer", aarch64_attr_bool, true, NULL, @@ -9162,6 +9166,12 @@ aarch64_can_inline_p (tree caller, tree callee) 2, TARGET_FIX_ERR_A53_835769_DEFAULT)) return false; + if (!aarch64_tribools_ok_for_inlining_p ( + caller_opts->x_aarch64_fix_a53_err843419, + callee_opts->x_aarch64_fix_a53_err843419, + 2, TARGET_FIX_ERR_A53_843419)) + return false; + /* If the user explicitly specified -momit-leaf-frame-pointer for the caller and calle and they don't match up, reject inlining. */ if (!aarch64_tribools_ok_for_inlining_p ( diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index 5cbd4cd..2427826 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -73,7 +73,7 @@ Target Report Var(aarch64_fix_a53_err835769) Init(2) Save Workaround for ARM Cortex-A53 Erratum number 835769. mfix-cortex-a53-843419 -Target Report +Target Report Var(aarch64_fix_a53_err843419) Init(2) Save Workaround for ARM Cortex-A53 Erratum number 843419. mlittle-endian