2011-07-22 Robert Millan <rmh@gnu.org>
Support for GNU/kFreeBSD systems running on MIPS.
* config.gcc: Detect mips*-*-kfreebsd*-gnu.
* config.host: Likewise.
* config/mips/kfreebsd-gnu.h: New file.
* config/mips/kfreebsd-gnu64.h: New file.
* config/mips/gnu-user.h: Restrict `-march=native' support to GNU/Linux.
===================================================================
@@ -478,6 +478,14 @@
tmake_file="{$tmake_file} t-crtfm"
md_unwind_header=mips/linux-unwind.h
;;
+mips64*-*-kfreebsd*-gnu)
+ extra_parts="$extra_parts crtfastmath.o"
+ tmake_file="{$tmake_file} t-crtfm"
+ ;;
+mips*-*-kfreebsd*-gnu) # GNU/kFreeBSD MIPS, either endian.
+ extra_parts="$extra_parts crtfastmath.o"
+ tmake_file="{$tmake_file} t-crtfm"
+ ;;
mips*-*-openbsd*)
;;
mipsisa32-*-elf* | mipsisa32el-*-elf*)
===================================================================
@@ -1819,20 +1819,28 @@
tm_file="elfos.h ${tm_file} mips/elf.h netbsd.h netbsd-elf.h mips/netbsd.h"
extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
;;
-mips64*-*-linux* | mipsisa64*-*-linux*)
- tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h"
+mips64*-*-linux* | mipsisa64*-*-linux* | mips64*-*-kfreebsd*-gnu | mipsisa64*-*-kfreebsd*-gnu)
+ tm_file="dbxelf.h elfos.h gnu-user.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h"
tmake_file="${tmake_file} mips/t-linux64 mips/t-libgcc-mips16"
tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32"
+ case ${target_os} in
+ linux*)
+ tm_file="${tm_file} linux.h mips/linux64.h"
+ ;;
+ kfreebsd*-gnu)
+ tm_file="${tm_file} kfreebsd-gnu.h mips/kfreebsd-gnu64.h"
+ ;;
+ esac
case ${target} in
- mips64el-st-linux-gnu)
+ mips64el-st-*)
tm_file="${tm_file} mips/st.h"
tmake_file="${tmake_file} mips/t-st"
;;
- mips64octeon*-*-linux*)
+ mips64octeon*-*-*)
tm_defines="${tm_defines} MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\""
target_cpu_default=MASK_SOFT_FLOAT_ABI
;;
- mipsisa64r2*-*-linux*)
+ mipsisa64r2*-*-*)
tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65"
;;
esac
@@ -1841,11 +1849,27 @@
gas=yes
test x$with_llsc != x || with_llsc=yes
;;
-mips*-*-linux*) # Linux MIPS, either endian.
- tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h"
+mips*-*-linux* | mips*-*-kfreebsd*-gnu) # GNU/* MIPS, either endian.
+ tm_file="dbxelf.h elfos.h gnu-user.h glibc-stdint.h ${tm_file} mips/gnu-user.h"
tmake_file="${tmake_file} mips/t-libgcc-mips16"
+ case ${target_os} in
+ linux*)
+ tm_file="${tm_file} linux.h mips/linux.h"
+ ;;
+ kfreebsd*-gnu)
+ tm_file="${tm_file} kfreebsd-gnu.h mips/kfreebsd-gnu.h"
+ ;;
+ esac
if test x$enable_targets = xall; then
- tm_file="${tm_file} mips/gnu-user64.h mips/linux64.h"
+ tm_file="${tm_file} mips/gnu-user64.h"
+ case ${target_os} in
+ linux*)
+ tm_file="${tm_file} mips/linux64.h"
+ ;;
+ kfreebsd*-gnu)
+ tm_file="${tm_file} mips/kfreebsd-gnu64.h"
+ ;;
+ esac
tmake_file="${tmake_file} mips/t-linux64"
tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_32"
fi
===================================================================
@@ -106,8 +106,8 @@
#endif
/* -march=native handling only makes sense with compiler running on
- a MIPS chip. */
-#if defined(__mips__)
+ a MIPS chip. Also, for now only Linux targets are supported. */
+#if defined(__mips__) && defined(__linux__)
extern const char *host_detect_local_cpu (int argc, const char **argv);
# define EXTRA_SPEC_FUNCTIONS \
{ "local_cpu_detect", host_detect_local_cpu },
===================================================================
@@ -0,0 +1,31 @@
+/* Definitions for MIPS running kFreeBSD-based GNU systems with ELF format
+ using n32/64 abi.
+ Copyright (C) 2011
+ Free Software Foundation, Inc.
+ Contributed by Robert Millan.
+
+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/>. */
+
+#define GNU_USER_LINK_EMULATION32 "elf32%{EB:b}%{EL:l}tsmip_fbsd"
+#define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip_fbsd"
+#define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32_fbsd"
+
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1"
+#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1"
+
+#define GNU_USER_DYNAMIC_LINKERN32 GLIBC_DYNAMIC_LINKERN32
===================================================================
@@ -0,0 +1,22 @@
+/* Definitions for MIPS running kFreeBSD-based GNU systems with ELF format
+ Copyright (C) 2011
+ Free Software Foundation, Inc.
+ Contributed by Robert Millan.
+
+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/>. */
+
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"