sysv4.h revision 132718
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 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 2, 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 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING. If not, write to the 20 Free Software Foundation, 59 Temple Place - Suite 330, Boston, 21 MA 02111-1307, USA. */ 22 23/* Header files should be C++ aware in general. */ 24#define NO_IMPLICIT_EXTERN_C 25 26/* Yes! We are ELF. */ 27#define TARGET_OBJECT_FORMAT OBJECT_ELF 28 29/* Default ABI to compile code for. */ 30#define DEFAULT_ABI rs6000_current_abi 31 32/* Default ABI to use. */ 33#define RS6000_ABI_NAME "sysv" 34 35/* Override rs6000.h definition. */ 36#undef ASM_DEFAULT_SPEC 37#define ASM_DEFAULT_SPEC "-mppc" 38 39/* Small data support types. */ 40enum rs6000_sdata_type { 41 SDATA_NONE, /* No small data support. */ 42 SDATA_DATA, /* Just put data in .sbss/.sdata, don't use relocs. */ 43 SDATA_SYSV, /* Use r13 to point to .sdata/.sbss. */ 44 SDATA_EABI /* Use r13 like above, r2 points to .sdata2/.sbss2. */ 45}; 46 47extern enum rs6000_sdata_type rs6000_sdata; 48 49/* V.4/eabi switches. */ 50#define MASK_NO_BITFIELD_TYPE 0x40000000 /* Set PCC_BITFIELD_TYPE_MATTERS to 0. */ 51#define MASK_STRICT_ALIGN 0x20000000 /* Set STRICT_ALIGNMENT to 1. */ 52#define MASK_RELOCATABLE 0x10000000 /* GOT pointers are PC relative. */ 53#define MASK_EABI 0x08000000 /* Adhere to eabi, not System V spec. */ 54#define MASK_LITTLE_ENDIAN 0x04000000 /* Target is little endian. */ 55#define MASK_REGNAMES 0x02000000 /* Use alternate register names. */ 56#define MASK_PROTOTYPE 0x01000000 /* Only prototyped fcns pass variable args. */ 57#define MASK_NO_BITFIELD_WORD 0x00800000 /* Bitfields cannot cross word boundaries */ 58 59#define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE) 60#define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN) 61#define TARGET_RELOCATABLE (target_flags & MASK_RELOCATABLE) 62#define TARGET_EABI (target_flags & MASK_EABI) 63#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN) 64#define TARGET_REGNAMES (target_flags & MASK_REGNAMES) 65#define TARGET_PROTOTYPE (target_flags & MASK_PROTOTYPE) 66#define TARGET_NO_BITFIELD_WORD (target_flags & MASK_NO_BITFIELD_WORD) 67#define TARGET_TOC ((target_flags & MASK_64BIT) \ 68 || ((target_flags & (MASK_RELOCATABLE \ 69 | MASK_MINIMAL_TOC)) \ 70 && flag_pic > 1) \ 71 || DEFAULT_ABI == ABI_AIX) 72 73#define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE) 74#define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN) 75#define TARGET_NO_PROTOTYPE (! TARGET_PROTOTYPE) 76#define TARGET_NO_TOC (! TARGET_TOC) 77#define TARGET_NO_EABI (! TARGET_EABI) 78 79/* Strings provided by SUBTARGET_OPTIONS */ 80extern const char *rs6000_abi_name; 81extern const char *rs6000_sdata_name; 82extern const char *rs6000_tls_size_string; /* For -mtls-size= */ 83 84/* Override rs6000.h definition. */ 85#undef SUBTARGET_OPTIONS 86#define SUBTARGET_OPTIONS \ 87 { "call-", &rs6000_abi_name, N_("Select ABI calling convention"), 0}, \ 88 { "sdata=", &rs6000_sdata_name, N_("Select method for sdata handling"), 0}, \ 89 { "tls-size=", &rs6000_tls_size_string, \ 90 N_("Specify bit size of immediate TLS offsets"), 0 } 91 92#define SDATA_DEFAULT_SIZE 8 93 94/* Note, V.4 no longer uses a normal TOC, so make -mfull-toc, be just 95 the same as -mminimal-toc. */ 96/* Override rs6000.h definition. */ 97#undef SUBTARGET_SWITCHES 98#define SUBTARGET_SWITCHES \ 99 { "bit-align", -MASK_NO_BITFIELD_TYPE, \ 100 N_("Align to the base type of the bit-field") }, \ 101 { "no-bit-align", MASK_NO_BITFIELD_TYPE, \ 102 N_("Don't align to the base type of the bit-field") }, \ 103 { "strict-align", MASK_STRICT_ALIGN, \ 104 N_("Don't assume that unaligned accesses are handled by the system") }, \ 105 { "no-strict-align", -MASK_STRICT_ALIGN, \ 106 N_("Assume that unaligned accesses are handled by the system") }, \ 107 { "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC, \ 108 N_("Produce code relocatable at runtime") }, \ 109 { "no-relocatable", -MASK_RELOCATABLE, \ 110 N_("Don't produce code relocatable at runtime") }, \ 111 { "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC, \ 112 N_("Produce code relocatable at runtime") }, \ 113 { "no-relocatable-lib", -MASK_RELOCATABLE, \ 114 N_("Don't produce code relocatable at runtime") }, \ 115 { "little-endian", MASK_LITTLE_ENDIAN, \ 116 N_("Produce little endian code") }, \ 117 { "little", MASK_LITTLE_ENDIAN, \ 118 N_("Produce little endian code") }, \ 119 { "big-endian", -MASK_LITTLE_ENDIAN, \ 120 N_("Produce big endian code") }, \ 121 { "big", -MASK_LITTLE_ENDIAN, \ 122 N_("Produce big endian code") }, \ 123 { "no-toc", 0, N_("no description yet") }, \ 124 { "toc", MASK_MINIMAL_TOC, N_("no description yet") }, \ 125 { "full-toc", MASK_MINIMAL_TOC, N_("no description yet") }, \ 126 { "prototype", MASK_PROTOTYPE, N_("no description yet") }, \ 127 { "no-prototype", -MASK_PROTOTYPE, N_("no description yet") }, \ 128 { "no-traceback", 0, N_("no description yet") }, \ 129 { "eabi", MASK_EABI, N_("Use EABI") }, \ 130 { "no-eabi", -MASK_EABI, N_("Don't use EABI") }, \ 131 { "bit-word", -MASK_NO_BITFIELD_WORD, "" }, \ 132 { "no-bit-word", MASK_NO_BITFIELD_WORD, \ 133 N_("Do not allow bit-fields to cross word boundaries") }, \ 134 { "regnames", MASK_REGNAMES, \ 135 N_("Use alternate register names") }, \ 136 { "no-regnames", -MASK_REGNAMES, \ 137 N_("Don't use alternate register names") }, \ 138 { "sdata", 0, N_("no description yet") }, \ 139 { "no-sdata", 0, N_("no description yet") }, \ 140 { "sim", 0, \ 141 N_("Link with libsim.a, libc.a and sim-crt0.o") }, \ 142 { "ads", 0, \ 143 N_("Link with libads.a, libc.a and crt0.o") }, \ 144 { "yellowknife", 0, \ 145 N_("Link with libyk.a, libc.a and crt0.o") }, \ 146 { "mvme", 0, \ 147 N_("Link with libmvme.a, libc.a and crt0.o") }, \ 148 { "emb", 0, \ 149 N_("Set the PPC_EMB bit in the ELF flags header") }, \ 150 { "windiss", 0, N_("Use the WindISS simulator") }, \ 151 { "shlib", 0, N_("no description yet") }, \ 152 { "64", MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC, \ 153 N_("Generate 64-bit code") }, \ 154 { "32", - (MASK_64BIT | MASK_POWERPC64), \ 155 N_("Generate 32-bit code") }, \ 156 EXTRA_SUBTARGET_SWITCHES \ 157 { "newlib", 0, N_("no description yet") }, 158 159/* This is meant to be redefined in the host dependent files. */ 160#define EXTRA_SUBTARGET_SWITCHES 161 162/* Sometimes certain combinations of command options do not make sense 163 on a particular target machine. You can define a macro 164 `OVERRIDE_OPTIONS' to take account of this. This macro, if 165 defined, is executed once just after all the command options have 166 been parsed. 167 168 The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to 169 get control. */ 170 171#define SUBTARGET_OVERRIDE_OPTIONS \ 172do { \ 173 if (!g_switch_set) \ 174 g_switch_value = SDATA_DEFAULT_SIZE; \ 175 \ 176 if (rs6000_abi_name == NULL) \ 177 rs6000_abi_name = RS6000_ABI_NAME; \ 178 \ 179 if (!strcmp (rs6000_abi_name, "sysv")) \ 180 rs6000_current_abi = ABI_V4; \ 181 else if (!strcmp (rs6000_abi_name, "sysv-noeabi")) \ 182 { \ 183 rs6000_current_abi = ABI_V4; \ 184 target_flags &= ~ MASK_EABI; \ 185 } \ 186 else if (!strcmp (rs6000_abi_name, "sysv-eabi") \ 187 || !strcmp (rs6000_abi_name, "eabi")) \ 188 { \ 189 rs6000_current_abi = ABI_V4; \ 190 target_flags |= MASK_EABI; \ 191 } \ 192 else if (!strcmp (rs6000_abi_name, "aixdesc")) \ 193 rs6000_current_abi = ABI_AIX; \ 194 else if (!strcmp (rs6000_abi_name, "freebsd")) \ 195 rs6000_current_abi = ABI_V4; \ 196 else if (!strcmp (rs6000_abi_name, "linux")) \ 197 rs6000_current_abi = ABI_V4; \ 198 else if (!strcmp (rs6000_abi_name, "gnu")) \ 199 rs6000_current_abi = ABI_V4; \ 200 else if (!strcmp (rs6000_abi_name, "netbsd")) \ 201 rs6000_current_abi = ABI_V4; \ 202 else if (!strcmp (rs6000_abi_name, "openbsd")) \ 203 rs6000_current_abi = ABI_V4; \ 204 else if (!strcmp (rs6000_abi_name, "i960-old")) \ 205 { \ 206 rs6000_current_abi = ABI_V4; \ 207 target_flags |= (MASK_LITTLE_ENDIAN | MASK_EABI \ 208 | MASK_NO_BITFIELD_WORD); \ 209 target_flags &= ~MASK_STRICT_ALIGN; \ 210 } \ 211 else \ 212 { \ 213 rs6000_current_abi = ABI_V4; \ 214 error ("bad value for -mcall-%s", rs6000_abi_name); \ 215 } \ 216 \ 217 if (rs6000_sdata_name) \ 218 { \ 219 if (!strcmp (rs6000_sdata_name, "none")) \ 220 rs6000_sdata = SDATA_NONE; \ 221 else if (!strcmp (rs6000_sdata_name, "data")) \ 222 rs6000_sdata = SDATA_DATA; \ 223 else if (!strcmp (rs6000_sdata_name, "default")) \ 224 rs6000_sdata = (TARGET_EABI) ? SDATA_EABI : SDATA_SYSV; \ 225 else if (!strcmp (rs6000_sdata_name, "sysv")) \ 226 rs6000_sdata = SDATA_SYSV; \ 227 else if (!strcmp (rs6000_sdata_name, "eabi")) \ 228 rs6000_sdata = SDATA_EABI; \ 229 else \ 230 error ("bad value for -msdata=%s", rs6000_sdata_name); \ 231 } \ 232 else if (DEFAULT_ABI == ABI_V4) \ 233 { \ 234 rs6000_sdata = SDATA_DATA; \ 235 rs6000_sdata_name = "data"; \ 236 } \ 237 else \ 238 { \ 239 rs6000_sdata = SDATA_NONE; \ 240 rs6000_sdata_name = "none"; \ 241 } \ 242 \ 243 if (TARGET_RELOCATABLE && \ 244 (rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \ 245 { \ 246 rs6000_sdata = SDATA_DATA; \ 247 error ("-mrelocatable and -msdata=%s are incompatible", \ 248 rs6000_sdata_name); \ 249 } \ 250 \ 251 else if (flag_pic && DEFAULT_ABI != ABI_AIX \ 252 && (rs6000_sdata == SDATA_EABI \ 253 || rs6000_sdata == SDATA_SYSV)) \ 254 { \ 255 rs6000_sdata = SDATA_DATA; \ 256 error ("-f%s and -msdata=%s are incompatible", \ 257 (flag_pic > 1) ? "PIC" : "pic", \ 258 rs6000_sdata_name); \ 259 } \ 260 \ 261 if ((rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4) \ 262 || (rs6000_sdata == SDATA_EABI && !TARGET_EABI)) \ 263 { \ 264 rs6000_sdata = SDATA_NONE; \ 265 error ("-msdata=%s and -mcall-%s are incompatible", \ 266 rs6000_sdata_name, rs6000_abi_name); \ 267 } \ 268 \ 269 targetm.have_srodata_section = rs6000_sdata == SDATA_EABI; \ 270 \ 271 if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ 272 { \ 273 target_flags |= MASK_MINIMAL_TOC; \ 274 error ("-mrelocatable and -mno-minimal-toc are incompatible"); \ 275 } \ 276 \ 277 if (TARGET_RELOCATABLE && rs6000_current_abi == ABI_AIX) \ 278 { \ 279 target_flags &= ~MASK_RELOCATABLE; \ 280 error ("-mrelocatable and -mcall-%s are incompatible", \ 281 rs6000_abi_name); \ 282 } \ 283 \ 284 if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi == ABI_AIX) \ 285 { \ 286 flag_pic = 0; \ 287 error ("-fPIC and -mcall-%s are incompatible", \ 288 rs6000_abi_name); \ 289 } \ 290 \ 291 if (rs6000_current_abi == ABI_AIX && TARGET_LITTLE_ENDIAN) \ 292 { \ 293 target_flags &= ~MASK_LITTLE_ENDIAN; \ 294 error ("-mcall-aixdesc must be big endian"); \ 295 } \ 296 \ 297 /* Treat -fPIC the same as -mrelocatable. */ \ 298 if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \ 299 target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC; \ 300 \ 301 else if (TARGET_RELOCATABLE) \ 302 flag_pic = 2; \ 303} while (0) 304 305#ifndef RS6000_BI_ARCH 306# define SUBSUBTARGET_OVERRIDE_OPTIONS \ 307do { \ 308 if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \ 309 error ("-m%s not supported in this configuration", \ 310 (target_flags & MASK_64BIT) ? "64" : "32"); \ 311} while (0) 312#endif 313 314/* Override rs6000.h definition. */ 315#undef TARGET_DEFAULT 316#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS) 317 318/* Override rs6000.h definition. */ 319#undef PROCESSOR_DEFAULT 320#define PROCESSOR_DEFAULT PROCESSOR_PPC750 321 322#define FIXED_R2 1 323/* System V.4 uses register 13 as a pointer to the small data area, 324 so it is not available to the normal user. */ 325#define FIXED_R13 1 326 327/* Size of the V.4 varargs area if needed. */ 328/* Override rs6000.h definition. */ 329#undef RS6000_VARARGS_AREA 330#define RS6000_VARARGS_AREA ((cfun->machine->sysv_varargs_p) ? RS6000_VARARGS_SIZE : 0) 331 332/* Override default big endianism definitions in rs6000.h. */ 333#undef BYTES_BIG_ENDIAN 334#undef WORDS_BIG_ENDIAN 335#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN) 336#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) 337 338/* Define this to set the endianness to use in libgcc2.c, which can 339 not depend on target_flags. */ 340#if !defined(__LITTLE_ENDIAN__) && !defined(__sun__) 341#define LIBGCC2_WORDS_BIG_ENDIAN 1 342#else 343#define LIBGCC2_WORDS_BIG_ENDIAN 0 344#endif 345 346/* Define cutoff for using external functions to save floating point. 347 Currently on V.4, always use inline stores. */ 348#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64) 349 350/* Put jump tables in read-only memory, rather than in .text. */ 351#define JUMP_TABLES_IN_TEXT_SECTION 0 352 353/* Prefix and suffix to use to saving floating point. */ 354#define SAVE_FP_PREFIX "_savefpr_" 355#define SAVE_FP_SUFFIX "_l" 356 357/* Prefix and suffix to use to restoring floating point. */ 358#define RESTORE_FP_PREFIX "_restfpr_" 359#define RESTORE_FP_SUFFIX "_l" 360 361/* Type used for ptrdiff_t, as a string used in a declaration. */ 362#define PTRDIFF_TYPE "int" 363 364/* Type used for wchar_t, as a string used in a declaration. */ 365/* Override svr4.h definition. */ 366#undef WCHAR_TYPE 367#define WCHAR_TYPE "long int" 368 369/* Width of wchar_t in bits. */ 370/* Override svr4.h definition. */ 371#undef WCHAR_TYPE_SIZE 372#define WCHAR_TYPE_SIZE 32 373 374/* Make int foo : 8 not cause structures to be aligned to an int boundary. */ 375/* Override elfos.h definition. */ 376#undef PCC_BITFIELD_TYPE_MATTERS 377#define PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE) 378 379#undef BITFIELD_NBYTES_LIMITED 380#define BITFIELD_NBYTES_LIMITED (TARGET_NO_BITFIELD_WORD) 381 382/* Define this macro to be the value 1 if instructions will fail to 383 work if given data not on the nominal alignment. If instructions 384 will merely go slower in that case, define this macro as 0. */ 385#undef STRICT_ALIGNMENT 386#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN) 387 388/* Define this macro if you wish to preserve a certain alignment for 389 the stack pointer, greater than what the hardware enforces. The 390 definition is a C expression for the desired alignment (measured 391 in bits). This macro must evaluate to a value equal to or larger 392 than STACK_BOUNDARY. 393 For the SYSV ABI and variants the alignment of the stack pointer 394 is usually controlled manually in rs6000.c. However, to maintain 395 alignment across alloca () in all circumstances, 396 PREFERRED_STACK_BOUNDARY needs to be set as well. 397 This has the additional advantage of allowing a bigger maximum 398 alignment of user objects on the stack. */ 399 400#undef PREFERRED_STACK_BOUNDARY 401#define PREFERRED_STACK_BOUNDARY 128 402 403/* Real stack boundary as mandated by the appropriate ABI. */ 404#define ABI_STACK_BOUNDARY \ 405 ((TARGET_EABI && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128) 406 407/* An expression for the alignment of a structure field FIELD if the 408 alignment computed in the usual way is COMPUTED. */ 409#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ 410 ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \ 411 ? 128 : COMPUTED) 412 413/* Define this macro as an expression for the alignment of a type 414 (given by TYPE as a tree node) if the alignment computed in the 415 usual way is COMPUTED and the alignment explicitly specified was 416 SPECIFIED. */ 417#define ROUND_TYPE_ALIGN(TYPE, COMPUTED, SPECIFIED) \ 418 ((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) \ 419 ? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \ 420 : MAX (COMPUTED, SPECIFIED)) 421 422#undef BIGGEST_FIELD_ALIGNMENT 423 424/* Use ELF style section commands. */ 425 426#define TEXT_SECTION_ASM_OP "\t.section\t\".text\"" 427 428#define DATA_SECTION_ASM_OP "\t.section\t\".data\"" 429 430#define BSS_SECTION_ASM_OP "\t.section\t\".bss\"" 431 432/* Override elfos.h definition. */ 433#undef INIT_SECTION_ASM_OP 434#define INIT_SECTION_ASM_OP "\t.section\t\".init\",\"ax\"" 435 436/* Override elfos.h definition. */ 437#undef FINI_SECTION_ASM_OP 438#define FINI_SECTION_ASM_OP "\t.section\t\".fini\",\"ax\"" 439 440#define TOC_SECTION_ASM_OP "\t.section\t\".got\",\"aw\"" 441 442/* Put PC relative got entries in .got2. */ 443#define MINIMAL_TOC_SECTION_ASM_OP \ 444 (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI != ABI_AIX) \ 445 ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") 446 447#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\"" 448#define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\"" 449#define SBSS_SECTION_ASM_OP "\t.section\t\".sbss\",\"aw\",@nobits" 450 451/* Besides the usual ELF sections, we need a toc section. */ 452/* Override elfos.h definition. */ 453#undef EXTRA_SECTIONS 454#define EXTRA_SECTIONS in_toc, in_sdata, in_sdata2, in_sbss, in_init, in_fini 455 456/* Override elfos.h definition. */ 457#undef EXTRA_SECTION_FUNCTIONS 458#define EXTRA_SECTION_FUNCTIONS \ 459 TOC_SECTION_FUNCTION \ 460 SDATA_SECTION_FUNCTION \ 461 SDATA2_SECTION_FUNCTION \ 462 SBSS_SECTION_FUNCTION \ 463 INIT_SECTION_FUNCTION \ 464 FINI_SECTION_FUNCTION 465 466#define TOC_SECTION_FUNCTION \ 467void \ 468toc_section (void) \ 469{ \ 470 if (in_section != in_toc) \ 471 { \ 472 in_section = in_toc; \ 473 if (DEFAULT_ABI == ABI_AIX \ 474 && TARGET_MINIMAL_TOC \ 475 && !TARGET_RELOCATABLE) \ 476 { \ 477 if (! toc_initialized) \ 478 { \ 479 toc_initialized = 1; \ 480 fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \ 481 (*targetm.asm_out.internal_label) (asm_out_file, "LCTOC", 0); \ 482 fprintf (asm_out_file, "\t.tc "); \ 483 ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1[TC],"); \ 484 ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ 485 fprintf (asm_out_file, "\n"); \ 486 \ 487 fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \ 488 ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ 489 fprintf (asm_out_file, " = .+32768\n"); \ 490 } \ 491 else \ 492 fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \ 493 } \ 494 else if (DEFAULT_ABI == ABI_AIX && !TARGET_RELOCATABLE) \ 495 fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \ 496 else \ 497 { \ 498 fprintf (asm_out_file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \ 499 if (! toc_initialized) \ 500 { \ 501 ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ 502 fprintf (asm_out_file, " = .+32768\n"); \ 503 toc_initialized = 1; \ 504 } \ 505 } \ 506 } \ 507} \ 508 \ 509extern int in_toc_section (void); \ 510int in_toc_section (void) \ 511{ \ 512 return in_section == in_toc; \ 513} 514 515#define SDATA_SECTION_FUNCTION \ 516void \ 517sdata_section (void) \ 518{ \ 519 if (in_section != in_sdata) \ 520 { \ 521 in_section = in_sdata; \ 522 fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP); \ 523 } \ 524} 525 526#define SDATA2_SECTION_FUNCTION \ 527void \ 528sdata2_section (void) \ 529{ \ 530 if (in_section != in_sdata2) \ 531 { \ 532 in_section = in_sdata2; \ 533 fprintf (asm_out_file, "%s\n", SDATA2_SECTION_ASM_OP); \ 534 } \ 535} 536 537#define SBSS_SECTION_FUNCTION \ 538void \ 539sbss_section (void) \ 540{ \ 541 if (in_section != in_sbss) \ 542 { \ 543 in_section = in_sbss; \ 544 fprintf (asm_out_file, "%s\n", SBSS_SECTION_ASM_OP); \ 545 } \ 546} 547 548#define INIT_SECTION_FUNCTION \ 549void \ 550init_section (void) \ 551{ \ 552 if (in_section != in_init) \ 553 { \ 554 in_section = in_init; \ 555 fprintf (asm_out_file, "%s\n", INIT_SECTION_ASM_OP); \ 556 } \ 557} 558 559#define FINI_SECTION_FUNCTION \ 560void \ 561fini_section (void) \ 562{ \ 563 if (in_section != in_fini) \ 564 { \ 565 in_section = in_fini; \ 566 fprintf (asm_out_file, "%s\n", FINI_SECTION_ASM_OP); \ 567 } \ 568} 569 570/* Override default elf definitions. */ 571#undef TARGET_ASM_SELECT_RTX_SECTION 572#define TARGET_ASM_SELECT_RTX_SECTION rs6000_elf_select_rtx_section 573#undef TARGET_ASM_SELECT_SECTION 574#define TARGET_ASM_SELECT_SECTION rs6000_elf_select_section 575#define TARGET_ASM_UNIQUE_SECTION rs6000_elf_unique_section 576 577/* Return nonzero if this entry is to be written into the constant pool 578 in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST 579 containing one of them. If -mfp-in-toc (the default), we also do 580 this for floating-point constants. We actually can only do this 581 if the FP formats of the target and host machines are the same, but 582 we can't check that since not every file that uses 583 GO_IF_LEGITIMATE_ADDRESS_P includes real.h. 584 585 Unlike AIX, we don't key off of -mminimal-toc, but instead do not 586 allow floating point constants in the TOC if -mrelocatable. */ 587 588#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P 589#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ 590 (TARGET_TOC \ 591 && (GET_CODE (X) == SYMBOL_REF \ 592 || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \ 593 && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \ 594 || GET_CODE (X) == LABEL_REF \ 595 || (GET_CODE (X) == CONST_INT \ 596 && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ 597 || (!TARGET_NO_FP_IN_TOC \ 598 && !TARGET_RELOCATABLE \ 599 && GET_CODE (X) == CONST_DOUBLE \ 600 && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 601 && BITS_PER_WORD == HOST_BITS_PER_INT))) 602 603/* These macros generate the special .type and .size directives which 604 are used to set the corresponding fields of the linker symbol table 605 entries in an ELF object file under SVR4. These macros also output 606 the starting labels for the relevant functions/objects. */ 607 608/* Write the extra assembler code needed to declare a function properly. 609 Some svr4 assemblers need to also have something extra said about the 610 function's return value. We allow for that here. */ 611 612extern int rs6000_pic_labelno; 613 614/* Override elfos.h definition. */ 615#undef ASM_DECLARE_FUNCTION_NAME 616#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 617 rs6000_elf_declare_function_name ((FILE), (NAME), (DECL)) 618 619/* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore 620 flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ 621 622#define LOCAL_LABEL_PREFIX "." 623#define USER_LABEL_PREFIX "" 624 625/* svr4.h overrides (*targetm.asm_out.internal_label). */ 626 627#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ 628 asm_fprintf (FILE, "%L%s", PREFIX) 629 630/* Globalizing directive for a label. */ 631#define GLOBAL_ASM_OP "\t.globl " 632 633/* This says how to output assembler code to declare an 634 uninitialized internal linkage data object. Under SVR4, 635 the linker seems to want the alignment of data objects 636 to depend on their types. We do exactly that here. */ 637 638#define LOCAL_ASM_OP "\t.local\t" 639 640#define LCOMM_ASM_OP "\t.lcomm\t" 641 642/* Override elfos.h definition. */ 643#undef ASM_OUTPUT_ALIGNED_LOCAL 644#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ 645do { \ 646 if (rs6000_sdata != SDATA_NONE && (SIZE) > 0 \ 647 && (SIZE) <= g_switch_value) \ 648 { \ 649 sbss_section (); \ 650 ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \ 651 ASM_OUTPUT_LABEL (FILE, NAME); \ 652 ASM_OUTPUT_SKIP (FILE, SIZE); \ 653 if (!flag_inhibit_size_directive && (SIZE) > 0) \ 654 ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ 655 } \ 656 else \ 657 { \ 658 fprintf (FILE, "%s", LCOMM_ASM_OP); \ 659 assemble_name ((FILE), (NAME)); \ 660 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ 661 (SIZE), (ALIGN) / BITS_PER_UNIT); \ 662 } \ 663 ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ 664} while (0) 665 666/* Describe how to emit uninitialized external linkage items. */ 667#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ 668do { \ 669 ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \ 670} while (0) 671 672#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 673/* To support -falign-* switches we need to use .p2align so 674 that alignment directives in code sections will be padded 675 with no-op instructions, rather than zeroes. */ 676#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 677 if ((LOG) != 0) \ 678 { \ 679 if ((MAX_SKIP) == 0) \ 680 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 681 else \ 682 fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 683 } 684#endif 685 686/* This is how to output code to push a register on the stack. 687 It need not be very fast code. 688 689 On the rs6000, we must keep the backchain up to date. In order 690 to simplify things, always allocate 16 bytes for a push (System V 691 wants to keep stack aligned to a 16 byte boundary). */ 692 693#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ 694do { \ 695 if (DEFAULT_ABI == ABI_V4) \ 696 asm_fprintf (FILE, \ 697 "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n", \ 698 reg_names[1], reg_names[1], reg_names[REGNO], \ 699 reg_names[1]); \ 700} while (0) 701 702/* This is how to output an insn to pop a register from the stack. 703 It need not be very fast code. */ 704 705#define ASM_OUTPUT_REG_POP(FILE, REGNO) \ 706do { \ 707 if (DEFAULT_ABI == ABI_V4) \ 708 asm_fprintf (FILE, \ 709 "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n", \ 710 reg_names[REGNO], reg_names[1], reg_names[1], \ 711 reg_names[1]); \ 712} while (0) 713 714/* Switch Recognition by gcc.c. Add -G xx support. */ 715 716/* Override svr4.h definition. */ 717#undef SWITCH_TAKES_ARG 718#define SWITCH_TAKES_ARG(CHAR) \ 719 ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \ 720 || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ 721 || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \ 722 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ 723 || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G') 724 725extern int fixuplabelno; 726 727/* Handle constructors specially for -mrelocatable. */ 728#define TARGET_ASM_CONSTRUCTOR rs6000_elf_asm_out_constructor 729#define TARGET_ASM_DESTRUCTOR rs6000_elf_asm_out_destructor 730 731/* This is the end of what might become sysv4.h. */ 732 733/* Use DWARF 2 debugging information by default. */ 734#undef PREFERRED_DEBUGGING_TYPE 735#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 736 737/* Historically we have also supported stabs debugging. */ 738#define DBX_DEBUGGING_INFO 1 739 740#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO) 741 742/* Map register numbers held in the call frame info that gcc has 743 collected using DWARF_FRAME_REGNUM to those that should be output in 744 .debug_frame and .eh_frame. We continue to use gcc hard reg numbers 745 for .eh_frame, but use the numbers mandated by the various ABIs for 746 .debug_frame. rs6000_emit_prologue has translated any combination of 747 CR2, CR3, CR4 saves to a save of CR2. The actual code emitted saves 748 the whole of CR, so we map CR2_REGNO to the DWARF reg for CR. */ 749#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) \ 750 ((FOR_EH) ? (REGNO) \ 751 : (REGNO) == CR2_REGNO ? 64 \ 752 : DBX_REGISTER_NUMBER (REGNO)) 753 754#define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info 755#define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p 756#define TARGET_SECTION_TYPE_FLAGS rs6000_elf_section_type_flags 757 758/* The ELF version doesn't encode [DS] or whatever at the end of symbols. */ 759 760#define RS6000_OUTPUT_BASENAME(FILE, NAME) \ 761 assemble_name (FILE, NAME) 762 763/* We have to output the stabs for the function name *first*, before 764 outputting its label. */ 765 766#define DBX_FUNCTION_FIRST 767 768/* This is the end of what might become sysv4dbx.h. */ 769 770#ifndef TARGET_VERSION 771#define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)"); 772#endif 773 774#define TARGET_OS_SYSV_CPP_BUILTINS() \ 775 do \ 776 { \ 777 if (flag_pic == 1) \ 778 { \ 779 builtin_define ("__pic__=1"); \ 780 builtin_define ("__PIC__=1"); \ 781 } \ 782 else if (flag_pic == 2) \ 783 { \ 784 builtin_define ("__pic__=2"); \ 785 builtin_define ("__PIC__=2"); \ 786 } \ 787 if (target_flags_explicit \ 788 & MASK_RELOCATABLE) \ 789 builtin_define ("_RELOCATABLE"); \ 790 } \ 791 while (0) 792 793#ifndef TARGET_OS_CPP_BUILTINS 794#define TARGET_OS_CPP_BUILTINS() \ 795 do \ 796 { \ 797 builtin_define_std ("PPC"); \ 798 builtin_define_std ("unix"); \ 799 builtin_define ("__svr4__"); \ 800 builtin_assert ("system=unix"); \ 801 builtin_assert ("system=svr4"); \ 802 builtin_assert ("cpu=powerpc"); \ 803 builtin_assert ("machine=powerpc"); \ 804 TARGET_OS_SYSV_CPP_BUILTINS (); \ 805 } \ 806 while (0) 807#endif 808 809/* Pass various options to the assembler. */ 810/* Override svr4.h definition. */ 811#undef ASM_SPEC 812#define ASM_SPEC "%(asm_cpu) \ 813%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ 814%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ 815%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ 816%{memb|msdata|msdata=eabi: -memb} \ 817%{mlittle|mlittle-endian:-mlittle; \ 818 mbig|mbig-endian :-mbig; \ 819 mcall-aixdesc | \ 820 mcall-freebsd | \ 821 mcall-netbsd | \ 822 mcall-openbsd | \ 823 mcall-linux | \ 824 mcall-gnu :-mbig; \ 825 mcall-i960-old :-mlittle}" 826 827#define CC1_ENDIAN_BIG_SPEC "" 828 829#define CC1_ENDIAN_LITTLE_SPEC "\ 830%{!mstrict-align: %{!mno-strict-align: \ 831 %{!mcall-i960-old: \ 832 -mstrict-align \ 833 } \ 834}}" 835 836#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big)" 837 838/* Pass -G xxx to the compiler and set correct endian mode. */ 839#define CC1_SPEC "%{G*} \ 840%{mlittle|mlittle-endian: %(cc1_endian_little); \ 841 mbig |mbig-endian : %(cc1_endian_big); \ 842 mcall-aixdesc | \ 843 mcall-freebsd | \ 844 mcall-netbsd | \ 845 mcall-openbsd | \ 846 mcall-linux | \ 847 mcall-gnu : -mbig %(cc1_endian_big); \ 848 mcall-i960-old : -mlittle %(cc1_endian_little); \ 849 : %(cc1_endian_default)} \ 850%{mno-sdata: -msdata=none } \ 851%{meabi: %{!mcall-*: -mcall-sysv }} \ 852%{!meabi: %{!mno-eabi: \ 853 %{mrelocatable: -meabi } \ 854 %{mcall-freebsd: -mno-eabi } \ 855 %{mcall-i960-old: -meabi } \ 856 %{mcall-linux: -mno-eabi } \ 857 %{mcall-gnu: -mno-eabi } \ 858 %{mcall-netbsd: -mno-eabi } \ 859 %{mcall-openbsd: -mno-eabi }}} \ 860%{msdata: -msdata=default} \ 861%{mno-sdata: -msdata=none} \ 862%{profile: -p}" 863 864/* Don't put -Y P,<path> for cross compilers. */ 865#ifndef CROSS_COMPILE 866#define LINK_PATH_SPEC "\ 867%{!R*:%{L*:-R %*}} \ 868%{!nostdlib: %{!YP,*: \ 869 %{compat-bsd: \ 870 %{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ 871 %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \ 872 %{!R*: %{!L*: -R /usr/ucblib}} \ 873 %{!compat-bsd: \ 874 %{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ 875 %{!p:-Y P,/usr/ccs/lib:/usr/lib}}}}" 876 877#else 878#define LINK_PATH_SPEC "" 879#endif 880 881/* Default starting address if specified. */ 882#define LINK_START_SPEC "\ 883%{mads : %(link_start_ads) ; \ 884 myellowknife : %(link_start_yellowknife) ; \ 885 mmvme : %(link_start_mvme) ; \ 886 msim : %(link_start_sim) ; \ 887 mwindiss : %(link_start_windiss) ; \ 888 mcall-freebsd: %(link_start_freebsd) ; \ 889 mcall-linux : %(link_start_linux) ; \ 890 mcall-gnu : %(link_start_gnu) ; \ 891 mcall-netbsd : %(link_start_netbsd) ; \ 892 mcall-openbsd: %(link_start_openbsd) ; \ 893 : %(link_start_default) }" 894 895#define LINK_START_DEFAULT_SPEC "" 896 897/* Override svr4.h definition. */ 898#undef LINK_SPEC 899#define LINK_SPEC "\ 900%{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} \ 901%{YP,*} %{R*} \ 902%{Qy:} %{!Qn:-Qy} \ 903%(link_shlib) \ 904%{!Wl,-T*: %{!T*: %(link_start) }} \ 905%(link_target) \ 906%(link_os)" 907 908/* For now, turn off shared libraries by default. */ 909#ifndef SHARED_LIB_SUPPORT 910#define NO_SHARED_LIB_SUPPORT 911#endif 912 913#ifndef NO_SHARED_LIB_SUPPORT 914/* Shared libraries are default. */ 915#define LINK_SHLIB_SPEC "\ 916%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \ 917%{mshlib: } \ 918%{static:-dn -Bstatic} \ 919%{shared:-G -dy -z text} \ 920%{symbolic:-Bsymbolic -G -dy -z text}" 921 922#else 923/* Shared libraries are not default. */ 924#define LINK_SHLIB_SPEC "\ 925%{mshlib: %(link_path) } \ 926%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \ 927%{static: } \ 928%{shared:-G -dy -z text %(link_path) } \ 929%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }" 930#endif 931 932/* Override the default target of the linker. */ 933#define LINK_TARGET_SPEC "\ 934%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \ 935%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ 936 %{mcall-i960-old: --oformat elf32-powerpcle} \ 937 }}}}" 938 939/* Any specific OS flags. */ 940#define LINK_OS_SPEC "\ 941%{mads : %(link_os_ads) ; \ 942 myellowknife : %(link_os_yellowknife) ; \ 943 mmvme : %(link_os_mvme) ; \ 944 msim : %(link_os_sim) ; \ 945 mwindiss : %(link_os_windiss) ; \ 946 mcall-freebsd: %(link_os_freebsd) ; \ 947 mcall-linux : %(link_os_linux) ; \ 948 mcall-gnu : %(link_os_gnu) ; \ 949 mcall-netbsd : %(link_os_netbsd) ; \ 950 mcall-openbsd: %(link_os_openbsd) ; \ 951 : %(link_os_default) }" 952 953#define LINK_OS_DEFAULT_SPEC "" 954 955/* Override rs6000.h definition. */ 956#undef CPP_SPEC 957#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ 958%{mads : %(cpp_os_ads) ; \ 959 myellowknife : %(cpp_os_yellowknife) ; \ 960 mmvme : %(cpp_os_mvme) ; \ 961 msim : %(cpp_os_sim) ; \ 962 mwindiss : %(cpp_os_windiss) ; \ 963 mcall-freebsd: %(cpp_os_freebsd) ; \ 964 mcall-linux : %(cpp_os_linux) ; \ 965 mcall-gnu : %(cpp_os_gnu) ; \ 966 mcall-netbsd : %(cpp_os_netbsd) ; \ 967 mcall-openbsd: %(cpp_os_openbsd) ; \ 968 : %(cpp_os_default) }" 969 970#define CPP_OS_DEFAULT_SPEC "" 971 972/* Override svr4.h definition. */ 973#undef STARTFILE_SPEC 974#define STARTFILE_SPEC "\ 975%{mads : %(startfile_ads) ; \ 976 myellowknife : %(startfile_yellowknife) ; \ 977 mmvme : %(startfile_mvme) ; \ 978 msim : %(startfile_sim) ; \ 979 mwindiss : %(startfile_windiss) ; \ 980 mcall-freebsd: %(startfile_freebsd) ; \ 981 mcall-linux : %(startfile_linux) ; \ 982 mcall-gnu : %(startfile_gnu) ; \ 983 mcall-netbsd : %(startfile_netbsd) ; \ 984 mcall-openbsd: %(startfile_openbsd) ; \ 985 : %(startfile_default) }" 986 987#define STARTFILE_DEFAULT_SPEC "" 988 989/* Override svr4.h definition. */ 990#undef LIB_SPEC 991#define LIB_SPEC "\ 992%{mads : %(lib_ads) ; \ 993 myellowknife : %(lib_yellowknife) ; \ 994 mmvme : %(lib_mvme) ; \ 995 msim : %(lib_sim) ; \ 996 mwindiss : %(lib_windiss) ; \ 997 mcall-freebsd: %(lib_freebsd) ; \ 998 mcall-linux : %(lib_linux) ; \ 999 mcall-gnu : %(lib_gnu) ; \ 1000 mcall-netbsd : %(lib_netbsd) ; \ 1001 mcall-openbsd: %(lib_openbsd) ; \ 1002 : %(lib_default) }" 1003 1004#define LIB_DEFAULT_SPEC "" 1005 1006/* Override svr4.h definition. */ 1007#undef ENDFILE_SPEC 1008#define ENDFILE_SPEC "\ 1009%{mads : crtsavres.o%s %(endfile_ads) ; \ 1010 myellowknife : crtsavres.o%s %(endfile_yellowknife) ; \ 1011 mmvme : crtsavres.o%s %(endfile_mvme) ; \ 1012 msim : crtsavres.o%s %(endfile_sim) ; \ 1013 mwindiss : %(endfile_windiss) ; \ 1014 mcall-freebsd: crtsavres.o%s %(endfile_freebsd) ; \ 1015 mcall-linux : crtsavres.o%s %(endfile_linux) ; \ 1016 mcall-gnu : crtsavres.o%s %(endfile_gnu) ; \ 1017 mcall-netbsd : crtsavres.o%s %(endfile_netbsd) ; \ 1018 mcall-openbsd: crtsavres.o%s %(endfile_openbsd) ; \ 1019 : %(crtsavres_default) %(endfile_default) }" 1020 1021#define CRTSAVRES_DEFAULT_SPEC "crtsavres.o%s" 1022 1023#define ENDFILE_DEFAULT_SPEC "" 1024 1025/* Motorola ADS support. */ 1026#define LIB_ADS_SPEC "--start-group -lads -lc --end-group" 1027 1028#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 1029 1030#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s" 1031 1032#define LINK_START_ADS_SPEC "-T ads.ld%s" 1033 1034#define LINK_OS_ADS_SPEC "" 1035 1036#define CPP_OS_ADS_SPEC "" 1037 1038/* Motorola Yellowknife support. */ 1039#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" 1040 1041#define STARTFILE_YELLOWKNIFE_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 1042 1043#define ENDFILE_YELLOWKNIFE_SPEC "crtend.o%s ecrtn.o%s" 1044 1045#define LINK_START_YELLOWKNIFE_SPEC "-T yellowknife.ld%s" 1046 1047#define LINK_OS_YELLOWKNIFE_SPEC "" 1048 1049#define CPP_OS_YELLOWKNIFE_SPEC "" 1050 1051/* Motorola MVME support. */ 1052#define LIB_MVME_SPEC "--start-group -lmvme -lc --end-group" 1053 1054#define STARTFILE_MVME_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 1055 1056#define ENDFILE_MVME_SPEC "crtend.o%s ecrtn.o%s" 1057 1058#define LINK_START_MVME_SPEC "-Ttext 0x40000" 1059 1060#define LINK_OS_MVME_SPEC "" 1061 1062#define CPP_OS_MVME_SPEC "" 1063 1064/* PowerPC simulator based on netbsd system calls support. */ 1065#define LIB_SIM_SPEC "--start-group -lsim -lc --end-group" 1066 1067#define STARTFILE_SIM_SPEC "ecrti.o%s sim-crt0.o%s crtbegin.o%s" 1068 1069#define ENDFILE_SIM_SPEC "crtend.o%s ecrtn.o%s" 1070 1071#define LINK_START_SIM_SPEC "" 1072 1073#define LINK_OS_SIM_SPEC "-m elf32ppcsim" 1074 1075#define CPP_OS_SIM_SPEC "" 1076 1077/* FreeBSD support. */ 1078 1079#define CPP_OS_FREEBSD_SPEC "\ 1080 -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ 1081 -Acpu=powerpc -Amachine=powerpc" 1082 1083#define STARTFILE_FREEBSD_SPEC FBSD_STARTFILE_SPEC 1084#define ENDFILE_FREEBSD_SPEC FBSD_ENDFILE_SPEC 1085#define LIB_FREEBSD_SPEC FBSD_LIB_SPEC 1086#define LINK_START_FREEBSD_SPEC "" 1087 1088#define LINK_OS_FREEBSD_SPEC "\ 1089 %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ 1090 %{Wl,*:%*} \ 1091 %{v:-V} \ 1092 %{assert*} %{R*} %{rpath*} %{defsym*} \ 1093 %{shared:-Bshareable %{h*} %{soname*}} \ 1094 %{!shared: \ 1095 %{!static: \ 1096 %{rdynamic: -export-dynamic} \ 1097 %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ 1098 %{static:-Bstatic}} \ 1099 %{symbolic:-Bsymbolic}" 1100 1101/* GNU/Linux support. */ 1102#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \ 1103%{!mnewlib: %{pthread:-lpthread} %{shared:-lc} \ 1104%{!shared: %{profile:-lc_p} %{!profile:-lc}}}" 1105 1106#ifdef HAVE_LD_PIE 1107#define STARTFILE_LINUX_SPEC "\ 1108%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ 1109%{mnewlib:ecrti.o%s;:crti.o%s} \ 1110%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" 1111#else 1112#define STARTFILE_LINUX_SPEC "\ 1113%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}} \ 1114%{mnewlib:ecrti.o%s;:crti.o%s} \ 1115%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" 1116#endif 1117 1118#define ENDFILE_LINUX_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} \ 1119%{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" 1120 1121#define LINK_START_LINUX_SPEC "" 1122 1123#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ 1124 %{rdynamic:-export-dynamic} \ 1125 %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" 1126 1127#if defined(HAVE_LD_EH_FRAME_HDR) 1128# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " 1129#endif 1130 1131#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ 1132%{!undef: \ 1133 %{!ansi: \ 1134 %{!std=*:-Dunix -D__unix -Dlinux -D__linux} \ 1135 %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}} \ 1136-Asystem=linux -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" 1137 1138/* GNU/Hurd support. */ 1139#define LIB_GNU_SPEC "%{mnewlib: --start-group -lgnu -lc --end-group } \ 1140%{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } \ 1141%{profile:-lc_p} %{!profile:-lc}}}" 1142 1143#define STARTFILE_GNU_SPEC "\ 1144%{!shared: %{!static: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}} \ 1145%{static: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ 1146%{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} \ 1147%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 1148 1149#define ENDFILE_GNU_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} \ 1150%{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}" 1151 1152#define LINK_START_GNU_SPEC "" 1153 1154#define LINK_OS_GNU_SPEC "-m elf32ppclinux %{!shared: %{!static: \ 1155 %{rdynamic:-export-dynamic} \ 1156 %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" 1157 1158#define CPP_OS_GNU_SPEC "-D__unix__ -D__gnu_hurd__ -D__GNU__ \ 1159%{!undef: \ 1160 %{!ansi: -Dunix -D__unix}} \ 1161-Asystem=gnu -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" 1162 1163/* NetBSD support. */ 1164#define LIB_NETBSD_SPEC "\ 1165%{profile:-lgmon -lc_p} %{!profile:-lc}" 1166 1167#define STARTFILE_NETBSD_SPEC "\ 1168ncrti.o%s crt0.o%s \ 1169%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 1170 1171#define ENDFILE_NETBSD_SPEC "\ 1172%{!shared:crtend.o%s} %{shared:crtendS.o%s} \ 1173ncrtn.o%s" 1174 1175#define LINK_START_NETBSD_SPEC "\ 1176" 1177 1178#define LINK_OS_NETBSD_SPEC "\ 1179%{!shared: %{!static: \ 1180 %{rdynamic:-export-dynamic} \ 1181 %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}" 1182 1183#define CPP_OS_NETBSD_SPEC "\ 1184-D__powerpc__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__" 1185 1186/* OpenBSD support. */ 1187#ifndef LIB_OPENBSD_SPEC 1188#define LIB_OPENBSD_SPEC "%{!shared:%{pthread:-lpthread%{p:_p}%{!p:%{pg:_p}}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}" 1189#endif 1190 1191#ifndef STARTFILE_OPENBSD_SPEC 1192#define STARTFILE_OPENBSD_SPEC "\ 1193%{!shared: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ 1194%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 1195#endif 1196 1197#ifndef ENDFILE_OPENBSD_SPEC 1198#define ENDFILE_OPENBSD_SPEC "\ 1199%{!shared:crtend.o%s} %{shared:crtendS.o%s}" 1200#endif 1201 1202#ifndef LINK_START_OPENBSD_SPEC 1203#define LINK_START_OPENBSD_SPEC "-Ttext 0x400074" 1204#endif 1205 1206#ifndef LINK_OS_OPENBSD_SPEC 1207#define LINK_OS_OPENBSD_SPEC "" 1208#endif 1209 1210#ifndef CPP_OS_OPENBSD_SPEC 1211#define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" 1212#endif 1213 1214/* WindISS support. */ 1215 1216#define LIB_WINDISS_SPEC "--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group" 1217 1218#define CPP_OS_WINDISS_SPEC "\ 1219-D__rtasim \ 1220-D__EABI__ \ 1221-D__ppc \ 1222%{!msoft-float: -D__hardfp} \ 1223" 1224 1225#define STARTFILE_WINDISS_SPEC "crt0.o%s crtbegin.o%s" 1226 1227#define ENDFILE_WINDISS_SPEC "crtend.o%s" 1228 1229#define LINK_START_WINDISS_SPEC "" 1230 1231#define LINK_OS_WINDISS_SPEC "" 1232 1233/* Define any extra SPECS that the compiler needs to generate. */ 1234/* Override rs6000.h definition. */ 1235#undef SUBTARGET_EXTRA_SPECS 1236#define SUBTARGET_EXTRA_SPECS \ 1237 { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ 1238 { "lib_ads", LIB_ADS_SPEC }, \ 1239 { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ 1240 { "lib_mvme", LIB_MVME_SPEC }, \ 1241 { "lib_sim", LIB_SIM_SPEC }, \ 1242 { "lib_freebsd", LIB_FREEBSD_SPEC }, \ 1243 { "lib_gnu", LIB_GNU_SPEC }, \ 1244 { "lib_linux", LIB_LINUX_SPEC }, \ 1245 { "lib_netbsd", LIB_NETBSD_SPEC }, \ 1246 { "lib_openbsd", LIB_OPENBSD_SPEC }, \ 1247 { "lib_windiss", LIB_WINDISS_SPEC }, \ 1248 { "lib_default", LIB_DEFAULT_SPEC }, \ 1249 { "startfile_ads", STARTFILE_ADS_SPEC }, \ 1250 { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ 1251 { "startfile_mvme", STARTFILE_MVME_SPEC }, \ 1252 { "startfile_sim", STARTFILE_SIM_SPEC }, \ 1253 { "startfile_freebsd", STARTFILE_FREEBSD_SPEC }, \ 1254 { "startfile_gnu", STARTFILE_GNU_SPEC }, \ 1255 { "startfile_linux", STARTFILE_LINUX_SPEC }, \ 1256 { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ 1257 { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ 1258 { "startfile_windiss", STARTFILE_WINDISS_SPEC }, \ 1259 { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ 1260 { "endfile_ads", ENDFILE_ADS_SPEC }, \ 1261 { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ 1262 { "endfile_mvme", ENDFILE_MVME_SPEC }, \ 1263 { "endfile_sim", ENDFILE_SIM_SPEC }, \ 1264 { "endfile_freebsd", ENDFILE_FREEBSD_SPEC }, \ 1265 { "endfile_gnu", ENDFILE_GNU_SPEC }, \ 1266 { "endfile_linux", ENDFILE_LINUX_SPEC }, \ 1267 { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ 1268 { "endfile_openbsd", ENDFILE_OPENBSD_SPEC }, \ 1269 { "endfile_windiss", ENDFILE_WINDISS_SPEC }, \ 1270 { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ 1271 { "link_path", LINK_PATH_SPEC }, \ 1272 { "link_shlib", LINK_SHLIB_SPEC }, \ 1273 { "link_target", LINK_TARGET_SPEC }, \ 1274 { "link_start", LINK_START_SPEC }, \ 1275 { "link_start_ads", LINK_START_ADS_SPEC }, \ 1276 { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ 1277 { "link_start_mvme", LINK_START_MVME_SPEC }, \ 1278 { "link_start_sim", LINK_START_SIM_SPEC }, \ 1279 { "link_start_freebsd", LINK_START_FREEBSD_SPEC }, \ 1280 { "link_start_gnu", LINK_START_GNU_SPEC }, \ 1281 { "link_start_linux", LINK_START_LINUX_SPEC }, \ 1282 { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ 1283 { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ 1284 { "link_start_windiss", LINK_START_WINDISS_SPEC }, \ 1285 { "link_start_default", LINK_START_DEFAULT_SPEC }, \ 1286 { "link_os", LINK_OS_SPEC }, \ 1287 { "link_os_ads", LINK_OS_ADS_SPEC }, \ 1288 { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ 1289 { "link_os_mvme", LINK_OS_MVME_SPEC }, \ 1290 { "link_os_sim", LINK_OS_SIM_SPEC }, \ 1291 { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \ 1292 { "link_os_linux", LINK_OS_LINUX_SPEC }, \ 1293 { "link_os_gnu", LINK_OS_GNU_SPEC }, \ 1294 { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ 1295 { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ 1296 { "link_os_windiss", LINK_OS_WINDISS_SPEC }, \ 1297 { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ 1298 { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ 1299 { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ 1300 { "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \ 1301 { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ 1302 { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ 1303 { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ 1304 { "cpp_os_sim", CPP_OS_SIM_SPEC }, \ 1305 { "cpp_os_freebsd", CPP_OS_FREEBSD_SPEC }, \ 1306 { "cpp_os_gnu", CPP_OS_GNU_SPEC }, \ 1307 { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ 1308 { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ 1309 { "cpp_os_openbsd", CPP_OS_OPENBSD_SPEC }, \ 1310 { "cpp_os_windiss", CPP_OS_WINDISS_SPEC }, \ 1311 { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, \ 1312 { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }, \ 1313 SUBSUBTARGET_EXTRA_SPECS 1314 1315#define SUBSUBTARGET_EXTRA_SPECS 1316 1317/* Define this macro as a C expression for the initializer of an 1318 array of string to tell the driver program which options are 1319 defaults for this target and thus do not need to be handled 1320 specially when using `MULTILIB_OPTIONS'. 1321 1322 Do not define this macro if `MULTILIB_OPTIONS' is not defined in 1323 the target makefile fragment or if none of the options listed in 1324 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ 1325 1326#define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" } 1327 1328/* Define this macro if the code for function profiling should come 1329 before the function prologue. Normally, the profiling code comes 1330 after. */ 1331#define PROFILE_BEFORE_PROLOGUE 1 1332 1333/* Function name to call to do profiling. */ 1334#define RS6000_MCOUNT "_mcount" 1335 1336/* Define this macro (to a value of 1) if you want to support the 1337 Win32 style pragmas #pragma pack(push,<n>)' and #pragma 1338 pack(pop)'. The pack(push,<n>) pragma specifies the maximum 1339 alignment (in bytes) of fields within a structure, in much the 1340 same way as the __aligned__' and __packed__' __attribute__'s 1341 do. A pack value of zero resets the behavior to the default. 1342 Successive invocations of this pragma cause the previous values to 1343 be stacked, so that invocations of #pragma pack(pop)' will return 1344 to the previous value. */ 1345 1346#define HANDLE_PRAGMA_PACK_PUSH_POP 1 1347 1348/* Select a format to encode pointers in exception handling data. CODE 1349 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is 1350 true if the symbol may be affected by dynamic relocations. */ 1351#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ 1352 ((flag_pic || TARGET_RELOCATABLE) \ 1353 ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \ 1354 : DW_EH_PE_absptr) 1355 1356#define TARGET_ASM_EXCEPTION_SECTION readonly_data_section 1357 1358#define DOUBLE_INT_ASM_OP "\t.quad\t" 1359 1360/* Generate entries in .fixup for relocatable addresses. */ 1361#define RELOCATABLE_NEEDS_FIXUP 1362