linux64.h revision 161651
1/* Definitions of target machine for GNU compiler, 2 for 64 bit PowerPC linux. 3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 4 Free Software Foundation, Inc. 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#ifndef RS6000_BI_ARCH 24 25#undef DEFAULT_ABI 26#define DEFAULT_ABI ABI_AIX 27 28#undef TARGET_64BIT 29#define TARGET_64BIT 1 30 31#define DEFAULT_ARCH64_P 1 32#define RS6000_BI_ARCH_P 0 33 34#else 35 36#define DEFAULT_ARCH64_P (TARGET_DEFAULT & MASK_64BIT) 37#define RS6000_BI_ARCH_P 1 38 39#endif 40 41#ifdef IN_LIBGCC2 42#undef TARGET_64BIT 43#ifdef __powerpc64__ 44#define TARGET_64BIT 1 45#else 46#define TARGET_64BIT 0 47#endif 48#endif 49 50#undef TARGET_AIX 51#define TARGET_AIX TARGET_64BIT 52 53#undef PROCESSOR_DEFAULT64 54#define PROCESSOR_DEFAULT64 PROCESSOR_PPC630 55 56/* We don't need to generate entries in .fixup, except when 57 -mrelocatable or -mrelocatable-lib is given. */ 58#undef RELOCATABLE_NEEDS_FIXUP 59#define RELOCATABLE_NEEDS_FIXUP \ 60 (target_flags & target_flags_explicit & MASK_RELOCATABLE) 61 62#undef RS6000_ABI_NAME 63#define RS6000_ABI_NAME (TARGET_64BIT ? "aixdesc" : "sysv") 64 65#define INVALID_64BIT "-m%s not supported in this configuration" 66#define INVALID_32BIT INVALID_64BIT 67 68#undef SUBSUBTARGET_OVERRIDE_OPTIONS 69#define SUBSUBTARGET_OVERRIDE_OPTIONS \ 70 do \ 71 { \ 72 if (rs6000_alignment_string == 0) \ 73 rs6000_alignment_flags = MASK_ALIGN_NATURAL; \ 74 if (TARGET_64BIT) \ 75 { \ 76 if (DEFAULT_ABI != ABI_AIX) \ 77 { \ 78 rs6000_current_abi = ABI_AIX; \ 79 error (INVALID_64BIT, "call"); \ 80 } \ 81 if (target_flags & MASK_RELOCATABLE) \ 82 { \ 83 target_flags &= ~MASK_RELOCATABLE; \ 84 error (INVALID_64BIT, "relocatable"); \ 85 } \ 86 if (target_flags & MASK_EABI) \ 87 { \ 88 target_flags &= ~MASK_EABI; \ 89 error (INVALID_64BIT, "eabi"); \ 90 } \ 91 if (target_flags & MASK_PROTOTYPE) \ 92 { \ 93 target_flags &= ~MASK_PROTOTYPE; \ 94 error (INVALID_64BIT, "prototype"); \ 95 } \ 96 if ((target_flags & MASK_POWERPC64) == 0) \ 97 { \ 98 target_flags |= MASK_POWERPC64; \ 99 error ("-m64 requires a PowerPC64 cpu"); \ 100 } \ 101 } \ 102 else \ 103 { \ 104 if (!RS6000_BI_ARCH_P) \ 105 error (INVALID_32BIT, "32"); \ 106 if (TARGET_PROFILE_KERNEL) \ 107 { \ 108 target_flags &= ~MASK_PROFILE_KERNEL; \ 109 error (INVALID_32BIT, "profile-kernel"); \ 110 } \ 111 } \ 112 } \ 113 while (0) 114 115#ifdef RS6000_BI_ARCH 116 117#undef OVERRIDE_OPTIONS 118#define OVERRIDE_OPTIONS \ 119 rs6000_override_options (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \ 120 ? (char *) 0 : TARGET_CPU_DEFAULT) 121 122#endif 123 124#undef ASM_DEFAULT_SPEC 125#undef ASM_SPEC 126#undef LINK_OS_LINUX_SPEC 127 128#ifndef RS6000_BI_ARCH 129#define ASM_DEFAULT_SPEC "-mppc64" 130#define ASM_SPEC "%(asm_spec64) %(asm_spec_common)" 131#define LINK_OS_LINUX_SPEC "%(link_os_linux_spec64)" 132#else 133#if DEFAULT_ARCH64_P 134#define ASM_DEFAULT_SPEC "-mppc%{!m32:64}" 135#define ASM_SPEC "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)" 136#define LINK_OS_LINUX_SPEC "%{m32:%(link_os_linux_spec32)}%{!m32:%(link_os_linux_spec64)}" 137#else 138#define ASM_DEFAULT_SPEC "-mppc%{m64:64}" 139#define ASM_SPEC "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)" 140#define LINK_OS_LINUX_SPEC "%{!m64:%(link_os_linux_spec32)}%{m64:%(link_os_linux_spec64)}" 141#endif 142#endif 143 144#define ASM_SPEC32 "-a32 %{n} %{T} %{Ym,*} %{Yd,*} \ 145%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ 146%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ 147%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ 148 %{mcall-freebsd: -mbig} \ 149 %{mcall-i960-old: -mlittle} \ 150 %{mcall-linux: -mbig} \ 151 %{mcall-gnu: -mbig} \ 152 %{mcall-netbsd: -mbig} \ 153}}}}" 154 155#define ASM_SPEC64 "-a64" 156 157#define ASM_SPEC_COMMON "%(asm_cpu) \ 158%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ 159%{v:-V} %{Qy:} %{!Qn:-Qy} %{Wa,*:%*} \ 160%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}" 161 162#undef SUBSUBTARGET_EXTRA_SPECS 163#define SUBSUBTARGET_EXTRA_SPECS \ 164 { "asm_spec_common", ASM_SPEC_COMMON }, \ 165 { "asm_spec32", ASM_SPEC32 }, \ 166 { "asm_spec64", ASM_SPEC64 }, \ 167 { "link_os_linux_spec32", LINK_OS_LINUX_SPEC32 }, \ 168 { "link_os_linux_spec64", LINK_OS_LINUX_SPEC64 }, 169 170#undef MULTILIB_DEFAULTS 171#if DEFAULT_ARCH64_P 172#define MULTILIB_DEFAULTS { "m64" } 173#else 174#define MULTILIB_DEFAULTS { "m32" } 175#endif 176 177#ifndef RS6000_BI_ARCH 178 179/* 64-bit PowerPC Linux is always big-endian. */ 180#undef TARGET_LITTLE_ENDIAN 181#define TARGET_LITTLE_ENDIAN 0 182 183/* 64-bit PowerPC Linux always has a TOC. */ 184#undef TARGET_TOC 185#define TARGET_TOC 1 186 187/* Some things from sysv4.h we don't do when 64 bit. */ 188#undef TARGET_RELOCATABLE 189#define TARGET_RELOCATABLE 0 190#undef TARGET_EABI 191#define TARGET_EABI 0 192#undef TARGET_PROTOTYPE 193#define TARGET_PROTOTYPE 0 194#undef RELOCATABLE_NEEDS_FIXUP 195#define RELOCATABLE_NEEDS_FIXUP 0 196 197#endif 198 199#define MASK_PROFILE_KERNEL 0x00100000 200 201/* Non-standard profiling for kernels, which just saves LR then calls 202 _mcount without worrying about arg saves. The idea is to change 203 the function prologue as little as possible as it isn't easy to 204 account for arg save/restore code added just for _mcount. */ 205#define TARGET_PROFILE_KERNEL (target_flags & MASK_PROFILE_KERNEL) 206 207/* Override sysv4.h. */ 208#undef EXTRA_SUBTARGET_SWITCHES 209#define EXTRA_SUBTARGET_SWITCHES \ 210 {"profile-kernel", MASK_PROFILE_KERNEL, \ 211 N_("Call mcount for profiling before a function prologue") }, \ 212 {"no-profile-kernel", -MASK_PROFILE_KERNEL, \ 213 N_("Call mcount for profiling after a function prologue") }, 214 215/* We use glibc _mcount for profiling. */ 216#define NO_PROFILE_COUNTERS TARGET_64BIT 217#define PROFILE_HOOK(LABEL) \ 218 do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0) 219 220/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */ 221#undef ADJUST_FIELD_ALIGN 222#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ 223 ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \ 224 ? 128 \ 225 : (TARGET_64BIT \ 226 && TARGET_ALIGN_NATURAL == 0 \ 227 && TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \ 228 ? get_inner_array_type (FIELD) \ 229 : TREE_TYPE (FIELD)) == DFmode) \ 230 ? MIN ((COMPUTED), 32) \ 231 : (COMPUTED)) 232 233/* PowerPC64 Linux increases natural record alignment to doubleword if 234 the first field is an FP double, only if in power alignment mode. */ 235#undef ROUND_TYPE_ALIGN 236#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \ 237 ((TARGET_ALTIVEC && TREE_CODE (STRUCT) == VECTOR_TYPE) \ 238 ? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \ 239 : (TARGET_64BIT \ 240 && (TREE_CODE (STRUCT) == RECORD_TYPE \ 241 || TREE_CODE (STRUCT) == UNION_TYPE \ 242 || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \ 243 && TARGET_ALIGN_NATURAL == 0) \ 244 ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \ 245 : MAX ((COMPUTED), (SPECIFIED))) 246 247/* Use the default for compiling target libs. */ 248#ifdef IN_TARGET_LIBS 249#undef TARGET_ALIGN_NATURAL 250#define TARGET_ALIGN_NATURAL 1 251#endif 252 253/* Indicate that jump tables go in the text section. */ 254#undef JUMP_TABLES_IN_TEXT_SECTION 255#define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT 256 257/* The linux ppc64 ABI isn't explicit on whether aggregates smaller 258 than a doubleword should be padded upward or downward. You could 259 reasonably assume that they follow the normal rules for structure 260 layout treating the parameter area as any other block of memory, 261 then map the reg param area to registers. ie. pad updard. 262 Setting both of the following defines results in this behavior. 263 Setting just the first one will result in aggregates that fit in a 264 doubleword being padded downward, and others being padded upward. 265 Not a bad idea as this results in struct { int x; } being passed 266 the same way as an int. */ 267#define AGGREGATE_PADDING_FIXED TARGET_64BIT 268#define AGGREGATES_PAD_UPWARD_ALWAYS 0 269 270/* We don't want anything in the reg parm area being passed on the 271 stack. */ 272#define MUST_PASS_IN_STACK(MODE, TYPE) \ 273 ((TARGET_64BIT \ 274 && (TYPE) != 0 \ 275 && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ 276 || TREE_ADDRESSABLE (TYPE))) \ 277 || (!TARGET_64BIT \ 278 && default_must_pass_in_stack ((MODE), (TYPE)))) 279 280/* Specify padding for the last element of a block move between 281 registers and memory. FIRST is nonzero if this is the only 282 element. */ 283#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \ 284 (!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE)) 285 286/* __throw will restore its own return address to be the same as the 287 return address of the function that the throw is being made to. 288 This is unfortunate, because we want to check the original 289 return address to see if we need to restore the TOC. 290 So we have to squirrel it away with this. */ 291#define SETUP_FRAME_ADDRESSES() \ 292 do { if (TARGET_64BIT) rs6000_aix_emit_builtin_unwind_init (); } while (0) 293 294/* Override svr4.h */ 295#undef MD_EXEC_PREFIX 296#undef MD_STARTFILE_PREFIX 297 298/* Linux doesn't support saving and restoring 64-bit regs in a 32-bit 299 process. */ 300#define OS_MISSING_POWERPC64 !TARGET_64BIT 301 302/* glibc has float and long double forms of math functions. */ 303#undef TARGET_C99_FUNCTIONS 304#define TARGET_C99_FUNCTIONS 1 305 306#undef TARGET_OS_CPP_BUILTINS 307#define TARGET_OS_CPP_BUILTINS() \ 308 do \ 309 { \ 310 if (TARGET_64BIT) \ 311 { \ 312 builtin_define ("__PPC__"); \ 313 builtin_define ("__PPC64__"); \ 314 builtin_define ("__powerpc__"); \ 315 builtin_define ("__powerpc64__"); \ 316 builtin_define ("__PIC__"); \ 317 builtin_assert ("cpu=powerpc64"); \ 318 builtin_assert ("machine=powerpc64"); \ 319 } \ 320 else \ 321 { \ 322 builtin_define_std ("PPC"); \ 323 builtin_define_std ("powerpc"); \ 324 builtin_assert ("cpu=powerpc"); \ 325 builtin_assert ("machine=powerpc"); \ 326 TARGET_OS_SYSV_CPP_BUILTINS (); \ 327 } \ 328 } \ 329 while (0) 330 331#undef CPP_OS_DEFAULT_SPEC 332#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)" 333 334/* The GNU C++ standard library currently requires _GNU_SOURCE being 335 defined on glibc-based systems. This temporary hack accomplishes this, 336 it should go away as soon as libstdc++-v3 has a real fix. */ 337#undef CPLUSPLUS_CPP_SPEC 338#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" 339 340#undef LINK_SHLIB_SPEC 341#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}" 342 343#undef LIB_DEFAULT_SPEC 344#define LIB_DEFAULT_SPEC "%(lib_linux)" 345 346#undef STARTFILE_DEFAULT_SPEC 347#define STARTFILE_DEFAULT_SPEC "%(startfile_linux)" 348 349#undef ENDFILE_DEFAULT_SPEC 350#define ENDFILE_DEFAULT_SPEC "%(endfile_linux)" 351 352#undef LINK_START_DEFAULT_SPEC 353#define LINK_START_DEFAULT_SPEC "%(link_start_linux)" 354 355#undef LINK_OS_DEFAULT_SPEC 356#define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" 357 358#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \ 359 %{rdynamic:-export-dynamic} \ 360 %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" 361 362#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \ 363 %{rdynamic:-export-dynamic} \ 364 %{!dynamic-linker:-dynamic-linker /lib64/ld64.so.1}}}" 365 366#undef TOC_SECTION_ASM_OP 367#define TOC_SECTION_ASM_OP \ 368 (TARGET_64BIT \ 369 ? "\t.section\t\".toc\",\"aw\"" \ 370 : "\t.section\t\".got\",\"aw\"") 371 372#undef MINIMAL_TOC_SECTION_ASM_OP 373#define MINIMAL_TOC_SECTION_ASM_OP \ 374 (TARGET_64BIT \ 375 ? "\t.section\t\".toc1\",\"aw\"" \ 376 : ((TARGET_RELOCATABLE || flag_pic) \ 377 ? "\t.section\t\".got2\",\"aw\"" \ 378 : "\t.section\t\".got1\",\"aw\"")) 379 380#undef TARGET_VERSION 381#define TARGET_VERSION fprintf (stderr, " (PowerPC64 GNU/Linux)"); 382 383/* Must be at least as big as our pointer type. */ 384#undef SIZE_TYPE 385#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") 386 387#undef PTRDIFF_TYPE 388#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") 389 390#undef WCHAR_TYPE 391#define WCHAR_TYPE (TARGET_64BIT ? "int" : "long int") 392#undef WCHAR_TYPE_SIZE 393#define WCHAR_TYPE_SIZE 32 394 395/* Override rs6000.h definition. */ 396#undef ASM_APP_ON 397#define ASM_APP_ON "#APP\n" 398 399/* Override rs6000.h definition. */ 400#undef ASM_APP_OFF 401#define ASM_APP_OFF "#NO_APP\n" 402 403/* PowerPC no-op instruction. */ 404#undef RS6000_CALL_GLUE 405#define RS6000_CALL_GLUE (TARGET_64BIT ? "nop" : "cror 31,31,31") 406 407#undef RS6000_MCOUNT 408#define RS6000_MCOUNT "_mcount" 409 410#ifdef __powerpc64__ 411/* _init and _fini functions are built from bits spread across many 412 object files, each potentially with a different TOC pointer. For 413 that reason, place a nop after the call so that the linker can 414 restore the TOC pointer if a TOC adjusting call stub is needed. */ 415#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ 416 asm (SECTION_OP "\n" \ 417" bl ." #FUNC "\n" \ 418" nop\n" \ 419" .previous"); 420#endif 421 422/* FP save and restore routines. */ 423#undef SAVE_FP_PREFIX 424#define SAVE_FP_PREFIX (TARGET_64BIT ? "._savef" : "_savefpr_") 425#undef SAVE_FP_SUFFIX 426#define SAVE_FP_SUFFIX (TARGET_64BIT ? "" : "_l") 427#undef RESTORE_FP_PREFIX 428#define RESTORE_FP_PREFIX (TARGET_64BIT ? "._restf" : "_restfpr_") 429#undef RESTORE_FP_SUFFIX 430#define RESTORE_FP_SUFFIX (TARGET_64BIT ? "" : "_l") 431 432/* Dwarf2 debugging. */ 433#undef PREFERRED_DEBUGGING_TYPE 434#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 435 436/* This is how to declare the size of a function. */ 437#undef ASM_DECLARE_FUNCTION_SIZE 438#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ 439 do \ 440 { \ 441 if (!flag_inhibit_size_directive) \ 442 { \ 443 fputs ("\t.size\t", (FILE)); \ 444 if (TARGET_64BIT) \ 445 putc ('.', (FILE)); \ 446 assemble_name ((FILE), (FNAME)); \ 447 fputs (",.-", (FILE)); \ 448 if (TARGET_64BIT) \ 449 putc ('.', (FILE)); \ 450 assemble_name ((FILE), (FNAME)); \ 451 putc ('\n', (FILE)); \ 452 } \ 453 } \ 454 while (0) 455 456/* Return nonzero if this entry is to be written into the constant 457 pool in a special way. We do so if this is a SYMBOL_REF, LABEL_REF 458 or a CONST containing one of them. If -mfp-in-toc (the default), 459 we also do this for floating-point constants. We actually can only 460 do this if the FP formats of the target and host machines are the 461 same, but we can't check that since not every file that uses 462 GO_IF_LEGITIMATE_ADDRESS_P includes real.h. We also do this when 463 we can write the entry into the TOC and the entry is not larger 464 than a TOC entry. */ 465 466#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P 467#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ 468 (TARGET_TOC \ 469 && (GET_CODE (X) == SYMBOL_REF \ 470 || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \ 471 && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \ 472 || GET_CODE (X) == LABEL_REF \ 473 || (GET_CODE (X) == CONST_INT \ 474 && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ 475 || (GET_CODE (X) == CONST_DOUBLE \ 476 && ((TARGET_64BIT \ 477 && (TARGET_POWERPC64 \ 478 || TARGET_MINIMAL_TOC \ 479 || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 480 && ! TARGET_NO_FP_IN_TOC))) \ 481 || (!TARGET_64BIT \ 482 && !TARGET_NO_FP_IN_TOC \ 483 && !TARGET_RELOCATABLE \ 484 && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 485 && BITS_PER_WORD == HOST_BITS_PER_INT))))) 486 487/* This is the same as the dbxelf.h version, except that we need to 488 use the function code label, not the function descriptor. */ 489#undef ASM_OUTPUT_SOURCE_LINE 490#define ASM_OUTPUT_SOURCE_LINE(FILE, LINE, COUNTER) \ 491do \ 492 { \ 493 char temp[256]; \ 494 ASM_GENERATE_INTERNAL_LABEL (temp, "LM", COUNTER); \ 495 fprintf (FILE, "\t.stabn 68,0,%d,", LINE); \ 496 assemble_name (FILE, temp); \ 497 putc ('-', FILE); \ 498 if (TARGET_64BIT) \ 499 putc ('.', FILE); \ 500 assemble_name (FILE, \ 501 XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ 502 putc ('\n', FILE); \ 503 (*targetm.asm_out.internal_label) (FILE, "LM", COUNTER); \ 504 } \ 505while (0) 506 507/* Similarly, we want the function code label here. */ 508#define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \ 509 do \ 510 { \ 511 const char *flab; \ 512 fprintf (FILE, "%s%d,0,0,", ASM_STABN_OP, BRAC); \ 513 assemble_name (FILE, NAME); \ 514 putc ('-', FILE); \ 515 if (current_function_func_begin_label != NULL_TREE) \ 516 flab = IDENTIFIER_POINTER (current_function_func_begin_label); \ 517 else \ 518 { \ 519 if (TARGET_64BIT) \ 520 putc ('.', FILE); \ 521 flab = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \ 522 } \ 523 assemble_name (FILE, flab); \ 524 putc ('\n', FILE); \ 525 } \ 526 while (0) 527 528#define DBX_OUTPUT_LBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_LBRAC) 529#define DBX_OUTPUT_RBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_RBRAC) 530 531/* Another case where we want the dot name. */ 532#define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \ 533 do \ 534 { \ 535 fprintf (FILE, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN); \ 536 assemble_name (FILE, LSCOPE); \ 537 putc ('-', FILE); \ 538 if (TARGET_64BIT) \ 539 putc ('.', FILE); \ 540 assemble_name (FILE, XSTR (XEXP (DECL_RTL (DECL), 0), 0)); \ 541 putc ('\n', FILE); \ 542 } \ 543 while (0) 544 545/* Select a format to encode pointers in exception handling data. CODE 546 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is 547 true if the symbol may be affected by dynamic relocations. */ 548#undef ASM_PREFERRED_EH_DATA_FORMAT 549#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ 550 ((TARGET_64BIT || flag_pic || TARGET_RELOCATABLE) \ 551 ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel \ 552 | (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4)) \ 553 : DW_EH_PE_absptr) 554 555/* For backward compatibility, we must continue to use the AIX 556 structure return convention. */ 557#undef DRAFT_V4_STRUCT_RET 558#define DRAFT_V4_STRUCT_RET (!TARGET_64BIT) 559 560#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack 561 562#define TARGET_HAS_F_SETLKW 563 564#define LINK_GCC_C_SEQUENCE_SPEC \ 565 "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" 566 567#ifdef IN_LIBGCC2 568#include "config/rs6000/linux-unwind.h" 569#endif 570