[ARM/FDPIC v6 03/24] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is...
authorChristophe Lyon <christophe.lyon@st.com>
Tue, 10 Sep 2019 07:39:47 +0000 (09:39 +0200)
committerChristophe Lyon <clyon@gcc.gnu.org>
Tue, 10 Sep 2019 07:39:47 +0000 (09:39 +0200)
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 static link is
not supported as it requires specifying 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.

2019-09-10  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.
(MUSL_DYNAMIC_LINKER): Add -fdpic suffix when needed.
* config/arm/uclinuxfdpiceabi.h: New file.

libsanitizer/
* configure.tgt (arm*-*-*fdpiceabi): Sanitizers are
unsupported in this configuration.

Co-Authored-By: Mickaël Guêné <mickael.guene@st.com>
From-SVN: r275565

gcc/ChangeLog
gcc/config.gcc
gcc/config/arm/bpabi.h
gcc/config/arm/linux-eabi.h
gcc/config/arm/uclinuxfdpiceabi.h [new file with mode: 0644]
libsanitizer/ChangeLog
libsanitizer/configure.tgt

index d437968f11b0c01c32613c99000f203030c88272..90c7ecd4e189fee8c80d00388cee5611795600c6 100644 (file)
@@ -1,6 +1,17 @@
 2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
+       Mickaël Guêné <mickael.guene@st.com>
 
-        * config.gcc: Handle *-*-uclinuxfdpiceabi.
+       * 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.
+       (MUSL_DYNAMIC_LINKER): Add -fdpic suffix when needed.
+       * config/arm/uclinuxfdpiceabi.h: New file.
+
+2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
+
+       * config.gcc: Handle *-*-uclinuxfdpiceabi.
 
 2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
        Mickaël Guêné  <mickael.guene@st.com>
index 3554449ff0c114db6bc426158e1c15fc5f1e0f76..69d0a024d850c7f7a7b6faa7975fc581c36f4a2c 100644 (file)
@@ -1211,6 +1211,11 @@ arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)
        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"
index e1bacf44543c87d96372511bdb9a16a5b286e8e4..75d9a99f2c4a89ed63a3a709501c7f7209ff7785 100644 (file)
@@ -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,8 @@
 /* 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 ""
index 66ec0ea3980087aaaebac696376ad91d5d9bdd08..b348971fe359942e358b11f10426a553101a511c 100644 (file)
@@ -89,7 +89,7 @@
 #define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}"
 #endif
 #define MUSL_DYNAMIC_LINKER \
-  "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1"
+  "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1"
 
 /* At this point, bpabi.h will have clobbered LINK_SPEC.  We want to
    use the GNU/Linux version, not the generic BPABI version.  */
 #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)
 
diff --git a/gcc/config/arm/uclinuxfdpiceabi.h b/gcc/config/arm/uclinuxfdpiceabi.h
new file mode 100644 (file)
index 0000000..328adcb
--- /dev/null
@@ -0,0 +1,54 @@
+/* Configuration file for ARM GNU/Linux FDPIC EABI targets.
+   Copyright (C) 2018,2019 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 %{!fno-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.  */
+/* -static is not supported, because we have to define the
+   dynamic-linker, as we have some relocations to resolve at load
+   time. We do not generate an error in case the user explictly passes
+   the -dynamic-linker option to the linker.  */
+#undef  SUBTARGET_EXTRA_LINK_SPEC
+#define SUBTARGET_EXTRA_LINK_SPEC                          \
+  "%{!mno-fdpic: -m " TARGET_FDPIC_LINKER_EMULATION        \
+   "%{!shared:%{!r: -pie}} }"                              \
+  "%{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)
index 0073abe123fe24bab5dadecabe250cf827d88c16..a28b63e09565a7bdd1c6a65031c3b78bea4f6143 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
+       Mickaël Guêné <mickael.guene@st.com>
+
+       * configure.tgt (arm*-*-*fdpiceabi): Sanitizers are
+       unsupported in this configuration.
+
 2019-08-16  Iain Sandoe  <iain@sandoe.co.uk>
 
        * LOCAL_PATCHES: Add r274585.
index 3fb90eab021eec4c9db5063b50ee2ae528400469..714f2923605011329b54be7e9fcf7af44a0593fd 100644 (file)
@@ -42,6 +42,9 @@ case "${target}" in
        ;;
   sparc*-*-solaris2.11*)
        ;;
+  arm*-*-*fdpiceabi)
+       UNSUPPORTED=1
+       ;;
   arm*-*-linux*)
        ;;
   mips*64*-*-linux*)