]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: Add support for powerpc64le-unknown-freebsd
authorPiotr Kubaj <pkubaj@FreeBSD.org>
Wed, 16 Dec 2020 22:26:18 +0000 (22:26 +0000)
committerSegher Boessenkool <segher@kernel.crashing.org>
Mon, 28 Dec 2020 12:29:35 +0000 (12:29 +0000)
This implements support for powerpc64le architecture on FreeBSD.  Since
we don't have powerpcle (32-bit), I did not add support for powerpcle
here. This remains to be changed if there is powerpcle support in the
future.

2020-12-15  Piotr Kubaj  <pkubaj@FreeBSD.org>

gcc/
* config.gcc (powerpc*le-*-freebsd*): Add.
* configure.ac (powerpc*le-*-freebsd*): Ditto.
* configure: Regenerate.
* config/rs6000/freebsd64.h (ASM_SPEC_COMMON): Use ENDIAN_SELECT.
(DEFAULT_ASM_ENDIAN): Add little endian support.
(LINK_OS_FREEBSD_SPEC64): Ditto.

(cherry picked from commit 2a4183234a45ba28db5ce16cf3ccdd70cdef3b7c)

gcc/config.gcc
gcc/config/rs6000/freebsd64.h
gcc/configure
gcc/configure.ac

index 01dde36d80558c43fee095d54ad0b34d0897a534..67bce508a1da2f5f58fc7bbd6193cc324860c975 100644 (file)
@@ -2868,6 +2868,10 @@ powerpc*-*-freebsd*)
        tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h ${fbsd_tm_file} rs6000/sysv4.h"
        extra_options="${extra_options} rs6000/sysv4.opt"
        tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
+       case ${target} in
+           powerpc*le-*-*)
+               tm_file="${tm_file} rs6000/sysv4le.h" ;;
+       esac
        case ${target} in
             powerpc64*)
                tm_file="${tm_file} rs6000/default64.h rs6000/freebsd64.h"
index 50e1ada727c36260b272006fb2f66c715dfbf827..93f6817c0fc3f7911a175434117d28e6de4dd2ee 100644 (file)
@@ -157,8 +157,8 @@ extern int dot_symbols;
 #define ASM_SPEC64 "-a64"
 
 #define ASM_SPEC_COMMON "%(asm_cpu) \
-%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
-%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}"
+%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
+  ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
 
 #undef SUBSUBTARGET_EXTRA_SPECS
 #define SUBSUBTARGET_EXTRA_SPECS                                       \
@@ -180,9 +180,15 @@ extern int dot_symbols;
     %{static:-Bstatic}} \
   %{symbolic:-Bsymbolic}"
 
+#undef  DEFAULT_ASM_ENDIAN
 #define LINK_OS_FREEBSD_SPEC32 "-melf32ppc_fbsd " LINK_OS_FREEBSD_SPEC_DEF
-  
+#if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
+#define DEFAULT_ASM_ENDIAN " -mlittle"
+#define LINK_OS_FREEBSD_SPEC64 "-melf64lppc_fbsd " LINK_OS_FREEBSD_SPEC_DEF
+#else
+#define DEFAULT_ASM_ENDIAN " -mbig"
 #define LINK_OS_FREEBSD_SPEC64 "-melf64ppc_fbsd " LINK_OS_FREEBSD_SPEC_DEF
+#endif
 
 #undef MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS { "m64" }
index b4088d8fd1e20ac7c24054c13aad5a3b277ac3ba..4fa977217a75d20f8f436f6229641d5c16626590 100755 (executable)
@@ -29411,6 +29411,9 @@ case "$target:$tm_file" in
      *-*-linux*)
      emul_name="-melf64ppc"
       ;;
+     *le-*-freebsd*)
+     emul_name="-melf64lppc_fbsd"
+      ;;
      *-*-freebsd*)
      emul_name="-melf64ppc_fbsd"
       ;;
index 070b9c6c497b38b02cabbb82c294139742c5ec49..84dceb8074ab4615316e09f1f339ed93eca6d6e9 100644 (file)
@@ -5879,6 +5879,9 @@ case "$target:$tm_file" in
      *-*-linux*)
      emul_name="-melf64ppc"
       ;;
+     *le-*-freebsd*)
+     emul_name="-melf64lppc_fbsd"
+      ;;
      *-*-freebsd*)
      emul_name="-melf64ppc_fbsd"
       ;;