RISC-V: Add riscv{32,64}be with big endian as default
gcc/ * common/config/riscv/riscv-common.c (TARGET_DEFAULT_TARGET_FLAGS): Set default endianness. * config.gcc (riscv32be-*, riscv64be-*): Set TARGET_BIG_ENDIAN_DEFAULT to 1. * config/riscv/elf.h (LINK_SPEC): Change -melf* value depending on default endianness. * config/riscv/freebsd.h (LINK_SPEC): Likewise. * config/riscv/linux.h (LINK_SPEC): Likewise. * config/riscv/riscv.c (TARGET_DEFAULT_TARGET_FLAGS): Set default endianness. * config/riscv/riscv.h (DEFAULT_ENDIAN_SPEC): New macro.
This commit is contained in:
parent
a9604fcbb2
commit
cd1e2f6325
7 changed files with 34 additions and 3 deletions
|
@ -32,6 +32,11 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "config/riscv/riscv-protos.h"
|
||||
#include "config/riscv/riscv-subset.h"
|
||||
|
||||
#ifdef TARGET_BIG_ENDIAN_DEFAULT
|
||||
#undef TARGET_DEFAULT_TARGET_FLAGS
|
||||
#define TARGET_DEFAULT_TARGET_FLAGS (MASK_BIG_ENDIAN)
|
||||
#endif
|
||||
|
||||
/* Type for implied ISA info. */
|
||||
struct riscv_implied_info_t
|
||||
{
|
||||
|
|
|
@ -2468,6 +2468,11 @@ riscv*-*-linux*)
|
|||
tmake_file="${tmake_file} riscv/t-riscv riscv/t-linux"
|
||||
gnu_ld=yes
|
||||
gas=yes
|
||||
case $target in
|
||||
riscv32be-*|riscv64be-*)
|
||||
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
;;
|
||||
esac
|
||||
# Force .init_array support. The configure script cannot always
|
||||
# automatically detect that GAS supports it, yet we require it.
|
||||
gcc_cv_initfini_array=yes
|
||||
|
@ -2491,6 +2496,11 @@ riscv*-*-elf* | riscv*-*-rtems*)
|
|||
tmake_file="${tmake_file} riscv/t-riscv"
|
||||
gnu_ld=yes
|
||||
gas=yes
|
||||
case $target in
|
||||
riscv32be-*|riscv64be-*)
|
||||
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
;;
|
||||
esac
|
||||
# Force .init_array support. The configure script cannot always
|
||||
# automatically detect that GAS supports it, yet we require it.
|
||||
gcc_cv_initfini_array=yes
|
||||
|
@ -2500,6 +2510,11 @@ riscv*-*-freebsd*)
|
|||
tmake_file="${tmake_file} riscv/t-riscv"
|
||||
gnu_ld=yes
|
||||
gas=yes
|
||||
case $target in
|
||||
riscv32be-*|riscv64be-*)
|
||||
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
;;
|
||||
esac
|
||||
# Force .init_array support. The configure script cannot always
|
||||
# automatically detect that GAS supports it, yet we require it.
|
||||
gcc_cv_initfini_array=yes
|
||||
|
|
|
@ -18,7 +18,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define LINK_SPEC "\
|
||||
-melf" XLEN_SPEC "lriscv \
|
||||
-melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv \
|
||||
%{mno-relax:--no-relax} \
|
||||
%{mbig-endian:-EB} \
|
||||
%{mlittle-endian:-EL} \
|
||||
|
|
|
@ -40,7 +40,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC " \
|
||||
-melf" XLEN_SPEC "lriscv \
|
||||
-melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv \
|
||||
%{p:%nconsider using `-pg' instead of `-p' with gprof (1)} \
|
||||
%{v:-V} \
|
||||
%{assert*} %{R*} %{rpath*} %{defsym*} \
|
||||
|
|
|
@ -58,7 +58,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
"%{mabi=ilp32:_ilp32}"
|
||||
|
||||
#define LINK_SPEC "\
|
||||
-melf" XLEN_SPEC "lriscv" LD_EMUL_SUFFIX " \
|
||||
-melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv" LD_EMUL_SUFFIX " \
|
||||
%{mno-relax:--no-relax} \
|
||||
%{mbig-endian:-EB} \
|
||||
%{mlittle-endian:-EL} \
|
||||
|
|
|
@ -5526,6 +5526,11 @@ riscv_asan_shadow_offset (void)
|
|||
#undef TARGET_ASAN_SHADOW_OFFSET
|
||||
#define TARGET_ASAN_SHADOW_OFFSET riscv_asan_shadow_offset
|
||||
|
||||
#ifdef TARGET_BIG_ENDIAN_DEFAULT
|
||||
#undef TARGET_DEFAULT_TARGET_FLAGS
|
||||
#define TARGET_DEFAULT_TARGET_FLAGS (MASK_BIG_ENDIAN)
|
||||
#endif
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
#include "gt-riscv.h"
|
||||
|
|
|
@ -30,6 +30,12 @@ along with GCC; see the file COPYING3. If not see
|
|||
/* Target CPU versions for D. */
|
||||
#define TARGET_D_CPU_VERSIONS riscv_d_target_versions
|
||||
|
||||
#ifdef TARGET_BIG_ENDIAN_DEFAULT
|
||||
#define DEFAULT_ENDIAN_SPEC "b"
|
||||
#else
|
||||
#define DEFAULT_ENDIAN_SPEC "l"
|
||||
#endif
|
||||
|
||||
/* Default target_flags if no switches are specified */
|
||||
|
||||
#ifndef TARGET_DEFAULT
|
||||
|
|
Loading…
Add table
Reference in a new issue