sysv4.h revision 1.1.1.1.8.2
1/* Target definitions for GNU compiler for PowerPC running System V.4 2 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 3 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. 4 Contributed by Cygnus Support. 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it 9 under the terms of the GNU General Public License as published 10 by the Free Software Foundation; either version 3, or (at your 11 option) any later version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 16 License for more details. 17 18 Under Section 7 of GPL version 3, you are granted additional 19 permissions described in the GCC Runtime Library Exception, version 20 3.1, as published by the Free Software Foundation. 21 22 You should have received a copy of the GNU General Public License and 23 a copy of the GCC Runtime Library Exception along with this program; 24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 25 <http://www.gnu.org/licenses/>. */ 26 27/* Header files should be C++ aware in general. */ 28#undef NO_IMPLICIT_EXTERN_C 29#define NO_IMPLICIT_EXTERN_C 30 31/* Yes! We are ELF. */ 32#define TARGET_OBJECT_FORMAT OBJECT_ELF 33 34/* Default ABI to compile code for. */ 35#define DEFAULT_ABI rs6000_current_abi 36 37/* Default ABI to use. */ 38#define RS6000_ABI_NAME "sysv" 39 40/* Override rs6000.h definition. */ 41#undef ASM_DEFAULT_SPEC 42#define ASM_DEFAULT_SPEC "-mppc" 43 44/* Small data support types. */ 45enum rs6000_sdata_type { 46 SDATA_NONE, /* No small data support. */ 47 SDATA_DATA, /* Just put data in .sbss/.sdata, don't use relocs. */ 48 SDATA_SYSV, /* Use r13 to point to .sdata/.sbss. */ 49 SDATA_EABI /* Use r13 like above, r2 points to .sdata2/.sbss2. */ 50}; 51 52extern enum rs6000_sdata_type rs6000_sdata; 53 54#define TARGET_TOC ((target_flags & MASK_64BIT) \ 55 || ((target_flags & (MASK_RELOCATABLE \ 56 | MASK_MINIMAL_TOC)) \ 57 && flag_pic > 1) \ 58 || DEFAULT_ABI == ABI_AIX) 59 60#define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE) 61#define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN) 62#define TARGET_PROTOTYPE target_prototype 63#define TARGET_NO_PROTOTYPE (! TARGET_PROTOTYPE) 64#define TARGET_NO_TOC (! TARGET_TOC) 65#define TARGET_NO_EABI (! TARGET_EABI) 66#define TARGET_REGNAMES rs6000_regnames 67 68#ifdef HAVE_AS_REL16 69#undef TARGET_SECURE_PLT 70#define TARGET_SECURE_PLT secure_plt 71#endif 72 73extern const char *rs6000_abi_name; 74extern const char *rs6000_sdata_name; 75extern const char *rs6000_tls_size_string; /* For -mtls-size= */ 76 77#define SDATA_DEFAULT_SIZE 8 78 79/* Sometimes certain combinations of command options do not make sense 80 on a particular target machine. You can define a macro 81 `OVERRIDE_OPTIONS' to take account of this. This macro, if 82 defined, is executed once just after all the command options have 83 been parsed. 84 85 The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to 86 get control. */ 87 88#define SUBTARGET_OVERRIDE_OPTIONS \ 89do { \ 90 if (!g_switch_set) \ 91 g_switch_value = SDATA_DEFAULT_SIZE; \ 92 \ 93 if (rs6000_abi_name == NULL) \ 94 rs6000_abi_name = RS6000_ABI_NAME; \ 95 \ 96 if (!strcmp (rs6000_abi_name, "sysv")) \ 97 rs6000_current_abi = ABI_V4; \ 98 else if (!strcmp (rs6000_abi_name, "sysv-noeabi")) \ 99 { \ 100 rs6000_current_abi = ABI_V4; \ 101 target_flags &= ~ MASK_EABI; \ 102 } \ 103 else if (!strcmp (rs6000_abi_name, "sysv-eabi") \ 104 || !strcmp (rs6000_abi_name, "eabi")) \ 105 { \ 106 rs6000_current_abi = ABI_V4; \ 107 target_flags |= MASK_EABI; \ 108 } \ 109 else if (!strcmp (rs6000_abi_name, "aixdesc")) \ 110 rs6000_current_abi = ABI_AIX; \ 111 else if (!strcmp (rs6000_abi_name, "freebsd")) \ 112 rs6000_current_abi = ABI_V4; \ 113 else if (!strcmp (rs6000_abi_name, "linux")) \ 114 { \ 115 if (TARGET_64BIT) \ 116 rs6000_current_abi = ABI_AIX; \ 117 else \ 118 rs6000_current_abi = ABI_V4; \ 119 } \ 120 else if (!strcmp (rs6000_abi_name, "gnu")) \ 121 rs6000_current_abi = ABI_V4; \ 122 else if (!strcmp (rs6000_abi_name, "netbsd")) \ 123 { \ 124 if (TARGET_64BIT) \ 125 rs6000_current_abi = ABI_AIX; \ 126 else \ 127 rs6000_current_abi = ABI_V4; \ 128 } \ 129 else if (!strcmp (rs6000_abi_name, "openbsd")) \ 130 rs6000_current_abi = ABI_V4; \ 131 else if (!strcmp (rs6000_abi_name, "i960-old")) \ 132 { \ 133 rs6000_current_abi = ABI_V4; \ 134 target_flags |= (MASK_LITTLE_ENDIAN | MASK_EABI); \ 135 target_flags &= ~MASK_STRICT_ALIGN; \ 136 TARGET_NO_BITFIELD_WORD = 1; \ 137 } \ 138 else \ 139 { \ 140 rs6000_current_abi = ABI_V4; \ 141 error ("bad value for -mcall-%s", rs6000_abi_name); \ 142 } \ 143 \ 144 if (rs6000_sdata_name) \ 145 { \ 146 if (!strcmp (rs6000_sdata_name, "none")) \ 147 rs6000_sdata = SDATA_NONE; \ 148 else if (!strcmp (rs6000_sdata_name, "data")) \ 149 rs6000_sdata = SDATA_DATA; \ 150 else if (!strcmp (rs6000_sdata_name, "default")) \ 151 rs6000_sdata = (TARGET_EABI) ? SDATA_EABI : SDATA_SYSV; \ 152 else if (!strcmp (rs6000_sdata_name, "sysv")) \ 153 rs6000_sdata = SDATA_SYSV; \ 154 else if (!strcmp (rs6000_sdata_name, "eabi")) \ 155 rs6000_sdata = SDATA_EABI; \ 156 else \ 157 error ("bad value for -msdata=%s", rs6000_sdata_name); \ 158 } \ 159 else if (DEFAULT_ABI == ABI_V4) \ 160 { \ 161 rs6000_sdata = SDATA_DATA; \ 162 rs6000_sdata_name = "data"; \ 163 } \ 164 else \ 165 { \ 166 rs6000_sdata = SDATA_NONE; \ 167 rs6000_sdata_name = "none"; \ 168 } \ 169 \ 170 if (TARGET_RELOCATABLE && \ 171 (rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \ 172 { \ 173 rs6000_sdata = SDATA_DATA; \ 174 error ("-mrelocatable and -msdata=%s are incompatible", \ 175 rs6000_sdata_name); \ 176 } \ 177 \ 178 else if (flag_pic && DEFAULT_ABI != ABI_AIX \ 179 && (rs6000_sdata == SDATA_EABI \ 180 || rs6000_sdata == SDATA_SYSV)) \ 181 { \ 182 rs6000_sdata = SDATA_DATA; \ 183 error ("-f%s and -msdata=%s are incompatible", \ 184 (flag_pic > 1) ? "PIC" : "pic", \ 185 rs6000_sdata_name); \ 186 } \ 187 \ 188 if ((rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4) \ 189 || (rs6000_sdata == SDATA_EABI && !TARGET_EABI)) \ 190 { \ 191 rs6000_sdata = SDATA_NONE; \ 192 error ("-msdata=%s and -mcall-%s are incompatible", \ 193 rs6000_sdata_name, rs6000_abi_name); \ 194 } \ 195 \ 196 targetm.have_srodata_section = rs6000_sdata == SDATA_EABI; \ 197 \ 198 if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ 199 { \ 200 target_flags |= MASK_MINIMAL_TOC; \ 201 error ("-mrelocatable and -mno-minimal-toc are incompatible"); \ 202 } \ 203 \ 204 if (TARGET_RELOCATABLE && rs6000_current_abi == ABI_AIX) \ 205 { \ 206 target_flags &= ~MASK_RELOCATABLE; \ 207 error ("-mrelocatable and -mcall-%s are incompatible", \ 208 rs6000_abi_name); \ 209 } \ 210 \ 211 if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi == ABI_AIX) \ 212 { \ 213 flag_pic = 0; \ 214 error ("-fPIC and -mcall-%s are incompatible", \ 215 rs6000_abi_name); \ 216 } \ 217 \ 218 if (rs6000_current_abi == ABI_AIX && TARGET_LITTLE_ENDIAN) \ 219 { \ 220 target_flags &= ~MASK_LITTLE_ENDIAN; \ 221 error ("-mcall-aixdesc must be big endian"); \ 222 } \ 223 \ 224 if (TARGET_SECURE_PLT != secure_plt) \ 225 { \ 226 error ("-msecure-plt not supported by your assembler"); \ 227 } \ 228 \ 229 /* Treat -fPIC the same as -mrelocatable. */ \ 230 if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \ 231 { \ 232 target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC; \ 233 TARGET_NO_FP_IN_TOC = 1; \ 234 } \ 235 \ 236 else if (TARGET_RELOCATABLE) \ 237 flag_pic = 2; \ 238} while (0) 239 240#ifndef RS6000_BI_ARCH 241# define SUBSUBTARGET_OVERRIDE_OPTIONS \ 242do { \ 243 if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \ 244 error ("-m%s not supported in this configuration", \ 245 (target_flags & MASK_64BIT) ? "64" : "32"); \ 246} while (0) 247#endif 248 249/* Override rs6000.h definition. */ 250#undef TARGET_DEFAULT 251#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS) 252 253/* Override rs6000.h definition. */ 254#undef PROCESSOR_DEFAULT 255#define PROCESSOR_DEFAULT PROCESSOR_PPC750 256 257/* SVR4 only defined for PowerPC, so short-circuit POWER patterns. */ 258#undef TARGET_POWER 259#define TARGET_POWER 0 260 261#define FIXED_R2 1 262/* System V.4 uses register 13 as a pointer to the small data area, 263 so it is not available to the normal user. */ 264#define FIXED_R13 1 265 266/* Override default big endianism definitions in rs6000.h. */ 267#undef BYTES_BIG_ENDIAN 268#undef WORDS_BIG_ENDIAN 269#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN) 270#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) 271 272/* Define this to set the endianness to use in libgcc2.c, which can 273 not depend on target_flags. */ 274#if !defined(__LITTLE_ENDIAN__) && !defined(__sun__) 275#define LIBGCC2_WORDS_BIG_ENDIAN 1 276#else 277#define LIBGCC2_WORDS_BIG_ENDIAN 0 278#endif 279 280/* Define cutoff for using external functions to save floating point. 281 When optimizing for size, use external functions when profitable. */ 282#define FP_SAVE_INLINE(FIRST_REG) (optimize_size \ 283 ? ((FIRST_REG) == 62 \ 284 || (FIRST_REG) == 63) \ 285 : (FIRST_REG) < 64) 286/* And similarly for general purpose registers. */ 287#define GP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 32 \ 288 && !optimize_size) 289 290/* Put jump tables in read-only memory, rather than in .text. */ 291#define JUMP_TABLES_IN_TEXT_SECTION 0 292 293/* Prefix and suffix to use to saving floating point. */ 294#define SAVE_FP_PREFIX "_savefpr_" 295#define SAVE_FP_SUFFIX "" 296 297/* Prefix and suffix to use to restoring floating point. */ 298#define RESTORE_FP_PREFIX "_restfpr_" 299#define RESTORE_FP_SUFFIX "" 300 301/* Type used for ptrdiff_t, as a string used in a declaration. */ 302#define PTRDIFF_TYPE "int" 303 304/* Type used for wchar_t, as a string used in a declaration. */ 305/* Override svr4.h definition. */ 306#undef WCHAR_TYPE 307#define WCHAR_TYPE "long int" 308 309/* Width of wchar_t in bits. */ 310/* Override svr4.h definition. */ 311#undef WCHAR_TYPE_SIZE 312#define WCHAR_TYPE_SIZE 32 313 314/* Make int foo : 8 not cause structures to be aligned to an int boundary. */ 315/* Override elfos.h definition. */ 316#undef PCC_BITFIELD_TYPE_MATTERS 317#define PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE) 318 319#undef BITFIELD_NBYTES_LIMITED 320#define BITFIELD_NBYTES_LIMITED (TARGET_NO_BITFIELD_WORD) 321 322/* Define this macro to be the value 1 if instructions will fail to 323 work if given data not on the nominal alignment. If instructions 324 will merely go slower in that case, define this macro as 0. */ 325#undef STRICT_ALIGNMENT 326#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN) 327 328/* Define this macro if you wish to preserve a certain alignment for 329 the stack pointer, greater than what the hardware enforces. The 330 definition is a C expression for the desired alignment (measured 331 in bits). This macro must evaluate to a value equal to or larger 332 than STACK_BOUNDARY. 333 For the SYSV ABI and variants the alignment of the stack pointer 334 is usually controlled manually in rs6000.c. However, to maintain 335 alignment across alloca () in all circumstances, 336 PREFERRED_STACK_BOUNDARY needs to be set as well. 337 This has the additional advantage of allowing a bigger maximum 338 alignment of user objects on the stack. */ 339 340#undef PREFERRED_STACK_BOUNDARY 341#define PREFERRED_STACK_BOUNDARY 128 342 343/* Real stack boundary as mandated by the appropriate ABI. */ 344#define ABI_STACK_BOUNDARY \ 345 ((TARGET_EABI && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128) 346 347/* An expression for the alignment of a structure field FIELD if the 348 alignment computed in the usual way is COMPUTED. */ 349#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ 350 ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \ 351 ? 128 : COMPUTED) 352 353#undef BIGGEST_FIELD_ALIGNMENT 354 355/* Use ELF style section commands. */ 356 357#define TEXT_SECTION_ASM_OP "\t.section\t\".text\"" 358 359#define DATA_SECTION_ASM_OP "\t.section\t\".data\"" 360 361#define BSS_SECTION_ASM_OP "\t.section\t\".bss\"" 362 363/* Override elfos.h definition. */ 364#undef INIT_SECTION_ASM_OP 365#define INIT_SECTION_ASM_OP "\t.section\t\".init\",\"ax\"" 366 367/* Override elfos.h definition. */ 368#undef FINI_SECTION_ASM_OP 369#define FINI_SECTION_ASM_OP "\t.section\t\".fini\",\"ax\"" 370 371#define TOC_SECTION_ASM_OP "\t.section\t\".got\",\"aw\"" 372 373/* Put PC relative got entries in .got2. */ 374#define MINIMAL_TOC_SECTION_ASM_OP \ 375 (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI != ABI_AIX) \ 376 ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") 377 378#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\"" 379#define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\"" 380#define SBSS_SECTION_ASM_OP "\t.section\t\".sbss\",\"aw\",@nobits" 381 382/* Override default elf definitions. */ 383#define TARGET_ASM_INIT_SECTIONS rs6000_elf_asm_init_sections 384#undef TARGET_ASM_RELOC_RW_MASK 385#define TARGET_ASM_RELOC_RW_MASK rs6000_elf_reloc_rw_mask 386#undef TARGET_ASM_SELECT_RTX_SECTION 387#define TARGET_ASM_SELECT_RTX_SECTION rs6000_elf_select_rtx_section 388 389/* Return nonzero if this entry is to be written into the constant pool 390 in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST 391 containing one of them. If -mfp-in-toc (the default), we also do 392 this for floating-point constants. We actually can only do this 393 if the FP formats of the target and host machines are the same, but 394 we can't check that since not every file that uses these target macros 395 includes real.h. 396 397 Unlike AIX, we don't key off of -mminimal-toc, but instead do not 398 allow floating point constants in the TOC if -mrelocatable. */ 399 400#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P 401#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ 402 (TARGET_TOC \ 403 && (GET_CODE (X) == SYMBOL_REF \ 404 || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \ 405 && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \ 406 || GET_CODE (X) == LABEL_REF \ 407 || (GET_CODE (X) == CONST_INT \ 408 && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ 409 || (!TARGET_NO_FP_IN_TOC \ 410 && !TARGET_RELOCATABLE \ 411 && GET_CODE (X) == CONST_DOUBLE \ 412 && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ 413 && BITS_PER_WORD == HOST_BITS_PER_INT))) 414 415/* These macros generate the special .type and .size directives which 416 are used to set the corresponding fields of the linker symbol table 417 entries in an ELF object file under SVR4. These macros also output 418 the starting labels for the relevant functions/objects. */ 419 420/* Write the extra assembler code needed to declare a function properly. 421 Some svr4 assemblers need to also have something extra said about the 422 function's return value. We allow for that here. */ 423 424/* Override elfos.h definition. */ 425#undef ASM_DECLARE_FUNCTION_NAME 426#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 427 rs6000_elf_declare_function_name ((FILE), (NAME), (DECL)) 428 429/* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore 430 flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ 431 432#define LOCAL_LABEL_PREFIX "." 433#define USER_LABEL_PREFIX "" 434 435/* svr4.h overrides (*targetm.asm_out.internal_label). */ 436 437#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ 438 asm_fprintf (FILE, "%L%s", PREFIX) 439 440/* Globalizing directive for a label. */ 441#define GLOBAL_ASM_OP "\t.globl " 442 443/* This says how to output assembler code to declare an 444 uninitialized internal linkage data object. Under SVR4, 445 the linker seems to want the alignment of data objects 446 to depend on their types. We do exactly that here. */ 447 448#define LOCAL_ASM_OP "\t.local\t" 449 450#define LCOMM_ASM_OP "\t.lcomm\t" 451 452/* Describe how to emit uninitialized local items. */ 453#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ 454do { \ 455 if ((DECL) && rs6000_elf_in_small_data_p (DECL)) \ 456 { \ 457 switch_to_section (sbss_section); \ 458 ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \ 459 ASM_OUTPUT_LABEL (FILE, NAME); \ 460 ASM_OUTPUT_SKIP (FILE, SIZE); \ 461 if (!flag_inhibit_size_directive && (SIZE) > 0) \ 462 ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ 463 } \ 464 else \ 465 { \ 466 fprintf (FILE, "%s", LCOMM_ASM_OP); \ 467 assemble_name ((FILE), (NAME)); \ 468 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ 469 (SIZE), (ALIGN) / BITS_PER_UNIT); \ 470 } \ 471 ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ 472} while (0) 473 474/* Describe how to emit uninitialized external linkage items. */ 475#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ 476do { \ 477 ASM_OUTPUT_ALIGNED_DECL_LOCAL (FILE, DECL, NAME, SIZE, ALIGN); \ 478} while (0) 479 480#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 481/* To support -falign-* switches we need to use .p2align so 482 that alignment directives in code sections will be padded 483 with no-op instructions, rather than zeroes. */ 484#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 485 if ((LOG) != 0) \ 486 { \ 487 if ((MAX_SKIP) == 0) \ 488 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 489 else \ 490 fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 491 } 492#endif 493 494/* This is how to output code to push a register on the stack. 495 It need not be very fast code. 496 497 On the rs6000, we must keep the backchain up to date. In order 498 to simplify things, always allocate 16 bytes for a push (System V 499 wants to keep stack aligned to a 16 byte boundary). */ 500 501#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ 502do { \ 503 if (DEFAULT_ABI == ABI_V4) \ 504 asm_fprintf (FILE, \ 505 "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n", \ 506 reg_names[1], reg_names[1], reg_names[REGNO], \ 507 reg_names[1]); \ 508} while (0) 509 510/* This is how to output an insn to pop a register from the stack. 511 It need not be very fast code. */ 512 513#define ASM_OUTPUT_REG_POP(FILE, REGNO) \ 514do { \ 515 if (DEFAULT_ABI == ABI_V4) \ 516 asm_fprintf (FILE, \ 517 "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n", \ 518 reg_names[REGNO], reg_names[1], reg_names[1], \ 519 reg_names[1]); \ 520} while (0) 521 522/* Switch Recognition by gcc.c. Add -G xx support. */ 523 524/* Override svr4.h definition. */ 525#undef SWITCH_TAKES_ARG 526#define SWITCH_TAKES_ARG(CHAR) \ 527 ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \ 528 || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ 529 || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \ 530 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ 531 || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G') 532 533extern int fixuplabelno; 534 535/* Handle constructors specially for -mrelocatable. */ 536#define TARGET_ASM_CONSTRUCTOR rs6000_elf_asm_out_constructor 537#define TARGET_ASM_DESTRUCTOR rs6000_elf_asm_out_destructor 538 539/* This is the end of what might become sysv4.h. */ 540 541/* Use DWARF 2 debugging information by default. */ 542#undef PREFERRED_DEBUGGING_TYPE 543#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 544 545/* Historically we have also supported stabs debugging. */ 546#define DBX_DEBUGGING_INFO 1 547 548#define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info 549#define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p 550 551/* The ELF version doesn't encode [DS] or whatever at the end of symbols. */ 552 553#define RS6000_OUTPUT_BASENAME(FILE, NAME) \ 554 assemble_name (FILE, NAME) 555 556/* We have to output the stabs for the function name *first*, before 557 outputting its label. */ 558 559#define DBX_FUNCTION_FIRST 560 561/* This is the end of what might become sysv4dbx.h. */ 562 563#ifndef TARGET_VERSION 564#define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)"); 565#endif 566 567#define TARGET_OS_SYSV_CPP_BUILTINS() \ 568 do \ 569 { \ 570 if (target_flags_explicit \ 571 & MASK_RELOCATABLE) \ 572 builtin_define ("_RELOCATABLE"); \ 573 } \ 574 while (0) 575 576#ifndef TARGET_OS_CPP_BUILTINS 577#define TARGET_OS_CPP_BUILTINS() \ 578 do \ 579 { \ 580 builtin_define_std ("PPC"); \ 581 builtin_define_std ("unix"); \ 582 builtin_define ("__svr4__"); \ 583 builtin_assert ("system=unix"); \ 584 builtin_assert ("system=svr4"); \ 585 builtin_assert ("cpu=powerpc"); \ 586 builtin_assert ("machine=powerpc"); \ 587 TARGET_OS_SYSV_CPP_BUILTINS (); \ 588 } \ 589 while (0) 590#endif 591 592/* Pass various options to the assembler. */ 593/* Override svr4.h definition. */ 594#undef ASM_SPEC 595#define ASM_SPEC "%(asm_cpu) \ 596%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \ 597SVR4_ASM_SPEC \ 598"%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ 599%{memb|msdata=eabi: -memb} \ 600%{mlittle|mlittle-endian:-mlittle; \ 601 mbig|mbig-endian :-mbig; \ 602 mcall-aixdesc | \ 603 mcall-freebsd | \ 604 mcall-netbsd | \ 605 mcall-openbsd | \ 606 mcall-linux | \ 607 mcall-gnu :-mbig; \ 608 mcall-i960-old :-mlittle}" 609 610#define CC1_ENDIAN_BIG_SPEC "" 611 612#define CC1_ENDIAN_LITTLE_SPEC "\ 613%{!mstrict-align: %{!mno-strict-align: \ 614 %{!mcall-i960-old: \ 615 -mstrict-align \ 616 } \ 617}}" 618 619#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big)" 620 621#ifndef CC1_SECURE_PLT_DEFAULT_SPEC 622#define CC1_SECURE_PLT_DEFAULT_SPEC "" 623#endif 624 625/* Pass -G xxx to the compiler and set correct endian mode. */ 626#undef CC1_SPEC 627#define CC1_SPEC "%{G*} %(cc1_cpu) \ 628%{mlittle|mlittle-endian: %(cc1_endian_little); \ 629 mbig |mbig-endian : %(cc1_endian_big); \ 630 mcall-aixdesc | \ 631 mcall-freebsd | \ 632 mcall-netbsd | \ 633 mcall-openbsd | \ 634 mcall-linux | \ 635 mcall-gnu : -mbig %(cc1_endian_big); \ 636 mcall-i960-old : -mlittle %(cc1_endian_little); \ 637 : %(cc1_endian_default)} \ 638%{meabi: %{!mcall-*: -mcall-sysv }} \ 639%{!meabi: %{!mno-eabi: \ 640 %{mrelocatable: -meabi } \ 641 %{mcall-freebsd: -mno-eabi } \ 642 %{mcall-i960-old: -meabi } \ 643 %{mcall-linux: -mno-eabi } \ 644 %{mcall-gnu: -mno-eabi } \ 645 %{mcall-netbsd: -mno-eabi } \ 646 %{mcall-openbsd: -mno-eabi }}} \ 647%{msdata: -msdata=default} \ 648%{mno-sdata: -msdata=none} \ 649%{!mbss-plt: %{!msecure-plt: %(cc1_secure_plt_default)}} \ 650%{profile: -p} \ 651%(cc1_os_netbsd)" 652 653/* Don't put -Y P,<path> for cross compilers. */ 654#ifndef CROSS_DIRECTORY_STRUCTURE 655#define LINK_PATH_SPEC "\ 656%{!R*:%{L*:-R %*}} \ 657%{!nostdlib: %{!YP,*: \ 658 %{compat-bsd: \ 659 %{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ 660 %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \ 661 %{!R*: %{!L*: -R /usr/ucblib}} \ 662 %{!compat-bsd: \ 663 %{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ 664 %{!p:-Y P,/usr/ccs/lib:/usr/lib}}}}" 665 666#else 667#define LINK_PATH_SPEC "" 668#endif 669 670/* Default starting address if specified. */ 671#define LINK_START_SPEC "\ 672%{mads : %(link_start_ads) ; \ 673 myellowknife : %(link_start_yellowknife) ; \ 674 mmvme : %(link_start_mvme) ; \ 675 msim : %(link_start_sim) ; \ 676 mcall-freebsd: %(link_start_freebsd) ; \ 677 mcall-linux : %(link_start_linux) ; \ 678 mcall-gnu : %(link_start_gnu) ; \ 679 mcall-netbsd : %(link_start_netbsd) ; \ 680 mcall-openbsd: %(link_start_openbsd) ; \ 681 : %(link_start_default) }" 682 683#define LINK_START_DEFAULT_SPEC "" 684 685/* Override svr4.h definition. */ 686#undef LINK_SPEC 687#define LINK_SPEC "\ 688%{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} \ 689%{YP,*} %{R*} \ 690%{Qy:} %{!Qn:-Qy} \ 691%(link_shlib) \ 692%{!Wl,-T*: %{!T*: %(link_start) }} \ 693%(link_target) \ 694%(link_os)" 695 696/* For now, turn off shared libraries by default. */ 697#ifndef SHARED_LIB_SUPPORT 698#define NO_SHARED_LIB_SUPPORT 699#endif 700 701#ifndef NO_SHARED_LIB_SUPPORT 702/* Shared libraries are default. */ 703#define LINK_SHLIB_SPEC "\ 704%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \ 705%{mshlib: } \ 706%{static:-dn -Bstatic} \ 707%{shared:-G -dy -z text} \ 708%{symbolic:-Bsymbolic -G -dy -z text}" 709 710#else 711/* Shared libraries are not default. */ 712#define LINK_SHLIB_SPEC "\ 713%{mshlib: %(link_path) } \ 714%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \ 715%{static: } \ 716%{shared:-G -dy -z text %(link_path) } \ 717%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }" 718#endif 719 720/* Override the default target of the linker. */ 721#define LINK_TARGET_SPEC "\ 722%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \ 723%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ 724 %{mcall-i960-old: --oformat elf32-powerpcle} \ 725 }}}}" 726 727/* Any specific OS flags. */ 728#define LINK_OS_SPEC "\ 729%{mads : %(link_os_ads) ; \ 730 myellowknife : %(link_os_yellowknife) ; \ 731 mmvme : %(link_os_mvme) ; \ 732 msim : %(link_os_sim) ; \ 733 mcall-freebsd: %(link_os_freebsd) ; \ 734 mcall-linux : %(link_os_linux) ; \ 735 mcall-gnu : %(link_os_gnu) ; \ 736 mcall-netbsd : %(link_os_netbsd) ; \ 737 mcall-openbsd: %(link_os_openbsd) ; \ 738 : %(link_os_default) }" 739 740#define LINK_OS_DEFAULT_SPEC "" 741 742#define DRIVER_SELF_SPECS "%{mfpu=none: %<mfpu=* \ 743 %<msingle-float %<mdouble-float}" 744 745/* Override rs6000.h definition. */ 746#undef CPP_SPEC 747#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ 748%{mads : %(cpp_os_ads) ; \ 749 myellowknife : %(cpp_os_yellowknife) ; \ 750 mmvme : %(cpp_os_mvme) ; \ 751 msim : %(cpp_os_sim) ; \ 752 mcall-freebsd: %(cpp_os_freebsd) ; \ 753 mcall-linux : %(cpp_os_linux) ; \ 754 mcall-gnu : %(cpp_os_gnu) ; \ 755 mcall-netbsd : %(cpp_os_netbsd) ; \ 756 mcall-openbsd: %(cpp_os_openbsd) ; \ 757 : %(cpp_os_default) }" 758 759#define CPP_OS_DEFAULT_SPEC "" 760 761/* Override svr4.h definition. */ 762#undef STARTFILE_SPEC 763#define STARTFILE_SPEC "\ 764%{mads : %(startfile_ads) ; \ 765 myellowknife : %(startfile_yellowknife) ; \ 766 mmvme : %(startfile_mvme) ; \ 767 msim : %(startfile_sim) ; \ 768 mcall-freebsd: %(startfile_freebsd) ; \ 769 mcall-linux : %(startfile_linux) ; \ 770 mcall-gnu : %(startfile_gnu) ; \ 771 mcall-netbsd : %(startfile_netbsd) ; \ 772 mcall-openbsd: %(startfile_openbsd) ; \ 773 : %(startfile_default) }" 774 775#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s" 776 777/* Override svr4.h definition. */ 778#undef LIB_SPEC 779#define LIB_SPEC "\ 780%{mads : %(lib_ads) ; \ 781 myellowknife : %(lib_yellowknife) ; \ 782 mmvme : %(lib_mvme) ; \ 783 msim : %(lib_sim) ; \ 784 mcall-freebsd: %(lib_freebsd) ; \ 785 mcall-linux : %(lib_linux) ; \ 786 mcall-gnu : %(lib_gnu) ; \ 787 mcall-netbsd : %(lib_netbsd) ; \ 788 mcall-openbsd: %(lib_openbsd) ; \ 789 : %(lib_default) }" 790 791#define LIB_DEFAULT_SPEC "-lc" 792 793/* Override svr4.h definition. */ 794#undef ENDFILE_SPEC 795#define ENDFILE_SPEC "\ 796%{mads : %(endfile_ads) ; \ 797 myellowknife : %(endfile_yellowknife) ; \ 798 mmvme : %(endfile_mvme) ; \ 799 msim : %(endfile_sim) ; \ 800 mcall-freebsd: %(endfile_freebsd) ; \ 801 mcall-linux : %(endfile_linux) ; \ 802 mcall-gnu : %(endfile_gnu) ; \ 803 mcall-netbsd : %(endfile_netbsd) ; \ 804 mcall-openbsd: %(endfile_openbsd) ; \ 805 : %(crtsavres_default) %(endfile_default) }" 806 807#define CRTSAVRES_DEFAULT_SPEC "" 808 809#define ENDFILE_DEFAULT_SPEC "crtend.o%s ecrtn.o%s" 810 811/* Motorola ADS support. */ 812#define LIB_ADS_SPEC "--start-group -lads -lc --end-group" 813 814#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 815 816#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s" 817 818#define LINK_START_ADS_SPEC "-T ads.ld%s" 819 820#define LINK_OS_ADS_SPEC "" 821 822#define CPP_OS_ADS_SPEC "" 823 824/* Motorola Yellowknife support. */ 825#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" 826 827#define STARTFILE_YELLOWKNIFE_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 828 829#define ENDFILE_YELLOWKNIFE_SPEC "crtend.o%s ecrtn.o%s" 830 831#define LINK_START_YELLOWKNIFE_SPEC "-T yellowknife.ld%s" 832 833#define LINK_OS_YELLOWKNIFE_SPEC "" 834 835#define CPP_OS_YELLOWKNIFE_SPEC "" 836 837/* Motorola MVME support. */ 838#define LIB_MVME_SPEC "--start-group -lmvme -lc --end-group" 839 840#define STARTFILE_MVME_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 841 842#define ENDFILE_MVME_SPEC "crtend.o%s ecrtn.o%s" 843 844#define LINK_START_MVME_SPEC "-Ttext 0x40000" 845 846#define LINK_OS_MVME_SPEC "" 847 848#define CPP_OS_MVME_SPEC "" 849 850/* PowerPC simulator based on netbsd system calls support. */ 851#define LIB_SIM_SPEC "--start-group -lsim -lc --end-group" 852 853#define STARTFILE_SIM_SPEC "ecrti.o%s sim-crt0.o%s crtbegin.o%s" 854 855#define ENDFILE_SIM_SPEC "crtend.o%s ecrtn.o%s" 856 857#define LINK_START_SIM_SPEC "" 858 859#define LINK_OS_SIM_SPEC "-m elf32ppcsim" 860 861#define CPP_OS_SIM_SPEC "" 862 863/* FreeBSD support. */ 864 865#define CPP_OS_FREEBSD_SPEC "\ 866 -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ 867 -Acpu=powerpc -Amachine=powerpc" 868 869#define STARTFILE_FREEBSD_SPEC FBSD_STARTFILE_SPEC 870#define ENDFILE_FREEBSD_SPEC FBSD_ENDFILE_SPEC 871#define LIB_FREEBSD_SPEC FBSD_LIB_SPEC 872#define LINK_START_FREEBSD_SPEC "" 873 874#define LINK_OS_FREEBSD_SPEC "\ 875 %{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \ 876 %{v:-V} \ 877 %{assert*} %{R*} %{rpath*} %{defsym*} \ 878 %{shared:-Bshareable %{h*} %{soname*}} \ 879 %{!shared: \ 880 %{!static: \ 881 %{rdynamic: -export-dynamic} \ 882 %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ 883 %{static:-Bstatic}} \ 884 %{symbolic:-Bsymbolic}" 885 886/* GNU/Linux support. */ 887#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \ 888%{!mnewlib: %{pthread:-lpthread} %{shared:-lc} \ 889%{!shared: %{profile:-lc_p} %{!profile:-lc}}}" 890 891#ifdef HAVE_LD_PIE 892#define STARTFILE_LINUX_SPEC "\ 893%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ 894%{mnewlib:ecrti.o%s;:crti.o%s} \ 895%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" 896#else 897#define STARTFILE_LINUX_SPEC "\ 898%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ 899%{mnewlib:ecrti.o%s;:crti.o%s} \ 900%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" 901#endif 902 903#define ENDFILE_LINUX_SPEC "\ 904%{shared|pie:crtendS.o%s;:crtend.o%s} \ 905%{mnewlib:ecrtn.o%s;:crtn.o%s}" 906 907#define LINK_START_LINUX_SPEC "" 908 909#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" 910#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" 911#if UCLIBC_DEFAULT 912#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}" 913#else 914#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}" 915#endif 916#define LINUX_DYNAMIC_LINKER \ 917 CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) 918 919#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ 920 %{rdynamic:-export-dynamic} \ 921 %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}" 922 923#if defined(HAVE_LD_EH_FRAME_HDR) && !defined(LINK_EH_SPEC) 924# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " 925#endif 926 927#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ 928%{!undef: \ 929 %{!ansi: \ 930 %{!std=*:-Dunix -D__unix -Dlinux -D__linux} \ 931 %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}} \ 932-Asystem=linux -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" 933 934/* GNU/Hurd support. */ 935#define LIB_GNU_SPEC "%{mnewlib: --start-group -lgnu -lc --end-group } \ 936%{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } \ 937%{profile:-lc_p} %{!profile:-lc}}}" 938 939#define STARTFILE_GNU_SPEC "\ 940%{!shared: %{!static: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}} \ 941%{static: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ 942%{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} \ 943%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 944 945#define ENDFILE_GNU_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} \ 946%{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" 947 948#define LINK_START_GNU_SPEC "" 949 950#define LINK_OS_GNU_SPEC "-m elf32ppclinux %{!shared: %{!static: \ 951 %{rdynamic:-export-dynamic} \ 952 %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" 953 954#define CPP_OS_GNU_SPEC "-D__unix__ -D__gnu_hurd__ -D__GNU__ \ 955%{!undef: \ 956 %{!ansi: -Dunix -D__unix}} \ 957-Asystem=gnu -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" 958 959/* NetBSD support. */ 960#define LIB_NETBSD_SPEC NETBSD_LIB_SPEC 961 962#define STARTFILE_NETBSD_SPEC NETBSD_STARTFILE_SPEC 963 964#define ENDFILE_NETBSD_SPEC NETBSD_ENDFILE_SPEC 965 966#define LINK_START_NETBSD_SPEC "\ 967" 968 969#define LINK_OS_NETBSD_SPEC NETBSD_LINK_SPEC_ELF 970 971#define CPP_OS_NETBSD_SPEC "\ 972-D__powerpc__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__" 973 974#define CC1_OS_NETBSD_SPEC "\ 975%{cxx-isystem}" 976 977/* OpenBSD support. */ 978#ifndef LIB_OPENBSD_SPEC 979#define LIB_OPENBSD_SPEC "%{!shared:%{pthread:-lpthread%{p:_p}%{!p:%{pg:_p}}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}" 980#endif 981 982#ifndef STARTFILE_OPENBSD_SPEC 983#define STARTFILE_OPENBSD_SPEC "\ 984%{!shared: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ 985%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 986#endif 987 988#ifndef ENDFILE_OPENBSD_SPEC 989#define ENDFILE_OPENBSD_SPEC "\ 990%{!shared:crtend.o%s} %{shared:crtendS.o%s}" 991#endif 992 993#ifndef LINK_START_OPENBSD_SPEC 994#define LINK_START_OPENBSD_SPEC "-Ttext 0x400074" 995#endif 996 997#ifndef LINK_OS_OPENBSD_SPEC 998#define LINK_OS_OPENBSD_SPEC "" 999#endif 1000 1001#ifndef CPP_OS_OPENBSD_SPEC 1002#define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" 1003#endif 1004 1005/* Define any extra SPECS that the compiler needs to generate. */ 1006/* Override rs6000.h definition. */ 1007#undef SUBTARGET_EXTRA_SPECS 1008#define SUBTARGET_EXTRA_SPECS \ 1009 { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ 1010 { "lib_ads", LIB_ADS_SPEC }, \ 1011 { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ 1012 { "lib_mvme", LIB_MVME_SPEC }, \ 1013 { "lib_sim", LIB_SIM_SPEC }, \ 1014 { "lib_freebsd", LIB_FREEBSD_SPEC }, \ 1015 { "lib_gnu", LIB_GNU_SPEC }, \ 1016 { "lib_linux", LIB_LINUX_SPEC }, \ 1017 { "lib_netbsd", LIB_NETBSD_SPEC }, \ 1018 { "lib_openbsd", LIB_OPENBSD_SPEC }, \ 1019 { "lib_default", LIB_DEFAULT_SPEC }, \ 1020 { "startfile_ads", STARTFILE_ADS_SPEC }, \ 1021 { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ 1022 { "startfile_mvme", STARTFILE_MVME_SPEC }, \ 1023 { "startfile_sim", STARTFILE_SIM_SPEC }, \ 1024 { "startfile_freebsd", STARTFILE_FREEBSD_SPEC }, \ 1025 { "startfile_gnu", STARTFILE_GNU_SPEC }, \ 1026 { "startfile_linux", STARTFILE_LINUX_SPEC }, \ 1027 { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ 1028 { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ 1029 { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ 1030 { "endfile_ads", ENDFILE_ADS_SPEC }, \ 1031 { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ 1032 { "endfile_mvme", ENDFILE_MVME_SPEC }, \ 1033 { "endfile_sim", ENDFILE_SIM_SPEC }, \ 1034 { "endfile_freebsd", ENDFILE_FREEBSD_SPEC }, \ 1035 { "endfile_gnu", ENDFILE_GNU_SPEC }, \ 1036 { "endfile_linux", ENDFILE_LINUX_SPEC }, \ 1037 { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ 1038 { "endfile_openbsd", ENDFILE_OPENBSD_SPEC }, \ 1039 { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ 1040 { "link_path", LINK_PATH_SPEC }, \ 1041 { "link_shlib", LINK_SHLIB_SPEC }, \ 1042 { "link_target", LINK_TARGET_SPEC }, \ 1043 { "link_start", LINK_START_SPEC }, \ 1044 { "link_start_ads", LINK_START_ADS_SPEC }, \ 1045 { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ 1046 { "link_start_mvme", LINK_START_MVME_SPEC }, \ 1047 { "link_start_sim", LINK_START_SIM_SPEC }, \ 1048 { "link_start_freebsd", LINK_START_FREEBSD_SPEC }, \ 1049 { "link_start_gnu", LINK_START_GNU_SPEC }, \ 1050 { "link_start_linux", LINK_START_LINUX_SPEC }, \ 1051 { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ 1052 { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ 1053 { "link_start_default", LINK_START_DEFAULT_SPEC }, \ 1054 { "link_os", LINK_OS_SPEC }, \ 1055 { "link_os_ads", LINK_OS_ADS_SPEC }, \ 1056 { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ 1057 { "link_os_mvme", LINK_OS_MVME_SPEC }, \ 1058 { "link_os_sim", LINK_OS_SIM_SPEC }, \ 1059 { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \ 1060 { "link_os_linux", LINK_OS_LINUX_SPEC }, \ 1061 { "link_os_gnu", LINK_OS_GNU_SPEC }, \ 1062 { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ 1063 { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ 1064 { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ 1065 { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ 1066 { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ 1067 { "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \ 1068 { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ 1069 { "cc1_os_netbsd", CC1_OS_NETBSD_SPEC }, \ 1070 { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ 1071 { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ 1072 { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ 1073 { "cpp_os_sim", CPP_OS_SIM_SPEC }, \ 1074 { "cpp_os_freebsd", CPP_OS_FREEBSD_SPEC }, \ 1075 { "cpp_os_gnu", CPP_OS_GNU_SPEC }, \ 1076 { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ 1077 { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ 1078 { "cpp_os_openbsd", CPP_OS_OPENBSD_SPEC }, \ 1079 { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, \ 1080 { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }, \ 1081 SUBSUBTARGET_EXTRA_SPECS 1082 1083#define SUBSUBTARGET_EXTRA_SPECS 1084 1085/* Define this macro as a C expression for the initializer of an 1086 array of string to tell the driver program which options are 1087 defaults for this target and thus do not need to be handled 1088 specially when using `MULTILIB_OPTIONS'. 1089 1090 Do not define this macro if `MULTILIB_OPTIONS' is not defined in 1091 the target makefile fragment or if none of the options listed in 1092 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ 1093 1094#define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" } 1095 1096/* Define this macro if the code for function profiling should come 1097 before the function prologue. Normally, the profiling code comes 1098 after. */ 1099#define PROFILE_BEFORE_PROLOGUE 1 1100 1101/* Function name to call to do profiling. */ 1102#define RS6000_MCOUNT "_mcount" 1103 1104/* Define this macro (to a value of 1) if you want to support the 1105 Win32 style pragmas #pragma pack(push,<n>)' and #pragma 1106 pack(pop)'. The pack(push,<n>) pragma specifies the maximum 1107 alignment (in bytes) of fields within a structure, in much the 1108 same way as the __aligned__' and __packed__' __attribute__'s 1109 do. A pack value of zero resets the behavior to the default. 1110 Successive invocations of this pragma cause the previous values to 1111 be stacked, so that invocations of #pragma pack(pop)' will return 1112 to the previous value. */ 1113 1114#define HANDLE_PRAGMA_PACK_PUSH_POP 1 1115 1116/* Select a format to encode pointers in exception handling data. CODE 1117 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is 1118 true if the symbol may be affected by dynamic relocations. */ 1119#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ 1120 ((flag_pic || TARGET_RELOCATABLE) \ 1121 ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \ 1122 : DW_EH_PE_absptr) 1123 1124#define DOUBLE_INT_ASM_OP "\t.quad\t" 1125 1126/* Generate entries in .fixup for relocatable addresses. */ 1127#define RELOCATABLE_NEEDS_FIXUP 1 1128 1129/* This target uses the sysv4.opt file. */ 1130#define TARGET_USES_SYSV4_OPT 1 1131