diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2010-05-06 18:47:18 +0000 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2010-05-06 18:47:18 +0000 |
commit | 9aaa1ee883ca0e914b52d5b4bd21933b77267c28 (patch) | |
tree | d0d38db9390d14af7f19efbc82b1f9639aec9142 /gcc/config/mips/iris6.h | |
parent | 0718e39d0de2f69d0ede9aced24c06bfddb0b47b (diff) | |
download | gcc-9aaa1ee883ca0e914b52d5b4bd21933b77267c28.zip gcc-9aaa1ee883ca0e914b52d5b4bd21933b77267c28.tar.gz gcc-9aaa1ee883ca0e914b52d5b4bd21933b77267c28.tar.bz2 |
config.gcc: Removed mips-sgi-irix5*, mips-sgi-irix6.[0-4]* from list of obsolete configurations.
gcc:
* config.gcc: Removed mips-sgi-irix5*, mips-sgi-irix6.[0-4]* from
list of obsolete configurations.
Disabled check for obsolete configurations.
(mips-sgi-irix[56]*): Restrict to mips-sgi-irix6.5*.
Removed support for previous versions.
* config/mips/iris.h: Removed.
* config/mips/iris5.h: Removed.
* config/mips/iris6.h: Merged old iris.h contents.
(TARGET_IRIX): Removed.
(DRIVER_SELF_SPECS): Removed mabi=32.
(IDENT_ASM_OP): Removed undef.
(STARTFILE_SPEC): Removed mabi=32.
(ENDFILE_SPEC): Likewise.
(IRIX_SUBTARGET_LINK_SPEC): Likewise.
(MACHINE_TYPE): Update for IRIX 6.5.
* config/mips/mips.c (mips_build_builtin_va_list): Replaced
TARGET_IRIX by TARGET_IRIX6.
(mips_file_start): Likewise.
(mips_output_external): Remove IRIX 5/6 O32 support.
(mips_output_function_prologue): Likewise.
* config/mips/mips.h (TARGET_GPWORD): Replaced TARGET_IRIX by
TARGET_IRIX6.
(TARGET_CPU_CPP_BUILTINS): Likewise.
(TARGET_IRIX): Removed.
* config/mips/t-iris6 (MULTILIB_OPTIONS): Removed mabi=32.
(MULTILIB_DIRNAMES): Removed 32.
(MULTILIB_OSDIRNAMES): Removed ../lib.
* doc/install.texi (Prerequisites): Don't reference IRIX before
6.5.
(Specific, mips-sgi-irix5): Document removal.
(Specific, mips-sgi-irix6): Document IRIX 6.[0-4] and O32 ABI
removal.
Remove references to older IRIX 6 releases and the O32 ABI.
gcc/ada:
* gcc-interface/Makefile.in: Removed mips-sgi-irix5* support.
libstdc++-v3:
* configure.host: Removed irix[1-6], irix[1-5].*, irix6.[0-4]*
support.
* config/os/irix/irix5.2: Removed.
From-SVN: r159121
Diffstat (limited to 'gcc/config/mips/iris6.h')
-rw-r--r-- | gcc/config/mips/iris6.h | 284 |
1 files changed, 242 insertions, 42 deletions
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index 026e364..784e947 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -1,6 +1,6 @@ -/* Definitions of target machine for GNU compiler. IRIX version 6. - Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2010 +/* Definitions of target machine for GNU compiler. IRIX 6.5 version. + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -19,23 +19,28 @@ 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/>. */ -/* Allow some special handling for IRIX 6. */ +/* We are compiling for IRIX 6 now. */ #undef TARGET_IRIX6 #define TARGET_IRIX6 1 +#undef MACHINE_TYPE +#define MACHINE_TYPE "SGI running IRIX 6.5" + /* Default to -mabi=n32 and -mips3. */ #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS { "mabi=n32" } /* Force the default ABI onto the command line in order to make the specs - easier to write. Default to the mips2 ISA for the O32 ABI. */ + easier to write. */ #undef DRIVER_SELF_SPECS #define DRIVER_SELF_SPECS \ "%{!mabi=*: -mabi=n32}", \ - "%{mabi=32: %{!mips*: %{!march*: -mips2}}}", \ /* Configuration-independent MIPS rules. */ \ BASE_DRIVER_SELF_SPECS +/* MIPS specific debugging info */ +#define MIPS_DEBUGGING_INFO 1 + /* Force the generation of dwarf .debug_frame sections even if not compiling -g. This guarantees that we can unwind the stack. */ #define DWARF2_FRAME_INFO 1 @@ -45,48 +50,182 @@ along with GCC; see the file COPYING3. If not see #undef DWARF_FRAME_RETURN_COLUMN #define DWARF_FRAME_RETURN_COLUMN (FP_REG_LAST + 1) -#undef MACHINE_TYPE -#define MACHINE_TYPE "SGI running IRIX 6.x" +/* 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 + +/* The size in bytes of the initial length field in a debug info + section. The DWARF 3 (draft) specification defines this to be + either 4 or 12 (with a 4-byte "escape" word when it's 12), but the + SGI/MIPS ABI predates this standard and defines it to be the same + as DWARF_OFFSET_SIZE. */ +#define DWARF_INITIAL_LENGTH_SIZE DWARF_OFFSET_SIZE + +/* MIPS assemblers don't have the usual .set foo,bar construct; + .set is used for assembler options instead. */ +#undef SET_ASM_OP +#define ASM_OUTPUT_DEF(FILE, LABEL1, LABEL2) \ + do \ + { \ + fputc ('\t', FILE); \ + assemble_name (FILE, LABEL1); \ + fputs (" = ", FILE); \ + assemble_name (FILE, LABEL2); \ + fputc ('\n', FILE); \ + } \ + while (0) + +#undef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX (TARGET_NEWABI ? "." : "$") + +#undef ASM_DECLARE_OBJECT_NAME +#define ASM_DECLARE_OBJECT_NAME mips_declare_object_name + +#undef ASM_FINISH_DECLARE_OBJECT +#define ASM_FINISH_DECLARE_OBJECT mips_finish_declare_object + +/* The native IRIX 6 linker does not support merging without a special + elspec(5) file. */ +#ifndef IRIX_USING_GNU_LD +#undef HAVE_GAS_SHF_MERGE +#define HAVE_GAS_SHF_MERGE 0 +#endif + +/* Specify wchar_t types. */ +#undef WCHAR_TYPE +#define WCHAR_TYPE (Pmode == DImode ? "int" : "long int") + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE INT_TYPE_SIZE + +/* Same for wint_t. */ +#undef WINT_TYPE +#define WINT_TYPE (Pmode == DImode ? "int" : "long int") + +#undef WINT_TYPE_SIZE +#define WINT_TYPE_SIZE 32 + +/* C99 stdint.h types. */ +#define INT8_TYPE "signed char" +#define INT16_TYPE "short int" +#define INT32_TYPE "int" +#define INT64_TYPE "long long int" +#define UINT8_TYPE "unsigned char" +#define UINT16_TYPE "short unsigned int" +#define UINT32_TYPE "unsigned int" +#define UINT64_TYPE "long long unsigned int" + +#define INT_LEAST8_TYPE "signed char" +#define INT_LEAST16_TYPE "short int" +#define INT_LEAST32_TYPE "int" +#define INT_LEAST64_TYPE "long long int" +#define UINT_LEAST8_TYPE "unsigned char" +#define UINT_LEAST16_TYPE "short unsigned int" +#define UINT_LEAST32_TYPE "unsigned int" +#define UINT_LEAST64_TYPE "long long unsigned int" + +#define INT_FAST8_TYPE "signed char" +#define INT_FAST16_TYPE "short int" +#define INT_FAST32_TYPE "int" +#define INT_FAST64_TYPE "long long int" +#define UINT_FAST8_TYPE "unsigned char" +#define UINT_FAST16_TYPE "short unsigned int" +#define UINT_FAST32_TYPE "unsigned int" +#define UINT_FAST64_TYPE "long long unsigned int" + +#define INTMAX_TYPE "long long int" +#define UINTMAX_TYPE "long long unsigned int" + +#define INTPTR_TYPE "long int" +#define UINTPTR_TYPE "long unsigned int" + +#define SIG_ATOMIC_TYPE "int" + +/* Plain char is unsigned in the SGI compiler. */ +#undef DEFAULT_SIGNED_CHAR +#define DEFAULT_SIGNED_CHAR 0 + +#define WORD_SWITCH_TAKES_ARG(STR) \ + (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ + || strcmp (STR, "rpath") == 0) + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define_std ("host_mips"); \ + builtin_define_std ("sgi"); \ + builtin_define_std ("unix"); \ + builtin_define_std ("SYSTYPE_SVR4"); \ + builtin_define ("_MODERN_C"); \ + builtin_define ("_SVR4_SOURCE"); \ + builtin_define ("__DSO__"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=svr4"); \ + builtin_assert ("machine=sgi"); \ + \ + if (!ISA_MIPS1 && !ISA_MIPS2) \ + builtin_define ("_COMPILER_VERSION=601"); \ + \ + /* We must always define _LONGLONG, even when -ansi is \ + used, because IRIX 5 system header files require it. \ + This is OK, because gcc never warns when long long \ + is used in system header files. \ + \ + An alternative would be to support the SGI builtin \ + type __long_long. */ \ + builtin_define ("_LONGLONG"); \ + \ + /* IRIX 6.5.18 and above provide many ISO C99 \ + features protected by the __c99 macro. \ + libstdc++ v3 needs them as well. */ \ + if (TARGET_IRIX6) \ + if (flag_isoc99 || c_dialect_cxx ()) \ + builtin_define ("__c99"); \ + \ + /* The GNU C++ standard library requires that \ + __EXTENSIONS__ and _SGI_SOURCE be defined on at \ + least IRIX 6.2 and probably all IRIX 6 prior to 6.5. \ + We don't need this on IRIX 6.5 itself, but it \ + shouldn't hurt other than the namespace pollution. */ \ + if (!flag_iso || (TARGET_IRIX6 && c_dialect_cxx ())) \ + { \ + builtin_define ("__EXTENSIONS__"); \ + builtin_define ("_SGI_SOURCE"); \ + } \ + } \ + while (0) + +#undef SUBTARGET_CC1_SPEC +#define SUBTARGET_CC1_SPEC "%{static: -mno-abicalls}" + +#undef SUBTARGET_CPP_SPEC +#define SUBTARGET_CPP_SPEC "%{pthread:-D_REENTRANT}" + +#undef INIT_SECTION_ASM_OP +#define INIT_SECTION_ASM_OP "\t.section\t.gcc_init,\"ax\",@progbits" + +#undef FINI_SECTION_ASM_OP +#define FINI_SECTION_ASM_OP "\t.section\t.gcc_fini,\"ax\",@progbits" #ifdef IRIX_USING_GNU_LD -#define IRIX_SUBTARGET_LINK_SPEC \ - "%{mabi=32: -melf32bsmip}%{mabi=n32: -melf32bmipn32}%{mabi=64: -melf64bmip}" +#define IRIX_NO_UNRESOLVED "" #else - /* Explicitly hide crt symbols that would normally be marked with - a "hidden" visibility attribute. - - We have traditionally disabled this attribute when using the - native linker because the native linker's visibility support is - not fully-compatible with the GNU linker's. In particular, the - native linker does not pull in archive objects purely to resolve - references to the object's hidden symbols, whereas the GNU - linker does. - - The gcc build system currently hides symbols in some static - libraries (typically libgcov.a or libgcc.a) whenever visibility - attributes are supported. On targets with GNU semantics, this - makes sure that uses of libx.so symbols in one dynamic object are - not resolved to libx.a symbols in another dynamic object. But - on targets with IRIX semantics, hiding the symbols prevents the - static archive from working at all. - - It would probably be better to enable visiblity attributes for - IRIX ld and disable the static archives versioning. It shouldn't - make anything worse, since libx.a symbols are global by default - anyway. However, no-one has volunteered to do this yet. */ +#define IRIX_NO_UNRESOLVED "-no_unresolved" +#endif -#define IRIX_SUBTARGET_LINK_SPEC \ - "%{w} -_SYSTYPE_SVR4 -woff 131 \ - %{shared:-hidden_symbol __dso_handle} \ - %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}" +#ifdef IRIX_USING_GNU_LD +#define SUBTARGET_DONT_WARN_UNUSED_SPEC "" +#define SUBTARGET_WARN_UNUSED_SPEC "" +#else +#define SUBTARGET_DONT_WARN_UNUSED_SPEC "-dont_warn_unused" +#define SUBTARGET_WARN_UNUSED_SPEC "-warn_unused" #endif /* Profiling is supported via libprof1.a not -lc_p as in IRIX 3. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shared: \ - %{mabi=32:%{pg:gcrt1.o%s} \ - %{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ %{mabi=n32: \ %{mips4:%{pg:/usr/lib32/mips4/gcrt1.o%s} \ %{!pg:%{p:/usr/lib32/mips4/mcrt1.o%s /usr/lib32/mips4/libprof1.a%s} \ @@ -124,14 +263,75 @@ along with GCC; see the file COPYING3. If not see #define ENDFILE_SPEC \ "crtend.o%s irix-crtn.o%s \ %{!shared: \ - %{mabi=32:crtn.o%s}\ %{mabi=n32:%{mips4:/usr/lib32/mips4/crtn.o%s}\ %{!mips4:/usr/lib32/mips3/crtn.o%s}}\ %{mabi=64:%{mips4:/usr/lib64/mips4/crtn.o%s}\ %{!mips4:/usr/lib64/mips3/crtn.o%s}}}" -#define MIPS_TFMODE_FORMAT mips_extended_format +/* Generic part of the LINK_SPEC. */ +#undef LINK_SPEC +#define LINK_SPEC "\ +%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \ +%{bestGnum} %{shared} %{non_shared} \ +%{call_shared} %{no_archive} %{exact_version} \ +%{!shared: \ + %{!non_shared: %{!call_shared:%{!r: -call_shared " IRIX_NO_UNRESOLVED "}}}} \ +%{rpath} -init __gcc_init -fini __gcc_fini " IRIX_SUBTARGET_LINK_SPEC -#undef SUBTARGET_CPP_SPEC -#define SUBTARGET_CPP_SPEC "%{pthread:-D_REENTRANT}" +#ifdef IRIX_USING_GNU_LD +#define IRIX_SUBTARGET_LINK_SPEC \ + "%{mabi=n32: -melf32bmipn32}%{mabi=64: -melf64bmip}" +#else + /* Explicitly hide crt symbols that would normally be marked with + a "hidden" visibility attribute. + + We have traditionally disabled this attribute when using the + native linker because the native linker's visibility support is + not fully-compatible with the GNU linker's. In particular, the + native linker does not pull in archive objects purely to resolve + references to the object's hidden symbols, whereas the GNU + linker does. + + The gcc build system currently hides symbols in some static + libraries (typically libgcov.a or libgcc.a) whenever visibility + attributes are supported. On targets with GNU semantics, this + makes sure that uses of libx.so symbols in one dynamic object are + not resolved to libx.a symbols in another dynamic object. But + on targets with IRIX semantics, hiding the symbols prevents the + static archive from working at all. + + It would probably be better to enable visiblity attributes for + IRIX ld and disable the static archives versioning. It shouldn't + make anything worse, since libx.a symbols are global by default + anyway. However, no-one has volunteered to do this yet. */ + +#define IRIX_SUBTARGET_LINK_SPEC \ + "%{w} -_SYSTYPE_SVR4 -woff 131 \ + %{shared:-hidden_symbol __dso_handle} \ + %{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}" +#endif + +/* A linker error can empirically be avoided by removing duplicate + library search directories. */ +#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 1 + +/* Add -g to mips.h default to avoid confusing gas with local symbols + generated from stabs info. */ +#undef NM_FLAGS +#define NM_FLAGS "-Bng" +/* The system header files are C++ aware. */ +/* ??? Unfortunately, most but not all of the headers are C++ aware. + Specifically, curses.h is not, and as a consequence, defining this + used to prevent libg++ building. This is no longer the case so + define it again to prevent other problems, e.g. with getopt in + unistd.h. We still need some way to fix just those files that need + fixing. */ +#define NO_IMPLICIT_EXTERN_C 1 + +/* -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 + +#define MIPS_TFMODE_FORMAT mips_extended_format |