|
|
1.1 ! root 1: /* Definitions of target machine for GNU compiler. Iris version 6. ! 2: Copyright (C) 1994, 1995 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU CC. ! 5: ! 6: GNU CC is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: GNU CC is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU CC; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 59 Temple Place - Suite 330, ! 19: Boston, MA 02111-1307, USA. */ ! 20: ! 21: /* Irix 6 uses DWARF. */ ! 22: #define DWARF_DEBUGGING_INFO ! 23: #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG ! 24: ! 25: /* Default to -mips4. */ ! 26: #define TARGET_DEFAULT MASK_ABICALLS|MASK_FLOAT64|MASK_64BIT ! 27: #define MIPS_ISA_DEFAULT 4 ! 28: #define MULTILIB_DEFAULTS { "EB", "mips4" } ! 29: ! 30: #include "mips/iris5gas.h" ! 31: #include "mips/abi64.h" ! 32: ! 33: /* The Irix 6.0.1 assembler doesn't like labels in the text section, so ! 34: just avoid emitting them. */ ! 35: #define ASM_IDENTIFY_GCC ! 36: #define ASM_IDENTIFY_LANGUAGE ! 37: ! 38: /* Irix 5 stuff that we don't need for Irix 6. */ ! 39: #undef ASM_OUTPUT_UNDEF_FUNCTION ! 40: #undef ASM_OUTPUT_EXTERNAL_LIBCALL ! 41: #undef ASM_DECLARE_FUNCTION_SIZE ! 42: ! 43: /* Stuff we need for Irix 6 that isn't in Irix 5. */ ! 44: ! 45: #undef SET_ASM_OP /* Has no equivalent. See ASM_OUTPUT_DEF below. */ ! 46: ! 47: /* This is how to equate one symbol to another symbol. The syntax used is ! 48: `SYM1=SYM2'. Note that this is different from the way equates are done ! 49: with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'. */ ! 50: ! 51: #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ ! 52: do { fprintf ((FILE), "\t"); \ ! 53: assemble_name (FILE, LABEL1); \ ! 54: fprintf (FILE, " = "); \ ! 55: assemble_name (FILE, LABEL2); \ ! 56: fprintf (FILE, "\n"); \ ! 57: } while (0) ! 58: ! 59: #define POPSECTION_ASM_OP ".popsection" ! 60: ! 61: #define DEBUG_SECTION ".debug,1,0,0,1" ! 62: #define LINE_SECTION ".line,1,0,0,1" ! 63: #define SFNAMES_SECTION ".debug_sfnames,1,0,0,1" ! 64: #define SRCINFO_SECTION ".debug_srcinfo,1,0,0,1" ! 65: #define MACINFO_SECTION ".debug_macinfo,1,0,0,1" ! 66: #define PUBNAMES_SECTION ".debug_pubnames,1,0,0,1" ! 67: #define ARANGES_SECTION ".debug_aranges,1,0,0,1" ! 68: ! 69: #undef ASM_SPEC ! 70: #if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GAS) != 0 ! 71: /* GAS */ ! 72: #define ASM_SPEC "\ ! 73: %{mmips-as: \ ! 74: %{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} \ ! 75: %{pipe: %e-pipe is not supported.} \ ! 76: %{K}} \ ! 77: %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} %{v} \ ! 78: %{noasmopt:-O0} \ ! 79: %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}} \ ! 80: %{g} %{g0} %{g1} %{g2} %{g3} \ ! 81: %{ggdb:-g} %{ggdb0:-g0} %{ggdb1:-g1} %{ggdb2:-g2} %{ggdb3:-g3} \ ! 82: %{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \ ! 83: %{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \ ! 84: %{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3} \ ! 85: %{membedded-pic}" ! 86: ! 87: #else ! 88: /* not GAS */ ! 89: /* Must pass -g0 to the assembler, otherwise it may overwrite our ! 90: debug info with its own debug info. */ ! 91: /* Must pass -show instead of -v. */ ! 92: /* Must pass -G 0 to the assembler, otherwise we may get warnings about ! 93: GOT overflow. */ ! 94: #define ASM_SPEC "\ ! 95: %{!mgas: \ ! 96: %{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} \ ! 97: %{pipe: %e-pipe is not supported.} \ ! 98: %{K}} \ ! 99: %{G*} %{EB} %{EL} %{v:-show} \ ! 100: %{mips1} %{mips2} %{mips3} %{mips4} \ ! 101: %{!mips1: %{!mips2: %{!mips3: %{!mips4: -mips4}}}} \ ! 102: %{noasmopt:-O0} %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}} \ ! 103: -g0 -G 0 %{membedded-pic}" ! 104: ! 105: #endif ! 106: ! 107: /* Stuff for constructors. Start here. */ ! 108: ! 109: /* The assembler now accepts .section pseudo-ops, but it does not allow ! 110: one to change the section in the middle of a function. crtstuff relies ! 111: on this hack, and thus crtstuff won't work here. So, we do init and ! 112: fini sections exactly the same way as they are done for Irix 5, and ! 113: we ifdef out the ASM_OUTPUT_{CON,DE}STRUCTOR macros below. */ ! 114: ! 115: #define CONST_SECTION_ASM_OP_32 "\t.rdata" ! 116: #define CONST_SECTION_ASM_OP_64 ".section\t.rodata" ! 117: #define CTORS_SECTION_ASM_OP ".section\t.ctors,1,2,0,4" ! 118: #define DTORS_SECTION_ASM_OP ".section\t.dtors,1,2,0,4" ! 119: ! 120: /* This is the pseudo-op used to generate a 32-bit word of data with a ! 121: specific value in some section. This is the same for all known svr4 ! 122: assemblers. */ ! 123: ! 124: #define INT_ASM_OP ".word" ! 125: ! 126: /* A default list of other sections which we might be "in" at any given ! 127: time. For targets that use additional sections (e.g. .tdesc) you ! 128: should override this definition in the target-specific file which ! 129: includes this file. */ ! 130: ! 131: #undef EXTRA_SECTIONS ! 132: #define EXTRA_SECTIONS in_sdata, in_rdata, in_const, in_ctors, in_dtors, in_bss ! 133: ! 134: /* A default list of extra section function definitions. For targets ! 135: that use additional sections (e.g. .tdesc) you should override this ! 136: definition in the target-specific file which includes this file. */ ! 137: ! 138: /* ??? rdata_section is now same as svr4 const_section. */ ! 139: ! 140: #undef EXTRA_SECTION_FUNCTIONS ! 141: #define EXTRA_SECTION_FUNCTIONS \ ! 142: void \ ! 143: sdata_section () \ ! 144: { \ ! 145: if (in_section != in_sdata) \ ! 146: { \ ! 147: fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP); \ ! 148: in_section = in_sdata; \ ! 149: } \ ! 150: } \ ! 151: \ ! 152: void \ ! 153: rdata_section () \ ! 154: { \ ! 155: if (in_section != in_rdata) \ ! 156: { \ ! 157: if (mips_isa >= 3) \ ! 158: fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP_64); \ ! 159: else \ ! 160: fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP_32); \ ! 161: in_section = in_rdata; \ ! 162: } \ ! 163: } \ ! 164: CTORS_SECTION_FUNCTION \ ! 165: DTORS_SECTION_FUNCTION ! 166: ! 167: #define CTORS_SECTION_FUNCTION \ ! 168: void \ ! 169: ctors_section () \ ! 170: { \ ! 171: if (in_section != in_ctors) \ ! 172: { \ ! 173: fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! 174: in_section = in_ctors; \ ! 175: } \ ! 176: } ! 177: ! 178: #define DTORS_SECTION_FUNCTION \ ! 179: void \ ! 180: dtors_section () \ ! 181: { \ ! 182: if (in_section != in_dtors) \ ! 183: { \ ! 184: fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! 185: in_section = in_dtors; \ ! 186: } \ ! 187: } ! 188: ! 189: #if 0 ! 190: ! 191: /* A C statement (sans semicolon) to output an element in the table of ! 192: global constructors. */ ! 193: #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! 194: do { \ ! 195: ctors_section (); \ ! 196: fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ ! 197: assemble_name (FILE, NAME); \ ! 198: fprintf (FILE, "\n"); \ ! 199: } while (0) ! 200: ! 201: /* A C statement (sans semicolon) to output an element in the table of ! 202: global destructors. */ ! 203: #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! 204: do { \ ! 205: dtors_section (); \ ! 206: fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ ! 207: assemble_name (FILE, NAME); \ ! 208: fprintf (FILE, "\n"); \ ! 209: } while (0) ! 210: ! 211: #endif ! 212: ! 213: /* Stuff for constructors. End here. */ ! 214: ! 215: /* ??? Perhaps just include svr4.h in this file? */ ! 216: ! 217: /* ??? SGI assembler may core dump when compiling with -g. ! 218: Sometimes as succeeds, but then we get a linker error. (cmds.c in 072.sc) ! 219: Getting rid of .file solves both problems. */ ! 220: #undef ASM_OUTPUT_FILENAME ! 221: #define ASM_OUTPUT_FILENAME(STREAM, NUM_SOURCE_FILENAMES, NAME) \ ! 222: do \ ! 223: { \ ! 224: fprintf (STREAM, "\t#.file\t%d ", NUM_SOURCE_FILENAMES); \ ! 225: output_quoted_string (STREAM, NAME); \ ! 226: fputs ("\n", STREAM); \ ! 227: } \ ! 228: while (0) ! 229: ! 230: /* ??? SGI assembler gives warning whenever .lcomm is used. */ ! 231: #undef ASM_OUTPUT_LOCAL ! 232: #define ASM_OUTPUT_ALIGNED_LOCAL(STREAM, NAME, SIZE, ALIGN) \ ! 233: do \ ! 234: { \ ! 235: if (mips_isa >= 3) \ ! 236: { \ ! 237: fputs ("\t.section\t.bss\n", STREAM); \ ! 238: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, 0); \ ! 239: ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \ ! 240: ASM_OUTPUT_SKIP (STREAM, SIZE); \ ! 241: fprintf (STREAM, "\t%s\n", POPSECTION_ASM_OP); \ ! 242: } \ ! 243: else \ ! 244: mips_declare_object (STREAM, NAME, "\n\t.lcomm\t", ",%u\n", (SIZE)); \ ! 245: } \ ! 246: while (0) ! 247: ! 248: #undef ASM_OUTPUT_INTERNAL_LABEL ! 249: #define ASM_OUTPUT_INTERNAL_LABEL(STREAM,PREFIX,NUM) \ ! 250: fprintf (STREAM, ".%s%d:\n", PREFIX, NUM) ! 251: ! 252: /* This is how to store into the string LABEL ! 253: the symbol_ref name of an internal numbered label where ! 254: PREFIX is the class of label and NUM is the number within the class. ! 255: This is suitable for output with `assemble_name'. */ ! 256: ! 257: #undef ASM_GENERATE_INTERNAL_LABEL ! 258: #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! 259: sprintf (LABEL, "*.%s%d", PREFIX, NUM) ! 260: ! 261: #undef STARTFILE_SPEC ! 262: /* Profiling is supported via libprof1.a not -lc_p as in Irix 3. */ ! 263: #undef STARTFILE_SPEC ! 264: #define STARTFILE_SPEC \ ! 265: "%{mips1:%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ ! 266: %{mips2:%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ ! 267: %{!mips1:%{!mips2:%{pg:/usr/lib64/gcrt1.o}%{!pg:%{p:/usr/lib64/mcrt1.o /usr/lib64/libprof1.a}%{!p:/usr/lib64/crt1.o}}}}" ! 268: ! 269: #undef LIB_SPEC ! 270: #define LIB_SPEC "%{p:libprof1.a%s}%{pg:libprof1.a%s} -lc" ! 271: ! 272: #undef ENDFILE_SPEC ! 273: #define ENDFILE_SPEC \ ! 274: "%{mips1:crtn.o%s}%{mips2:crtn.o%s}%{!mips1:%{!mips2:/usr/lib64/crtn.o}}" ! 275: ! 276: #undef LINK_SPEC ! 277: #define LINK_SPEC "\ ! 278: %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \ ! 279: %{bestGnum} %{shared} %{non_shared} \ ! 280: %{call_shared} %{no_archive} %{exact_version} \ ! 281: %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \ ! 282: -_SYSTYPE_SVR4" ! 283: ! 284: /* ??? Debugging does not work. We get many assembler core dumps, ! 285: and even some linker core dumps. */ ! 286: #undef DBX_DEBUGGING_INFO ! 287: #undef SDB_DEBUGGING_INFO ! 288: #undef MIPS_DEBUGGING_INFO ! 289: #undef DWARF_DEBUGGING_INFO ! 290: #undef PREFERRED_DEBUGGING_TYPE
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.