From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 109777 invoked by alias); 15 Oct 2018 10:10:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 109766 invoked by uid 89); 15 Oct 2018 10:10:29 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=alone, suggests, Tell, nopie X-HELO: mail-vs1-f45.google.com Received: from mail-vs1-f45.google.com (HELO mail-vs1-f45.google.com) (209.85.217.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 15 Oct 2018 10:10:26 +0000 Received: by mail-vs1-f45.google.com with SMTP id e126so15909594vsc.9 for ; Mon, 15 Oct 2018 03:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=8r2tWmfCOeKB60ZhxbGxlNp/XSSXTu/9aV2bnyAtcd4=; b=BbmjbJyZg9ms5WluL9JspehBgvnlRQhDSUUhJ45A6YAZ2ge+FoPozMrO5BaM/f5ZHI WqoL7YOrhExyxArm3EYYOeqI0M/dYV7es2Evldof7GVQKcSRMA3R7PDaokNtgLGD22j+ ieqmSWRQDrJWSpLjlgtqNV/QrscrABhhHtFKs= MIME-Version: 1.0 References: <20181011133518.17258-1-christophe.lyon@st.com> <20181011133518.17258-4-christophe.lyon@st.com> <26314d4c-d0cf-05c0-9460-e1df2a6147cd@arm.com> In-Reply-To: <26314d4c-d0cf-05c0-9460-e1df2a6147cd@arm.com> From: Christophe Lyon Date: Mon, 15 Oct 2018 10:35:00 -0000 Message-ID: Subject: Re: [ARM/FDPIC v3 03/21] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided To: Richard Earnshaw Cc: christophe lyon St , gcc Patches Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2018-10/txt/msg00844.txt.bz2 On Fri, 12 Oct 2018 at 12:01, Richard Earnshaw (lists) < Richard.Earnshaw@arm.com> wrote: > On 11/10/18 14:34, Christophe Lyon wrote: > > In FDPIC mode, we set -fPIE unless the user provides -fno-PIE, -fpie, > > -fPIC or -fpic: indeed FDPIC code is PIC, but we want to generate code > > for executables rather than shared libraries by default. > > > > We also make sure to use the --fdpic assembler option, and select the > > appropriate linker emulation. > > > > At link time, we also default to -pie, unless we are generating a > > shared library or a relocatable file (-r). Note that even for static > > link, we must specify the dynamic linker because the executable still > > has to relocate itself at startup. > > > > We also force 'now' binding since lazy binding is not supported. > > > > We should also apply the same behavior for -Wl,-Ur as for -r, but I > > couldn't find how to describe that in the specs fragment. > > > > 2018-XX-XX Christophe Lyon > > Micka=C3=ABl Gu=C3=AAn=C3=A9 > > > > gcc/ > > * config.gcc: Handle arm*-*-uclinuxfdpiceabi. > > * config/arm/bpabi.h (TARGET_FDPIC_ASM_SPEC): New. > > (SUBTARGET_EXTRA_ASM_SPEC): Use TARGET_FDPIC_ASM_SPEC. > > * config/arm/linux-eabi.h (FDPIC_CC1_SPEC): New. > > (CC1_SPEC): Use FDPIC_CC1_SPEC. > > * config/arm/uclinuxfdpiceabi.h: New file. > > > > libsanitizer/ > > * configure.tgt (arm*-*-uclinuxfdpiceabi): Sanitizers are > > unsupported in this configuration. > > The documentation (in patch 1) seems to imply that -mfdpic is available > in all configurations and has certain effects (such as enabling -fPIE), > but this patch set suggests that such behaviours are only available when > the compiler is configured explicitly for an fdpic target. > > I think this needs to be resolved. Either -mfdpic works everywhere, or > the option should only be available when configured for -mfdpic. > > You are right, this is not clear. I tried to follow what other fdpic targets do, but it's not consistent either, it seems. So, at present, -mfdpic alone is in general not sufficient, and the user has to use -fpic/-fPIC/-fpie/-fPIE as needed. When configured for arm-uclinuxfdpiceabi, this is done implicitly (thanks to this patch). One possibility is to rephrase the doc, and say that -fPIE is only implied when GCC is configured for arm-uclinuxfdpiceabi. Do you mean to also make -mfdpic non-existent/rejected when GCC is not configured for arm-uclinuxfdpiceabi? How to achieve that? R. > > > > > Change-Id: If369e0a10bb916fd72e38f71498d3c640fa85c4c > > > > diff --git a/gcc/config.gcc b/gcc/config.gcc > > index 793fc69..a4f4331 100644 > > --- a/gcc/config.gcc > > +++ b/gcc/config.gcc > > @@ -1144,6 +1144,11 @@ arm*-*-linux-* | arm*-*-uclinuxfdpiceabi) > # ARM GNU/Linux with ELF > > esac > > tmake_file=3D"${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi > arm/t-linux-eabi" > > tm_file=3D"$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h > arm/arm.h" > > + case $target in > > + arm*-*-uclinuxfdpiceabi) > > + tm_file=3D"$tm_file arm/uclinuxfdpiceabi.h" > > + ;; > > + esac > > # Generation of floating-point instructions requires at least > ARMv5te. > > if [ "$with_float" =3D "hard" -o "$with_float" =3D "softfp" ] ; t= hen > > target_cpu_cname=3D"arm10e" > > diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h > > index 1e3ecfb..5901154 100644 > > --- a/gcc/config/arm/bpabi.h > > +++ b/gcc/config/arm/bpabi.h > > @@ -55,6 +55,8 @@ > > #define TARGET_FIX_V4BX_SPEC " %{mcpu=3Darm8|mcpu=3Darm810|mcpu=3Dstro= ngarm*"\ > > "|march=3Darmv4|mcpu=3Dfa526|mcpu=3Dfa626:--fix-v4bx}" > > > > +#define TARGET_FDPIC_ASM_SPEC "" > > + > > #define BE8_LINK_SPEC > \ > > "%{!r:%{!mbe32:%:be8_linkopt(%{mlittle-endian:little}" \ > > " %{mbig-endian:big}" \ > > @@ -64,7 +66,7 @@ > > /* Tell the assembler to build BPABI binaries. */ > > #undef SUBTARGET_EXTRA_ASM_SPEC > > #define SUBTARGET_EXTRA_ASM_SPEC \ > > - "%{mabi=3Dapcs-gnu|mabi=3Datpcs:-meabi=3Dgnu;:-meabi=3D5}" > TARGET_FIX_V4BX_SPEC > > + "%{mabi=3Dapcs-gnu|mabi=3Datpcs:-meabi=3Dgnu;:-meabi=3D5}" > TARGET_FIX_V4BX_SPEC TARGET_FDPIC_ASM_SPEC > > > > #ifndef SUBTARGET_EXTRA_LINK_SPEC > > #define SUBTARGET_EXTRA_LINK_SPEC "" > > diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h > > index 8585fde..4cee958 100644 > > --- a/gcc/config/arm/linux-eabi.h > > +++ b/gcc/config/arm/linux-eabi.h > > @@ -98,11 +98,14 @@ > > #undef ASAN_CC1_SPEC > > #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}" > > > > +#define FDPIC_CC1_SPEC "" > > + > > #undef CC1_SPEC > > #define CC1_SPEC \ > > - LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC, \ > > + LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " > \ > > + FDPIC_CC1_SPEC, \ > > GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ > > - ANDROID_CC1_SPEC) > > + ANDROID_CC1_SPEC "" FDPIC_CC1_SPEC) > > > > #define CC1PLUS_SPEC \ > > LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) > > diff --git a/gcc/config/arm/uclinuxfdpiceabi.h > b/gcc/config/arm/uclinuxfdpiceabi.h > > new file mode 100644 > > index 0000000..43a17de > > --- /dev/null > > +++ b/gcc/config/arm/uclinuxfdpiceabi.h > > @@ -0,0 +1,53 @@ > > +/* Configuration file for ARM GNU/Linux FDPIC EABI targets. > > + Copyright (C) 2018 Free Software Foundation, Inc. > > + Contributed by STMicroelectronics. > > + > > + This file is part of GCC. > > + > > + GCC is free software; you can redistribute it and/or modify it > > + under the terms of the GNU General Public License as published > > + by the Free Software Foundation; either version 3, or (at your > > + option) any later version. > > + > > + GCC is distributed in the hope that it will be useful, but WITHOUT > > + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > > + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public > > + License for more details. > > + > > + You should have received a copy of the GNU General Public License > > + along with GCC; see the file COPYING3. If not see > > + . */ > > + > > +/* On uClibc EABI GNU/Linux, we want to force -mfdpic by default, > > + which also means we produce PIE code by default. */ > > +#undef FDPIC_CC1_SPEC > > +#define FDPIC_CC1_SPEC \ > > + "%{!mno-fdpic:-mfdpic %{!no-PIE:%{!fpie:%{!fPIC:%{!fpic: -fPIE}}}}}" > > + > > +/* Add --fdpic assembler flag by default. */ > > +#undef TARGET_FDPIC_ASM_SPEC > > +#define TARGET_FDPIC_ASM_SPEC "%{!mno-fdpic: --fdpic}" > > + > > +/* TARGET_BIG_ENDIAN_DEFAULT is set in > > + config.gcc for big endian configurations. */ > > +#if TARGET_BIG_ENDIAN_DEFAULT > > +#define TARGET_FDPIC_LINKER_EMULATION "armelfb_linux_fdpiceabi" > > +#else > > +#define TARGET_FDPIC_LINKER_EMULATION "armelf_linux_fdpiceabi" > > +#endif > > + > > +/* Unless we generate a shared library or a relocatable object, we > > + force -pie. */ > > +/* Even with -static, we have to define the dynamic-linker, as we > > + have some relocations to resolve at load time. */ > > +#undef SUBTARGET_EXTRA_LINK_SPEC > > +#define SUBTARGET_EXTRA_LINK_SPEC \ > > + "%{!mno-fdpic: -m " TARGET_FDPIC_LINKER_EMULATION \ > > + "%{!shared:%{!r: -pie}} \ > > + %{static:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" \ > > + "%{mno-fdpic: -m " TARGET_LINKER_EMULATION "}" \ > > + "%{!r:%{!mno-fdpic: -z now}}" > > + > > +#undef STARTFILE_SPEC > > +#define STARTFILE_SPEC "%{!mno-fdpic:%{!shared:crtreloc.o%s}} " \ > > + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, > ANDROID_STARTFILE_SPEC) > > diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt > > index 1dce1e6..dff34cd 100644 > > --- a/libsanitizer/configure.tgt > > +++ b/libsanitizer/configure.tgt > > @@ -43,6 +43,9 @@ case "${target}" in > > ;; > > s390*-*-linux*) > > ;; > > + arm*-*-uclinuxfdpiceabi) > > + UNSUPPORTED=3D1 > > + ;; > > arm*-*-linux*) > > ;; > > mips*64*-*-linux*) > > > >