| /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. |
| Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 |
| Free Software Foundation, Inc. |
| |
| This file is part of GNU CC. |
| |
| GNU CC 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 2, or (at your option) |
| any later version. |
| |
| GNU CC 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 GNU CC; see the file COPYING. If not, write to |
| the Free Software Foundation, 59 Temple Place - Suite 330, |
| Boston, MA 02111-1307, USA. */ |
| |
| |
| /* Define default target values. */ |
| |
| #ifndef TARGET_ENDIAN_DEFAULT |
| #define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN |
| #endif |
| |
| #ifndef MACHINE_TYPE |
| #if TARGET_ENDIAN_DEFAULT != 0 |
| #define MACHINE_TYPE "NetBSD/mipseb ELF" |
| #else |
| #define MACHINE_TYPE "NetBSD/mipsel ELF" |
| #endif |
| #endif |
| |
| #define TARGET_DEFAULT (MASK_GAS|MASK_ABICALLS) |
| |
| |
| /* XXX Don't use DWARF-2 debugging info, for now. */ |
| #undef DBX_DEBUGGING_INFO |
| #define DBX_DEBUGGING_INFO |
| #undef PREFERRED_DEBUGGING_TYPE |
| #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG |
| |
| |
| /* Include the generic MIPS ELF configuration. */ |
| #include <mips/elf.h> |
| |
| /* Now clean up after it. */ |
| #undef OBJECT_FORMAT_COFF |
| #undef MD_EXEC_PREFIX |
| #undef MD_STARTFILE_PREFIX |
| #undef US_SOFTWARE_GOFAST |
| #undef INIT_SUBTARGET_OPTABS |
| #define INIT_SUBTARGET_OPTABS |
| |
| |
| /* Get generic NetBSD definitions. */ |
| #include <netbsd.h> |
| |
| |
| /* Get generic NetBSD ELF definitions. */ |
| #include <netbsd-elf.h> |
| |
| |
| /* Provide CPP predefines appropriate for NetBSD. We default to |
| MIPS-I. */ |
| |
| #undef CPP_PREDEFINES |
| #if TARGET_ENDIAN_DEFAULT != 0 |
| #define CPP_PREDEFINES \ |
| "-D__NetBSD__ -D__ELF__ -D__mips__ -D__mips=1 -D__MIPSEB__ \ |
| -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ \ |
| -Asystem=unix -Asystem=NetBSD -Amachine=mips" |
| #else |
| #define CPP_PREDEFINES \ |
| "-D__NetBSD__ -D__ELF__ -D__mips__ -D__mips=1 -D__MIPSEL__ \ |
| -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ \ |
| -Asystem=unix -Asystem=NetBSD -Amachine=mips" |
| #endif |
| |
| |
| /* Provide a CPP_SPEC appropriate for NetBSD. This is a simplified |
| CPP_SPEC from <mips/mips.h>. We use the SUBTARGET_CPP_SPEC to |
| deal with NetBSD-specific CPP options. */ |
| |
| #undef CPP_SPEC |
| #define CPP_SPEC \ |
| "%(subtarget_cpp_size_spec) \ |
| %{mips3:-U__mips -D__mips=3 -D__mips64} \ |
| %{mips4:-U__mips -D__mips=4 -D__mips64} \ |
| %{mips32:-U__mips -D__mips=32} \ |
| %{mips64:-U__mips -D__mips=64 -D__mips64} \ |
| %{mgp32:-U__mips64} %{mgp64:-D__mips64} \ |
| %{mfp32:-D__mips_fpr=32} %{mfp64:-D__mips_fpr=64} \ |
| %{!mfp32: \ |
| %{!mfp64: \ |
| %{mgp32:-D__mips_fpr=32} \ |
| %{!mgp32: %(cpp_fpr_spec)}}} \ |
| %{msingle-float: \ |
| %{!msoft-float:-D__mips_single_float}} \ |
| %{m4650: \ |
| %{!msoft-float:-D__mips_single_float}} \ |
| %{msoft-float:-D__mips_soft_float} \ |
| %{mabi=eabi:-D__mips_eabi} \ |
| %{mips16:%{!mno-mips16:-D__mips16}} \ |
| %{EB:-U__MIPSEL__ -D__MIPSEB__} \ |
| %{EL:-U__MIPSEB__ -D__MIPSEL__} \ |
| %(subtarget_cpp_spec) " |
| |
| |
| /* Provide a SUBTARGET_CPP_SIZE_SPEC appropriate for NetBSD. In |
| addition to the normal work done by this spec, we also define |
| __LONG64 or not (so that <machine/ansi.h> can tell). */ |
| |
| #undef SUBTARGET_CPP_SIZE_SPEC |
| #define SUBTARGET_CPP_SIZE_SPEC \ |
| "%{mlong64: \ |
| %{!mips1: \ |
| %{!mips2: \ |
| %{!mips32:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int -D__LONG64}}}} \ |
| %{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int -U__LONG64}" |
| |
| |
| /* Provide a SUBTARGET_CPP_SPEC appropriate for NetBSD. Currently, |
| we just deal with the GCC option '-posix'. */ |
| |
| #undef SUBTARGET_CPP_SPEC |
| #define SUBTARGET_CPP_SPEC "%{posix:-D_POSIX_SOURCE}" |
| |
| |
| /* Provide a LINK_SPEC appropriate for a NetBSD/mips target. |
| This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for |
| the MIPS target. */ |
| |
| #undef LINK_SPEC |
| #define LINK_SPEC \ |
| "%{assert*} %{R*} %{rpath*} \ |
| %{EL:-m elf32lmip} \ |
| %{EB:-m elf32bmip} \ |
| %(endian_spec) \ |
| %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ |
| %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \ |
| %{shared:-shared} \ |
| %{!shared: \ |
| -dc -dp \ |
| %{!nostdlib: \ |
| %{!r*: \ |
| %{!e*:-e __start}}} \ |
| %{!static: \ |
| %{rdynamic:-export-dynamic} \ |
| %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ |
| %{static:-static}}" |
| |
| |
| #undef SUBTARGET_ASM_SPEC |
| #define SUBTARGET_ASM_SPEC \ |
| "%{fpic:-KPIC} %{fPIC:-KPIC}" |
| |
| |
| /* -G is incompatible with -KPIC which is the default, so only allow objects |
| in the small data section if the user explicitly asks for it. */ |
| |
| #undef MIPS_DEFAULT_GVALUE |
| #define MIPS_DEFAULT_GVALUE 0 |
| |
| |
| /* This defines which switch letters take arguments. -G is a MIPS |
| special. */ |
| |
| #undef SWITCH_TAKES_ARG |
| #define SWITCH_TAKES_ARG(CHAR) \ |
| (DEFAULT_SWITCH_TAKES_ARG (CHAR) \ |
| || (CHAR) == 'R' \ |
| || (CHAR) == 'G') |
| |
| |
| #undef ASM_FINAL_SPEC |
| #undef SET_ASM_OP |
| |
| |
| /* Make gcc agree with <machine/ansi.h> */ |
| |
| #undef WCHAR_TYPE |
| #define WCHAR_TYPE "int" |
| |
| #undef WCHAR_UNSIGNED |
| #define WCHAR_UNSIGNED 0 |
| |
| #undef WCHAR_TYPE_SIZE |
| #define WCHAR_TYPE_SIZE 32 |
| |
| #undef WINT_TYPE |
| #define WINT_TYPE "int" |