From 4d47fe5a8f4a7d0275237c2fb45bad8f654467eb Mon Sep 17 00:00:00 2001 From: Ruslan Bukin Date: Fri, 6 Apr 2018 13:04:17 -0700 Subject: [PATCH] RISC-V: Support for FreeBSD. gcc/ * config.gcc (riscv*-*-freebsd*): Add RISC-V FreeBSD support. * config/riscv/freebsd.h: New. libgcc/ * config.host (riscv*-*-freebsd*): Add RISC-V FreeBSD support. From-SVN: r259190 --- gcc/ChangeLog | 10 ++++++- gcc/config.gcc | 9 +++++++ gcc/config/riscv/freebsd.h | 54 ++++++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 4 +++ libgcc/config.host | 4 +++ 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 gcc/config/riscv/freebsd.h diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f92cd60aed1..2e8f06de6cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-04-06 Ruslan Bukin + Kito Cheng + + * config.gcc (riscv*-*-freebsd*): Add RISC-V FreeBSD support. + * config/riscv/freebsd.h: New. + 2018-04-06 Chung-Ju Wu * config/nds32/nds32.c (nds32_adjust_insn_length): Refine. @@ -10043,4 +10049,6 @@ Copyright (C) 2018 Free Software Foundation, Inc. -Copying and distribu +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/gcc/config.gcc b/gcc/config.gcc index 75d0ae815ff..ae19655bf32 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -2089,6 +2089,15 @@ riscv*-*-elf* | riscv*-*-rtems*) ;; esac ;; +riscv*-*-freebsd*) + tm_file="${tm_file} elfos.h ${fbsd_tm_file} riscv/freebsd.h" + tmake_file="${tmake_file} riscv/t-riscv" + gnu_ld=yes + gas=yes + # Force .init_array support. The configure script cannot always + # automatically detect that GAS supports it, yet we require it. + gcc_cv_initfini_array=yes + ;; mips*-*-netbsd*) # NetBSD/mips, either endian. target_cpu_default="MASK_ABICALLS" tm_file="elfos.h ${tm_file} mips/elf.h ${nbsd_tm_file} mips/netbsd.h" diff --git a/gcc/config/riscv/freebsd.h b/gcc/config/riscv/freebsd.h new file mode 100644 index 00000000000..019b22f6337 --- /dev/null +++ b/gcc/config/riscv/freebsd.h @@ -0,0 +1,54 @@ +/* Definitions for RISC-V FreeBSD systems with ELF format. + Copyright (C) 2018 Free Software Foundation, Inc. + +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 +. */ + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +#undef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS \ + { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER } + +#undef CC1_SPEC +#define CC1_SPEC "%(cc1_cpu) %{profile:-p}" + +/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support + for the special GCC options -static and -shared, which allow us to + link things in one of these three modes by applying the appropriate + combinations of options at link-time. + + When the -shared link option is used a final link is not being + done. */ + +#undef LINK_SPEC +#define LINK_SPEC " \ + -melf" XLEN_SPEC "lriscv \ + %{p:%nconsider using `-pg' instead of `-p' with gprof (1) } \ + %{v:-V} \ + %{assert*} %{R*} %{rpath*} %{defsym*} \ + %{shared:-Bshareable %{h*} %{soname*}} \ + %{symbolic:-Bsymbolic} \ + %{static:-Bstatic} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " FBSD_DYNAMIC_LINKER "} \ + %{static:-static}}" diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index ee8f40fa25b..a715f0b074e 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,7 @@ +2018-04-06 Ruslan Bukin + + * config.host (riscv*-*-freebsd*): Add RISC-V FreeBSD support. + 2018-03-29 H.J. Lu PR target/85100 diff --git a/libgcc/config.host b/libgcc/config.host index 96d55a4aaa8..11b4acaff55 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -1128,6 +1128,10 @@ riscv*-*-linux*) extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o crtendS.o crtbeginT.o" md_unwind_header=riscv/linux-unwind.h ;; +riscv*-*-freebsd*) + tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address}" + extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o crtendS.o crtbeginT.o" + ;; riscv*-*-*) tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address}" extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o" -- 2.30.2