aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2003-01-19 13:04:24 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2003-01-19 13:04:24 +0000
commit3bd6d4c458a197683ce3f82b884ad1546b7d67de (patch)
tree1c9527057e11cd9aeab8e1192678a236184395a6 /gcc/config
parente9f13564bb2cd1147517bcee06e2de0aefeb4af1 (diff)
downloadgcc-3bd6d4c458a197683ce3f82b884ad1546b7d67de.zip
gcc-3bd6d4c458a197683ce3f82b884ad1546b7d67de.tar.gz
gcc-3bd6d4c458a197683ce3f82b884ad1546b7d67de.tar.bz2
config.gcc (mips64*-*-linux*): Added.
* config.gcc (mips64*-*-linux*): Added. * config/mips/linux64.h, config/mips/t-linux64: New file. * config/mips/iris6.h (MIPS_TFMODE_FORMAT): Define. * config/mips/mips.c (override_options): Use it. * config/mips/mips.h (TARGET_SWITCHES): Added... (SUBTARGET_TARGET_SWITCHES): New, empty by default. * Makefile.in (SPECS): New. (STAGESTUFF, specs, mostlyclean, install-common): Use it. * gcc.c (process_command): Move self-spec processing past spec file loading. * doc/tm.texi (DRIVER_SELF_SPECS): Document the change. * doc/fragments.texi (MULTILIB_EXTRA_OPTS): Document need for CRTSTUFF_T_CFLAGS. (SPECS): Document. * doc/invoke.texi (-mabi-fake-default): Document. From-SVN: r61481
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/mips/iris6.h4
-rw-r--r--gcc/config/mips/linux64.h99
-rw-r--r--gcc/config/mips/mips.c4
-rw-r--r--gcc/config/mips/mips.h2
-rw-r--r--gcc/config/mips/t-linux6441
5 files changed, 149 insertions, 1 deletions
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index ddfea8f..314f98c 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Iris version 6.
- Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002
+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -509,3 +509,5 @@ do { \
%{shared:-hidden_symbol __do_global_ctors,__do_global_ctors_1,__do_global_dtors} \
-_SYSTYPE_SVR4 -woff 131 \
%{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}"
+
+#define MIPS_TFMODE_FORMAT ibm_extended_format
diff --git a/gcc/config/mips/linux64.h b/gcc/config/mips/linux64.h
new file mode 100644
index 0000000..ef30146
--- /dev/null
+++ b/gcc/config/mips/linux64.h
@@ -0,0 +1,99 @@
+/* Definitions for MIPS running Linux-based GNU systems with ELF format
+ using n32/64 abi.
+ Copyright 2002, 2003 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 2, 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 COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* This sets the post-install default ABI to n32. This must NOT be
+ kept in sync with the default ABI in gcc/config.gcc; it's actually
+ meant to override that. However, for correct behavior at build
+ time, we also need t-linux64 to get the build-time specs in line
+ with the setting in config.gcc. */
+#define DRIVER_DEFAULT_ABI_SELF_SPEC "%{!mabi=*:-mabi=n32}"
+#define SUBTARGET_EXTRA_SPECS \
+ { "driver_default_abi_self_spec", DRIVER_DEFAULT_ABI_SELF_SPEC },
+#define DRIVER_SELF_SPECS \
+"%{mabi-fake-default:%{!mabi=*:-mabi=32}}", \
+"%(driver_default_abi_self_spec)", \
+"%{!mips*:%{mabi=32:-mips1}%{mabi=n32:-mips3}%{mabi=64:-mips4}}"
+#undef SUBTARGET_TARGET_SWITCHES
+#define SUBTARGET_TARGET_SWITCHES \
+ { "abi-fake-default", 0, N_("Same as -mabi=32, just trickier") },
+
+#undef SUBTARGET_ASM_SPEC
+#define SUBTARGET_ASM_SPEC "\
+%{!fno-PIC:%{!fno-pic:-KPIC}} \
+%{fno-PIC:-non_shared} %{fno-pic:-non_shared} \
+%{mabi=64:-64} %{mabi=n32:-n32} \
+%{!mips*: %{mabi=n32|mabi=32:-mips3} %{mabi=64:-mips4}}"
+
+#undef LIB_SPEC
+#define LIB_SPEC "\
+%{!static: \
+ %{mabi=n32:-rpath-link %R/lib32:%R/usr/lib32} \
+ %{mabi=64:-rpath-link %R/lib64:%R/usr/lib64} \
+ %{mabi=32:-rpath-link %R/lib:%R/usr/lib}} \
+%{!shared: %{pthread:-lthread} %{profile:-lc_p} %{!profile: -lc}}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "\
+%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \
+%{bestGnum} %{shared} %{non_shared} \
+%{call_shared} %{no_archive} %{exact_version} \
+ %(endian_spec) \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker: \
+ %{mabi=n32: -dynamic-linker /lib32/ld.so.1} \
+ %{mabi=64: -dynamic-linker /lib64/ld.so.1} \
+ %{mabi=32: -dynamic-linker /lib/ld.so.1}}} \
+ %{static:-static}}} \
+%{mabi=n32: -melf32btsmipn32} \
+%{mabi=64: -melf64btsmip} \
+%{mabi=32: -melf32btsmip}"
+
+#undef STARTFILE_PREFIX_SPEC
+#define STARTFILE_PREFIX_SPEC "\
+%{mabi=n32: /lib32/ /usr/lib32/} \
+%{mabi=64: /lib64/ /usr/lib64/} \
+%{mabi=32: /lib/ /usr/lib/}"
+
+#undef LOCAL_LABEL_PREFIX
+#define LOCAL_LABEL_PREFIX ((mips_abi == ABI_32 || mips_abi == ABI_O64) \
+ ? "$" : ".")
+
+/* The size in bytes of a DWARF field indicating an offset or length
+ relative to a debug info section, specified to be 4 bytes in the DWARF-2
+ specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */
+#define DWARF_OFFSET_SIZE PTR_SIZE
+
+#undef ASM_PREFERRED_EH_DATA_FORMAT
+#if 0 /* We can't use relative addressing modes on NEWABI :-( */
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+ (flag_pic \
+ ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_sdata4 \
+ : DW_EH_PE_absptr)
+#endif
+
+/* GNU/Linux doesn't use the same floating-point format that IRIX uses
+ for long double. There's no need to override this here, since
+ ieee_quad_format is the default, but let's put this here to make
+ sure nobody thinks we just forgot to set it to something else. */
+#define MIPS_TFMODE_FORMAT ieee_quad_format
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 5c0b78a..c0133fa 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -5359,6 +5359,10 @@ override_options ()
else
mips16 = 0;
+#ifdef MIPS_TFMODE_FORMAT
+ real_format_for_mode[TFmode - QFmode] = &MIPS_TFMODE_FORMAT;
+#endif
+
mips_print_operand_punct['?'] = 1;
mips_print_operand_punct['#'] = 1;
mips_print_operand_punct['&'] = 1;
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 2514006..09d4663 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -534,6 +534,7 @@ extern void sbss_section PARAMS ((void));
#define TARGET_SWITCHES \
{ \
+ SUBTARGET_TARGET_SWITCHES \
{"no-crt0", 0, \
N_("No default crt0.o") }, \
{"int64", MASK_INT64 | MASK_LONG64, \
@@ -993,6 +994,7 @@ extern void sbss_section PARAMS ((void));
#define GAS_ASM_SPEC "%{mtune=*} %{v}"
+#define SUBTARGET_TARGET_SWITCHES
extern int mips_abi;
diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
new file mode 100644
index 0000000..cf63928
--- /dev/null
+++ b/gcc/config/mips/t-linux64
@@ -0,0 +1,41 @@
+MULTILIB_OPTIONS = mabi=32/mabi=n32/mabi=64
+MULTILIB_DIRNAMES = o32 32 64
+MULTILIB_OSDIRNAMES = ../lib ../lib32 ../lib64
+
+EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+
+LIB2FUNCS_EXTRA = $(srcdir)/config/mips/_tilib.c
+
+TPBIT = tp-bit.c
+
+tp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#ifdef __MIPSEL__' > tp-bit.c
+ echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c
+ echo '#endif' >> tp-bit.c
+ echo '#if __LDBL_MANT_DIG__ == 113' >> tp-bit.c
+ echo '# define TFLOAT' >> tp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> tp-bit.c
+ echo '#endif' >> tp-bit.c
+
+# This arranges for us to extract the built-in specs of the compiler
+# into specs.install. It's this file that we're going to install as
+# specs. Howver, at toolchain build time, we must use specs that
+# enforce the defaults that the compiler expects, namely, the o32 ABI,
+# instead of n32, that we want to use as the default post install.
+SPECS = specs.install
+specs: specs.install
+ # Changing the build-time default ABI from n32 to o32
+ # The post-install default ABI will remain n32
+ @if test "x`grep '!mabi=\*:-mabi=n32' specs.install`" = \
+ "x%{!mabi=*:-mabi=n32}"; then \
+ sed 's,\(!mabi=\*:-mabi\)=n32,\1=32,' < specs.install > $@ ; \
+ else \
+ echo failed, gcc/config/mips/t-linux64 needs updating >&2; \
+ false; \
+ fi
+
+# This arranges for anyone who uses gcc -print-multi-lib post
+# installation to get lists of options for each multilib to get
+# options that actually work.
+MULTILIB_EXTRA_OPTS = mabi-fake-default
+CRTSTUFF_T_CFLAGS = -mabi-fake-default