|
|
1.1 ! root 1: /* Target definitions for GNU compiler for PowerPC running System V.4 ! 2: Copyright (C) 1995, Free Software Foundation, Inc. ! 3: Contributed by Cygnus Support. ! 4: ! 5: This file is part of GNU CC. ! 6: ! 7: GNU CC is free software; you can redistribute it and/or modify ! 8: it under the terms of the GNU General Public License as published by ! 9: the Free Software Foundation; either version 2, or (at your option) ! 10: any later version. ! 11: ! 12: GNU CC is distributed in the hope that it will be useful, ! 13: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 15: GNU General Public License for more details. ! 16: ! 17: You should have received a copy of the GNU General Public License ! 18: along with GNU CC; see the file COPYING. If not, write to ! 19: the Free Software Foundation, 59 Temple Place - Suite 330, ! 20: Boston, MA 02111-1307, USA. */ ! 21: ! 22: /* eABI local switches -- put here rather than eabi.h, so the switches ! 23: can be tested in macros. */ ! 24: ! 25: #define MASK_NO_BITFIELD_TYPE 0x40000000 /* Set PCC_BITFIELD_TYPE_MATTERS to 0 */ ! 26: #define MASK_STRICT_ALIGN 0x20000000 /* Set STRICT_ALIGNMENT to 1. */ ! 27: #define MASK_RELOCATABLE 0x10000000 /* GOT pointers are PC relative */ ! 28: #define MASK_NO_TRACEBACK 0x08000000 /* eliminate traceback words */ ! 29: #define MASK_LITTLE_ENDIAN 0x04000000 /* target is little endian */ ! 30: #define MASK_AIX_CALLS 0x02000000 /* Use AIX calling sequence */ ! 31: #define MASK_PROTOTYPE 0x01000000 /* Only prototyped fcns pass variable args */ ! 32: ! 33: #define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE) ! 34: #define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN) ! 35: #define TARGET_RELOCATABLE (target_flags & MASK_RELOCATABLE) ! 36: #define TARGET_NO_TRACEBACK (target_flags & MASK_NO_TRACEBACK) ! 37: #define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN) ! 38: #define TARGET_AIX_CALLS (target_flags & MASK_AIX_CALLS) ! 39: #define TARGET_PROTOTYPE (target_flags & MASK_PROTOTYPE) ! 40: #define TARGET_TOC (target_flags & (MASK_64BIT \ ! 41: | MASK_RELOCATABLE \ ! 42: | MASK_MINIMAL_TOC)) ! 43: ! 44: #define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE) ! 45: #define TARGET_TRACEBACK (! TARGET_NO_TRACEBACK) ! 46: #define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN) ! 47: #define TARGET_NO_AIX_CALLS (! TARGET_AIX_CALLS) ! 48: #define TARGET_NO_PROTOTYPE (! TARGET_PROTOTYPE) ! 49: #define TARGET_NO_TOC (! TARGET_TOC) ! 50: ! 51: #define TARGET_V4_CALLS TARGET_NO_AIX_CALLS ! 52: ! 53: /* Pseudo target to indicate whether the object format is ELF ! 54: (to get around not having conditional compilation in the md file) */ ! 55: #define TARGET_ELF 1 ! 56: ! 57: /* Note, V.4 no longer uses a normal TOC, so make -mfull-toc, be just ! 58: the same as -mminimal-toc. */ ! 59: #undef SUBTARGET_SWITCHES ! 60: #define SUBTARGET_SWITCHES \ ! 61: { "bit-align", -MASK_NO_BITFIELD_TYPE }, \ ! 62: { "no-bit-align", MASK_NO_BITFIELD_TYPE }, \ ! 63: { "strict-align", MASK_STRICT_ALIGN }, \ ! 64: { "no-strict-align", -MASK_STRICT_ALIGN }, \ ! 65: { "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \ ! 66: { "no-relocatable", -MASK_RELOCATABLE }, \ ! 67: { "traceback", -MASK_NO_TRACEBACK }, \ ! 68: { "no-traceback", MASK_NO_TRACEBACK }, \ ! 69: { "little-endian", MASK_LITTLE_ENDIAN }, \ ! 70: { "little", MASK_LITTLE_ENDIAN }, \ ! 71: { "big-endian", -MASK_LITTLE_ENDIAN }, \ ! 72: { "big", -MASK_LITTLE_ENDIAN }, \ ! 73: { "no-toc", 0 }, \ ! 74: { "toc", MASK_MINIMAL_TOC }, \ ! 75: { "full-toc", MASK_MINIMAL_TOC }, \ ! 76: { "call-aix", MASK_AIX_CALLS }, \ ! 77: { "call-sysv", -MASK_AIX_CALLS }, \ ! 78: { "prototype", MASK_PROTOTYPE }, \ ! 79: { "no-prototype", -MASK_PROTOTYPE }, ! 80: ! 81: /* Sometimes certain combinations of command options do not make sense ! 82: on a particular target machine. You can define a macro ! 83: `OVERRIDE_OPTIONS' to take account of this. This macro, if ! 84: defined, is executed once just after all the command options have ! 85: been parsed. ! 86: ! 87: The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to ! 88: get control. */ ! 89: ! 90: #define SUBTARGET_OVERRIDE_OPTIONS \ ! 91: do { \ ! 92: if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ ! 93: { \ ! 94: target_flags |= MASK_MINIMAL_TOC; \ ! 95: error ("-mrelocatable and -mno-minimal-toc are incompatible."); \ ! 96: } \ ! 97: } while (0) ! 98: ! 99: #include "rs6000/powerpc.h" ! 100: ! 101: /* System V.4 uses register 13 as a pointer to the small data area, ! 102: so it is not available to the normal user. */ ! 103: ! 104: #undef FIXED_R13 ! 105: #define FIXED_R13 1 ! 106: ! 107: /* System V.4 passes the first 8 floating arguments in registers, ! 108: instead of the first 13 like AIX does. */ ! 109: #undef FP_ARG_MAX_REG ! 110: #define FP_ARG_AIX_MAX_REG 45 ! 111: #define FP_ARG_V4_MAX_REG 40 ! 112: #define FP_ARG_MAX_REG ((TARGET_AIX_CALLS) ? FP_ARG_AIX_MAX_REG : FP_ARG_V4_MAX_REG) ! 113: ! 114: /* Size of the V.4 varargs area if needed */ ! 115: #undef RS6000_VARARGS_AREA ! 116: #define RS6000_VARARGS_AREA ((rs6000_sysv_varargs_p) ? RS6000_VARARGS_SIZE : 0) ! 117: ! 118: /* Override default big endianism */ ! 119: #undef BYTES_BIG_ENDIAN ! 120: #undef WORDS_BIG_ENDIAN ! 121: #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN) ! 122: #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) ! 123: ! 124: /* Define this to set the endianness to use in libgcc2.c, which can ! 125: not depend on target_flags. */ ! 126: #ifndef _LITTLE_ENDIAN ! 127: #define LIBGCC2_WORDS_BIG_ENDIAN 1 ! 128: #else ! 129: #define LIBGCC2_WORDS_BIG_ENDIAN 0 ! 130: #endif ! 131: ! 132: /* Size of the outgoing register save area */ ! 133: #undef RS6000_REG_SAVE ! 134: #define RS6000_REG_SAVE (TARGET_AIX_CALLS ? (TARGET_64BIT ? 64 : 32) : 0) ! 135: ! 136: /* Size of the fixed area on the stack. For AIX, use the standard 6 word ! 137: area, otherwise use 2 words to store back chain & LR. */ ! 138: #undef RS6000_SAVE_AREA ! 139: #define RS6000_SAVE_AREA \ ! 140: ((TARGET_AIX_CALLS ? 24 : 8) << (TARGET_64BIT ? 1 : 0)) ! 141: ! 142: /* Define cutoff for using external functions to save floating point. ! 143: Currently on V.4, always use inline stores */ ! 144: #undef FP_SAVE_INLINE ! 145: #define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64) ! 146: ! 147: /* Don't generate XCOFF debugging information. */ ! 148: ! 149: #undef XCOFF_DEBUGGING_INFO ! 150: ! 151: /* Don't use the COFF object file format. */ ! 152: ! 153: #undef OBJECT_FORMAT_COFF ! 154: ! 155: /* The XCOFF support uses weird symbol suffixes, which we don't want ! 156: for ELF. */ ! 157: ! 158: #undef RS6000_OUTPUT_BASENAME ! 159: #define RS6000_OUTPUT_BASENAME(FILE, NAME) assemble_name (FILE, NAME) ! 160: ! 161: /* Don't bother to output .extern pseudo-ops. They are not needed by ! 162: ELF assemblers. */ ! 163: ! 164: #undef ASM_OUTPUT_EXTERNAL ! 165: ! 166: /* Undefine some things which are defined by the generic svr4.h. */ ! 167: ! 168: #undef ASM_FILE_END ! 169: #undef ASM_OUTPUT_EXTERNAL_LIBCALL ! 170: #undef READONLY_DATA_SECTION ! 171: #undef SELECT_SECTION ! 172: #undef ASM_DECLARE_FUNCTION_NAME ! 173: #undef ASM_OUTPUT_CONSTRUCTOR ! 174: #undef ASM_OUTPUT_DESTRUCTOR ! 175: ! 176: /* Use the regular svr4 definitions. */ ! 177: ! 178: #include "svr4.h" ! 179: ! 180: /* Prefix and suffix to use to saving floating point */ ! 181: #undef SAVE_FP_PREFIX ! 182: #undef SAVE_FP_SUFFIX ! 183: #define SAVE_FP_PREFIX "_savefpr_" ! 184: #define SAVE_FP_SUFFIX "_l" ! 185: ! 186: /* Prefix and suffix to use to restoring floating point */ ! 187: #undef RESTORE_FP_PREFIX ! 188: #undef RESTORE_FP_SUFFIX ! 189: #define RESTORE_FP_PREFIX "_restfpr_" ! 190: #define RESTORE_FP_SUFFIX "_l" ! 191: ! 192: /* Type used for ptrdiff_t, as a string used in a declaration. */ ! 193: #undef PTRDIFF_TYPE ! 194: #define PTRDIFF_TYPE "int" ! 195: ! 196: /* Type used for wchar_t, as a string used in a declaration. */ ! 197: #undef WCHAR_TYPE ! 198: #define WCHAR_TYPE "short unsigned int" ! 199: ! 200: /* Width of wchar_t in bits. */ ! 201: #undef WCHAR_TYPE_SIZE ! 202: #define WCHAR_TYPE_SIZE 16 ! 203: ! 204: /* Align stack to 16 byte boundaries */ ! 205: #undef STACK_BOUNDARY ! 206: #define STACK_BOUNDARY 128 ! 207: ! 208: /* No data type wants to be aligned rounder than this. */ ! 209: #undef BIGGEST_ALIGNMENT ! 210: #define BIGGEST_ALIGNMENT 128 ! 211: ! 212: /* Use ELF style section commands. */ ! 213: ! 214: #undef TEXT_SECTION_ASM_OP ! 215: #define TEXT_SECTION_ASM_OP "\t.section\t\".text\"" ! 216: ! 217: #undef DATA_SECTION_ASM_OP ! 218: #define DATA_SECTION_ASM_OP "\t.section\t\".data\"" ! 219: ! 220: /* Besides the usual ELF sections, we need a toc section. */ ! 221: #undef EXTRA_SECTIONS ! 222: #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_toc ! 223: ! 224: #undef EXTRA_SECTION_FUNCTIONS ! 225: #define EXTRA_SECTION_FUNCTIONS \ ! 226: CONST_SECTION_FUNCTION \ ! 227: CTORS_SECTION_FUNCTION \ ! 228: DTORS_SECTION_FUNCTION \ ! 229: TOC_SECTION_FUNCTION ! 230: ! 231: #define TOC_SECTION_FUNCTION \ ! 232: void \ ! 233: toc_section () \ ! 234: { \ ! 235: static int toc_initialized = 0; \ ! 236: \ ! 237: if (in_section != in_toc) \ ! 238: { \ ! 239: in_section = in_toc; \ ! 240: fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \ ! 241: if (! toc_initialized) \ ! 242: { \ ! 243: ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ ! 244: fprintf (asm_out_file, " = .+32768\n"); \ ! 245: toc_initialized = 1; \ ! 246: } \ ! 247: } \ ! 248: } ! 249: ! 250: #define TOC_SECTION_ASM_OP "\t.section\t\".got\",\"aw\"" ! 251: #define MINIMAL_TOC_SECTION_ASM_OP "\t.section\t\".got1\",\"aw\"" ! 252: ! 253: /* Use the TOC section for TOC entries. */ ! 254: ! 255: #undef SELECT_RTX_SECTION ! 256: #define SELECT_RTX_SECTION(MODE, X) \ ! 257: { if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (X)) \ ! 258: toc_section (); \ ! 259: else \ ! 260: const_section (); \ ! 261: } ! 262: ! 263: /* These macros generate the special .type and .size directives which ! 264: are used to set the corresponding fields of the linker symbol table ! 265: entries in an ELF object file under SVR4. These macros also output ! 266: the starting labels for the relevant functions/objects. */ ! 267: ! 268: /* Write the extra assembler code needed to declare a function properly. ! 269: Some svr4 assemblers need to also have something extra said about the ! 270: function's return value. We allow for that here. */ ! 271: ! 272: extern void svr4_traceback (); ! 273: extern int rs6000_pic_labelno; ! 274: ! 275: #undef ASM_DECLARE_FUNCTION_NAME ! 276: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ ! 277: do { \ ! 278: if (TARGET_RELOCATABLE && get_pool_size () != 0) \ ! 279: { \ ! 280: char buf[256]; \ ! 281: \ ! 282: ASM_OUTPUT_INTERNAL_LABEL (FILE, "LCL", rs6000_pic_labelno); \ ! 283: \ ! 284: ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1); \ ! 285: fprintf (FILE, (TARGET_POWERPC64) ? "\t.quad " : "\t.long "); \ ! 286: assemble_name (FILE, buf); \ ! 287: putc ('-', FILE); \ ! 288: \ ! 289: ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno); \ ! 290: assemble_name (FILE, buf); \ ! 291: putc ('\n', FILE); \ ! 292: } \ ! 293: \ ! 294: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ ! 295: assemble_name (FILE, NAME); \ ! 296: putc (',', FILE); \ ! 297: fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ ! 298: putc ('\n', FILE); \ ! 299: if (TARGET_TRACEBACK) \ ! 300: svr4_traceback (FILE, NAME, DECL); \ ! 301: ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ ! 302: ASM_OUTPUT_LABEL(FILE, NAME); \ ! 303: } while (0) ! 304: ! 305: /* How to renumber registers for dbx and gdb. */ ! 306: ! 307: #define DBX_REGISTER_NUMBER(REGNO) (REGNO) ! 308: ! 309: /* svr4.h overrides ASM_OUTPUT_INTERNAL_LABEL. */ ! 310: ! 311: #undef ASM_OUTPUT_INTERNAL_LABEL_PREFIX ! 312: #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ ! 313: fprintf (FILE, ".%s", PREFIX) ! 314: ! 315: /* Pass -mppc to the assembler, since that is what powerpc.h currently ! 316: implies. */ ! 317: #undef ASM_SPEC ! 318: #define ASM_SPEC \ ! 319: "-u \ ! 320: %{mcpu=601: -m601} %{!mcpu=601: -mppc} \ ! 321: %{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ ! 322: %{mrelocatable} \ ! 323: %{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}" ! 324: ! 325: /* Output .file and comments listing what options there are */ ! 326: #undef ASM_FILE_START ! 327: #define ASM_FILE_START(FILE) \ ! 328: do { \ ! 329: ASM_OUTPUT_OPTIONS (FILE); \ ! 330: output_file_directive ((FILE), main_input_filename); \ ! 331: } while (0) ! 332: ! 333: /* This is the end of what might become sysv4.h. */ ! 334: ! 335: /* Allow stabs and dwarf, prefer dwarf. */ ! 336: #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG ! 337: #define DBX_DEBUGGING_INFO ! 338: #define DWARF_DEBUGGING_INFO ! 339: ! 340: /* This macro gets just the user-specified name ! 341: out of the string in a SYMBOL_REF. Discard ! 342: a leading * */ ! 343: #undef STRIP_NAME_ENCODING ! 344: #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ ! 345: (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')) ! 346: ! 347: /* Like block addresses, stabs line numbers are relative to the ! 348: current function. */ ! 349: ! 350: #undef ASM_OUTPUT_SOURCE_LINE ! 351: #define ASM_OUTPUT_SOURCE_LINE(file, line) \ ! 352: do \ ! 353: { \ ! 354: static int sym_lineno = 1; \ ! 355: char *_p; \ ! 356: fprintf (file, "\t.stabn 68,0,%d,.LM%d-", \ ! 357: line, sym_lineno); \ ! 358: STRIP_NAME_ENCODING (_p, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ ! 359: assemble_name (file, _p); \ ! 360: fprintf (file, "\n.LM%d:\n", sym_lineno); \ ! 361: sym_lineno += 1; \ ! 362: } \ ! 363: while (0) ! 364: ! 365: /* But, to make this work, we have to output the stabs for the function ! 366: name *first*... */ ! 367: ! 368: #define DBX_FUNCTION_FIRST ! 369: ! 370: /* This is the end of what might become sysv4dbx.h. */ ! 371: ! 372: #undef TARGET_VERSION ! 373: #define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)"); ! 374: ! 375: ! 376: /* Output assembler code for a block containing the constant parts ! 377: of a trampoline, leaving space for the variable parts. ! 378: ! 379: The trampoline should set the static chain pointer to value placed ! 380: into the trampoline and should branch to the specified routine. ! 381: ! 382: Unlike AIX, this needs real code. */ ! 383: ! 384: #undef TRAMPOLINE_TEMPLATE ! 385: #define TRAMPOLINE_TEMPLATE(FILE) \ ! 386: do { \ ! 387: char *sc = reg_names[STATIC_CHAIN_REGNUM]; \ ! 388: char *r0 = reg_names[0]; \ ! 389: \ ! 390: if (STATIC_CHAIN_REGNUM == 0 || !TARGET_NEW_MNEMONICS) \ ! 391: abort (); \ ! 392: \ ! 393: if (TARGET_64BIT) \ ! 394: { \ ! 395: fprintf (FILE, "\tmflr %s\n", r0); /* offset 0 */ \ ! 396: fprintf (FILE, "\tbl .LTRAMP1\n"); /* offset 4 */ \ ! 397: fprintf (FILE, "\t.long 0,0,0,0\n"); /* offset 8 */ \ ! 398: fprintf (FILE, ".LTRAMP1:\n"); \ ! 399: fprintf (FILE, "\tmflr %s\n", sc); /* offset 28 */ \ ! 400: fprintf (FILE, "\tmtlr %s\n", r0); /* offset 32 */ \ ! 401: fprintf (FILE, "\tld %s,0(%s)\n", r0, sc); /* offset 36 */ \ ! 402: fprintf (FILE, "\tld %s,8(%s)\n", sc, sc); /* offset 40 */ \ ! 403: fprintf (FILE, "\tmtctr %s\n", r0); /* offset 44 */ \ ! 404: fprintf (FILE, "\tbctr\n"); /* offset 48 */ \ ! 405: } \ ! 406: else \ ! 407: { \ ! 408: fprintf (FILE, "\tmflr %s\n", r0); /* offset 0 */ \ ! 409: fprintf (FILE, "\tbl .LTRAMP1\n"); /* offset 4 */ \ ! 410: fprintf (FILE, "\t.long 0,0\n"); /* offset 8 */ \ ! 411: fprintf (FILE, ".LTRAMP1:\n"); \ ! 412: fprintf (FILE, "\tmflr %s\n", sc); /* offset 20 */ \ ! 413: fprintf (FILE, "\tmtlr %s\n", r0); /* offset 24 */ \ ! 414: fprintf (FILE, "\tlwz %s,0(%s)\n", r0, sc); /* offset 28 */ \ ! 415: fprintf (FILE, "\tlwz %s,4(%s)\n", sc, sc); /* offset 32 */ \ ! 416: fprintf (FILE, "\tmtctr %s\n", r0); /* offset 36 */ \ ! 417: fprintf (FILE, "\tbctr\n"); /* offset 40 */ \ ! 418: } \ ! 419: } while (0) ! 420: ! 421: /* Length in units of the trampoline for entering a nested function. */ ! 422: ! 423: #undef TRAMPOLINE_SIZE ! 424: #define TRAMPOLINE_SIZE (TARGET_64BIT ? 48 : 40) ! 425: ! 426: /* Emit RTL insns to initialize the variable parts of a trampoline. ! 427: FNADDR is an RTX for the address of the function's pure code. ! 428: CXT is an RTX for the static chain value for the function. */ ! 429: ! 430: #undef INITIALIZE_TRAMPOLINE ! 431: #define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \ ! 432: { \ ! 433: rtx reg = gen_reg_rtx (Pmode); \ ! 434: \ ! 435: emit_move_insn (reg, FNADDR); \ ! 436: emit_move_insn (gen_rtx (MEM, Pmode, \ ! 437: plus_constant (ADDR, 8)), \ ! 438: reg); \ ! 439: emit_move_insn (gen_rtx (MEM, Pmode, \ ! 440: plus_constant (ADDR, (TARGET_64BIT ? 16 : 12))), \ ! 441: CXT); \ ! 442: emit_insn (gen_sync_isync (gen_rtx (MEM, BLKmode, ADDR))); \ ! 443: } ! 444: ! 445: ! 446: #undef CPP_PREDEFINES ! 447: #define CPP_PREDEFINES \ ! 448: "-DPPC -Dunix -D__svr4__ -Asystem(unix) -Asystem(svr4) -Acpu(powerpc) -Amachine(powerpc)" ! 449: ! 450: /* Don't put -Y P,<path> for cross compilers */ ! 451: #undef LINK_SPEC ! 452: #ifdef CROSS_COMPILE ! 453: #define LINK_SPEC "\ ! 454: %{h*} %{V} %{v:%{!V:-V}} \ ! 455: %{b} %{Wl,*:%*} \ ! 456: %{static:-dn -Bstatic} \ ! 457: %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \ ! 458: %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \ ! 459: %{G:-G} \ ! 460: %{YP,*} \ ! 461: %{Qy:} %{!Qn:-Qy} \ ! 462: %{mlittle: -oformat elf32-powerpcle } %{mlittle-endian: -oformat elf32-powerpcle } \ ! 463: %{mbig: -oformat elf32-powerpc } %{mbig-endian: -oformat elf32-powerpc }" ! 464: #else ! 465: ! 466: #define LINK_SPEC "\ ! 467: %{h*} %{V} %{v:%{!V:-V}} \ ! 468: %{b} %{Wl,*:%*} \ ! 469: %{static:-dn -Bstatic} \ ! 470: %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \ ! 471: %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \ ! 472: %{G:-G} \ ! 473: %{YP,*} \ ! 474: %{!nostdlib: %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! 475: %{!p:-Y P,/usr/ccs/lib:/usr/lib}}} \ ! 476: %{Qy:} %{!Qn:-Qy} \ ! 477: %{mlittle: -oformat elf32-powerpcle } %{mlittle-endian: -oformat elf32-powerpcle } \ ! 478: %{mbig: -oformat elf32-powerpc } %{mbig-endian: -oformat elf32-powerpc }" ! 479: #endif /* CROSS_COMPILE */ ! 480: ! 481: #undef CPP_SPEC ! 482: #define CPP_SPEC "\ ! 483: %{posix: -D_POSIX_SOURCE} \ ! 484: %{mrelocatable: -D_RELOCATABLE} \ ! 485: %{mcall-sysv: -D_CALL_SYSV} %{mcall-aix: -D_CALL_AIX} %{!mcall-sysv: %{!mcall-aix: -D_CALL_SYSV}} \ ! 486: %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT} \ ! 487: %{mlittle: -D_LITTLE_ENDIAN -Amachine(littleendian)} \ ! 488: %{mlittle-endian: -D_LITTLE_ENDIAN -Amachine(littleendian)} \ ! 489: %{!mlittle: %{!mlittle-endian: -D_BIG_ENDIAN -Amachine(bigendian)}} \ ! 490: %{!mcpu*: \ ! 491: %{mpower: %{!mpower2: -D_ARCH_PWR}} \ ! 492: %{mpower2: -D_ARCH_PWR2} \ ! 493: %{mpowerpc*: -D_ARCH_PPC} \ ! 494: %{mno-powerpc: %{!mpower: %{!mpower2: -D_ARCH_COM}}} \ ! 495: %{!mno-powerpc: -D_ARCH_PPC}} \ ! 496: %{mcpu=common: -D_ARCH_COM} \ ! 497: %{mcpu=power: -D_ARCH_PWR} \ ! 498: %{mcpu=powerpc: -D_ARCH_PPC} \ ! 499: %{mcpu=rios: -D_ARCH_PWR} \ ! 500: %{mcpu=rios1: -D_ARCH_PWR} \ ! 501: %{mcpu=rios2: -D_ARCH_PWR2} \ ! 502: %{mcpu=rsc: -D_ARCH_PWR} \ ! 503: %{mcpu=rsc1: -D_ARCH_PWR} \ ! 504: %{mcpu=403: -D_ARCH_PPC} \ ! 505: %{mcpu=601: -D_ARCH_PPC -D_ARCH_PWR} \ ! 506: %{mcpu=603: -D_ARCH_PPC} \ ! 507: %{mcpu=604: -D_ARCH_PPC}"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.