public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Richard Earnshaw (lists)" <Richard.Earnshaw@arm.com>
To: Christophe Lyon <christophe.lyon@linaro.org>
Cc: christophe lyon St <christophe.lyon@st.com>,
	gcc Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [ARM/FDPIC v3 03/21] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided
Date: Tue, 23 Oct 2018 15:01:00 -0000	[thread overview]
Message-ID: <13da7741-e438-25bc-2825-1aebd79a4767@arm.com> (raw)
In-Reply-To: <CAKdteOZ_DqAD74pu-+dRBzHL3GPdcMosFG1x+2RD_LoNy3H39A@mail.gmail.com>

On 15/10/2018 11:10, Christophe Lyon wrote:
> 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  <christophe.lyon@st.com>
>>>       Mickaël Guêné <mickael.guene@st.com>
>>>
>>>       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? 

Ideally doesn't exist, so that it doesn't show up in things like --help
when it doesn't work.

> How to achieve that?

Good question, I'm not sure, off hand.  It might be possible to make the
config machinery add additional opt files, but it's not something I've
tried.  You might want to try adding an additional opt file to
extra_options for fdpic targets.

R.

> 
> 
> 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
>>> +   <http://www.gnu.org/licenses/>.  */
>>> +
>>> +/* 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*)
>>>
>>
>>

  reply	other threads:[~2018-10-23 13:58 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-11 13:36 [ARM/FDPIC v3 00/21] FDPIC ABI for ARM Christophe Lyon
2018-10-11 13:36 ` [ARM/FDPIC v3 02/21] [ARM] FDPIC: Handle arm*-*-uclinuxfdpiceabi in configure scripts Christophe Lyon
2018-10-12 10:14   ` Richard Earnshaw (lists)
2018-10-15  8:46     ` Christophe Lyon
2018-11-09 12:31       ` Christophe Lyon
2018-10-11 13:36 ` [ARM/FDPIC v3 01/21] [ARM] FDPIC: Add -mfdpic option support Christophe Lyon
2018-10-12 10:01   ` Richard Earnshaw (lists)
2018-10-17  8:13     ` Sandra Loosemore
2018-10-11 13:37 ` [ARM/FDPIC v3 04/21] [ARM] FDPIC: Add support for FDPIC for arm architecture Christophe Lyon
2018-10-12 11:02   ` Richard Earnshaw (lists)
2018-10-19 13:57     ` Christophe Lyon
2018-10-23 15:12       ` Richard Earnshaw (lists)
2018-10-26 16:34         ` Christophe Lyon
2018-10-26 16:41           ` Richard Earnshaw (lists)
2018-10-29 10:31             ` Christophe Lyon
2018-10-11 13:37 ` [ARM/FDPIC v3 05/21] [ARM] FDPIC: Fix __do_global_dtors_aux and frame_dummy generation Christophe Lyon
2018-10-12 11:29   ` Richard Earnshaw (lists)
2018-10-11 13:37 ` [ARM/FDPIC v3 03/21] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided Christophe Lyon
2018-10-12 10:46   ` Richard Earnshaw (lists)
2018-10-15 10:35     ` Christophe Lyon
2018-10-23 15:01       ` Richard Earnshaw (lists) [this message]
2018-10-23 15:42         ` Segher Boessenkool
2018-10-26 15:33           ` Christophe Lyon
2018-10-29 14:25             ` Christophe Lyon
2018-10-29 23:15               ` Segher Boessenkool
2018-10-11 13:38 ` [ARM/FDPIC v3 07/21] [ARM] FDPIC: Avoid saving/restoring r9 on stack since it is RO Christophe Lyon
2018-10-12 12:21   ` Richard Earnshaw (lists)
2018-10-15 14:30     ` Christophe Lyon
2018-10-11 13:38 ` [ARM/FDPIC v3 06/21] [ARM] FDPIC: Add support for c++ exceptions Christophe Lyon
2018-10-12 11:54   ` Richard Earnshaw (lists)
2018-10-15 14:22     ` Christophe Lyon
2018-10-11 13:38 ` [ARM/FDPIC v3 08/21] [ARM] FDPIC: Ensure local/global binding for function descriptors Christophe Lyon
2018-10-12 12:39   ` Richard Earnshaw (lists)
2018-10-11 13:39 ` [ARM/FDPIC v3 11/21] [ARM] FDPIC: Add support to unwind FDPIC signal frame Christophe Lyon
2018-10-11 13:39 ` [ARM/FDPIC v3 09/21] [ARM] FDPIC: Add support for taking address of nested function Christophe Lyon
2018-10-11 13:39 ` [ARM/FDPIC v3 10/21] [ARM] FDPIC: Implement TLS support Christophe Lyon
2018-10-11 13:40 ` [ARM/FDPIC v3 12/21] [ARM] FDPIC: Restore r9 after we call __aeabi_read_tp Christophe Lyon
2018-10-19 14:02   ` Christophe Lyon
2018-10-11 13:40 ` [ARM/FDPIC v3 13/21] [ARM] FDPIC: Force LSB bit for PC in Cortex-M architecture Christophe Lyon
2018-10-11 13:41 ` [ARM/FDPIC v3 16/21] [ARM][testsuite] FDPIC: Skip v8-m and v6-m tests that currently produce an ICE Christophe Lyon
2018-10-11 13:41 ` [ARM/FDPIC v3 14/21] [ARM][testsuite] FDPIC: Skip unsupported tests Christophe Lyon
2018-10-11 13:41 ` [ARM/FDPIC v3 15/21] [ARM][testsuite] FDPIC: Adjust scan-assembler patterns Christophe Lyon
2018-10-11 13:42 ` [ARM/FDPIC v3 18/21] [ARM][testsuite] FDPIC: Handle *-*-uclinux* Christophe Lyon
2018-10-11 13:42 ` [ARM/FDPIC v3 19/21] [ARM][testsuite] FDPIC: Enable tests on pie_enabled targets Christophe Lyon
2018-10-11 13:42 ` [ARM/FDPIC v3 17/21] [ARM][testsuite] FDPIC: Skip tests that don't work in PIC mode Christophe Lyon
2018-10-11 13:43 ` [ARM/FDPIC v3 20/21] [ARM][testsuite] FDPIC: Adjust pr43698.c to avoid clash with uclibc Christophe Lyon
2018-10-11 13:56 ` [ARM/FDPIC v3 21/21] [ARM][testsuite] FDPIC: Skip tests using architecture older than v7 Christophe Lyon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13da7741-e438-25bc-2825-1aebd79a4767@arm.com \
    --to=richard.earnshaw@arm.com \
    --cc=christophe.lyon@linaro.org \
    --cc=christophe.lyon@st.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).