From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75152 invoked by alias); 12 Oct 2018 10:01:16 -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 75078 invoked by uid 89); 12 Oct 2018 10:01:12 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_PASS autolearn=ham version=3.3.2 spammy=Generation X-HELO: foss.arm.com Received: from usa-sjc-mx-foss1.foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 12 Oct 2018 10:01:09 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E047EF; Fri, 12 Oct 2018 03:01:07 -0700 (PDT) Received: from e120077-lin.cambridge.arm.com (e120077-lin.cambridge.arm.com [10.2.206.194]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 22DAB3F5B7; Fri, 12 Oct 2018 03:01:06 -0700 (PDT) Subject: Re: [ARM/FDPIC v3 03/21] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided To: Christophe Lyon , gcc-patches@gcc.gnu.org Cc: christophe.lyon@linaro.org References: <20181011133518.17258-1-christophe.lyon@st.com> <20181011133518.17258-4-christophe.lyon@st.com> From: "Richard Earnshaw (lists)" Openpgp: preference=signencrypt Message-ID: <26314d4c-d0cf-05c0-9460-e1df2a6147cd@arm.com> Date: Fri, 12 Oct 2018 10:46:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181011133518.17258-4-christophe.lyon@st.com> Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-SW-Source: 2018-10/txt/msg00739.txt.bz2 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ël Guêné > > 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. 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="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" > tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h arm/arm.h" > + case $target in > + arm*-*-uclinuxfdpiceabi) > + tm_file="$tm_file arm/uclinuxfdpiceabi.h" > + ;; > + esac > # Generation of floating-point instructions requires at least ARMv5te. > if [ "$with_float" = "hard" -o "$with_float" = "softfp" ] ; then > target_cpu_cname="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=arm8|mcpu=arm810|mcpu=strongarm*"\ > "|march=armv4|mcpu=fa526|mcpu=fa626:--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=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=5}" TARGET_FIX_V4BX_SPEC > + "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=5}" 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=1 > + ;; > arm*-*-linux*) > ;; > mips*64*-*-linux*) >