]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm: Support -mfdpic for more targets
authorFangrui Song <maskray@gcc.gnu.org>
Sun, 27 Oct 2024 19:37:21 +0000 (12:37 -0700)
committerFangrui Song <maskray@gcc.gnu.org>
Sun, 27 Oct 2024 19:53:12 +0000 (12:53 -0700)
Targets that are not arm*-*-uclinuxfdpiceabi can use -S -mfdpic, but -c
-mfdpic does not pass --fdpic to gas.  This is an unnecessary
restriction.  Just define the ASM_SPEC in bpabi.h.

Additionally, use armelf[b]_linux_fdpiceabi emulations for -mfdpic in
linux-eabi.h.  This will allow a future musl fdpic port to use the
desired BFD emulation.

gcc/ChangeLog:

* config/arm/bpabi.h (TARGET_FDPIC_ASM_SPEC): Transform -mfdpic.
* config/arm/linux-eabi.h (TARGET_FDPIC_LINKER_EMULATION): Define.
(SUBTARGET_EXTRA_LINK_SPEC): Use TARGET_FDPIC_LINKER_EMULATION
if -mfdpic.

gcc/config/arm/bpabi.h
gcc/config/arm/linux-eabi.h

index 2e418fa91350c7c3754a6c2a0c4c1390f116fee1..fd4b65a28afeed2d6e3bd2875a7a8ef09df7232a 100644 (file)
@@ -55,7 +55,7 @@
 #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 TARGET_FDPIC_ASM_SPEC "%{mfdpic: --fdpic}"
 
 #define BE8_LINK_SPEC                                                  \
   "%{!r:%{!mbe32:%:be8_linkopt(%{mlittle-endian:little}"               \
index 50b753df9bcd2ae2e8cb08e097a436c735d04814..b12e4ff82cc32680a51ed1086d1ce0bbde760911 100644 (file)
 #undef  TARGET_LINKER_EMULATION
 #if TARGET_BIG_ENDIAN_DEFAULT
 #define TARGET_LINKER_EMULATION "armelfb_linux_eabi"
+#define TARGET_FDPIC_LINKER_EMULATION "armelfb_linux_fdpiceabi"
 #else
 #define TARGET_LINKER_EMULATION "armelf_linux_eabi"
+#define TARGET_FDPIC_LINKER_EMULATION "armelf_linux_fdpiceabi"
 #endif
 
 #undef  SUBTARGET_EXTRA_LINK_SPEC
-#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION
+#define SUBTARGET_EXTRA_LINK_SPEC " -m %{mfdpic: " \
+  TARGET_FDPIC_LINKER_EMULATION ";:" TARGET_LINKER_EMULATION "}"
 
 /* GNU/Linux on ARM currently supports three dynamic linkers:
    - ld-linux.so.2 - for the legacy ABI