110d565efSmrg /* Target definitions for GNU compiler for PowerPC running System V.4 2*ec02198aSmrg Copyright (C) 1995-2020 Free Software Foundation, Inc. 310d565efSmrg Contributed by Cygnus Support. 410d565efSmrg 510d565efSmrg This file is part of GCC. 610d565efSmrg 710d565efSmrg GCC is free software; you can redistribute it and/or modify it 810d565efSmrg under the terms of the GNU General Public License as published 910d565efSmrg by the Free Software Foundation; either version 3, or (at your 1010d565efSmrg option) any later version. 1110d565efSmrg 1210d565efSmrg GCC is distributed in the hope that it will be useful, but WITHOUT 1310d565efSmrg ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 1410d565efSmrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 1510d565efSmrg License for more details. 1610d565efSmrg 1710d565efSmrg Under Section 7 of GPL version 3, you are granted additional 1810d565efSmrg permissions described in the GCC Runtime Library Exception, version 1910d565efSmrg 3.1, as published by the Free Software Foundation. 2010d565efSmrg 2110d565efSmrg You should have received a copy of the GNU General Public License and 2210d565efSmrg a copy of the GCC Runtime Library Exception along with this program; 2310d565efSmrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2410d565efSmrg <http://www.gnu.org/licenses/>. */ 2510d565efSmrg 260fc04c29Smrg #undef GNU_USER_TARGET_CRTI 270fc04c29Smrg #define GNU_USER_TARGET_CRTI "%{mnewlib:ecrti.o%s;:crti.o%s}" 280fc04c29Smrg #undef GNU_USER_TARGET_CRTN 290fc04c29Smrg #define GNU_USER_TARGET_CRTN "%{mnewlib:ecrtn.o%s;:crtn.o%s}" 3010d565efSmrg 3110d565efSmrg /* Yes! We are ELF. */ 3210d565efSmrg #define TARGET_OBJECT_FORMAT OBJECT_ELF 3310d565efSmrg 3410d565efSmrg /* Default ABI to compile code for. */ 3510d565efSmrg #define DEFAULT_ABI rs6000_current_abi 3610d565efSmrg 3710d565efSmrg /* Default ABI to use. */ 3810d565efSmrg #define RS6000_ABI_NAME "sysv" 3910d565efSmrg 4010d565efSmrg /* Override rs6000.h definition. */ 4110d565efSmrg #undef ASM_DEFAULT_SPEC 42*ec02198aSmrg #define ASM_DEFAULT_SPEC "-mppc%{m64:64}" 4310d565efSmrg 44*ec02198aSmrg #define TARGET_HAS_TOC (TARGET_64BIT \ 4510d565efSmrg || (TARGET_MINIMAL_TOC \ 4610d565efSmrg && flag_pic > 1) \ 4710d565efSmrg || DEFAULT_ABI != ABI_V4) 4810d565efSmrg 4910d565efSmrg #define TARGET_BITFIELD_TYPE (! TARGET_NO_BITFIELD_TYPE) 5010d565efSmrg #define TARGET_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN) 5110d565efSmrg #define TARGET_PROTOTYPE target_prototype 5210d565efSmrg #define TARGET_NO_PROTOTYPE (! TARGET_PROTOTYPE) 5310d565efSmrg #define TARGET_NO_EABI (! TARGET_EABI) 5410d565efSmrg #define TARGET_REGNAMES rs6000_regnames 5510d565efSmrg 5610d565efSmrg #ifdef HAVE_AS_REL16 5710d565efSmrg #undef TARGET_SECURE_PLT 5810d565efSmrg #define TARGET_SECURE_PLT secure_plt 5910d565efSmrg #endif 6010d565efSmrg 610fc04c29Smrg #if HAVE_AS_PLTSEQ 620fc04c29Smrg #undef TARGET_PLTSEQ 630fc04c29Smrg #define TARGET_PLTSEQ rs6000_pltseq 640fc04c29Smrg #endif 650fc04c29Smrg 6610d565efSmrg #define SDATA_DEFAULT_SIZE 8 6710d565efSmrg 6810d565efSmrg /* The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to 6910d565efSmrg get control in TARGET_OPTION_OVERRIDE. */ 7010d565efSmrg 7110d565efSmrg #define SUBTARGET_OVERRIDE_OPTIONS \ 7210d565efSmrg do { \ 7310d565efSmrg if (!global_options_set.x_g_switch_value) \ 7410d565efSmrg g_switch_value = SDATA_DEFAULT_SIZE; \ 7510d565efSmrg \ 7610d565efSmrg if (rs6000_abi_name == NULL) \ 7710d565efSmrg rs6000_abi_name = RS6000_ABI_NAME; \ 7810d565efSmrg \ 7910d565efSmrg if (!strcmp (rs6000_abi_name, "sysv")) \ 8010d565efSmrg rs6000_current_abi = ABI_V4; \ 8110d565efSmrg else if (!strcmp (rs6000_abi_name, "sysv-noeabi")) \ 8210d565efSmrg { \ 8310d565efSmrg rs6000_current_abi = ABI_V4; \ 8410d565efSmrg rs6000_isa_flags &= ~ OPTION_MASK_EABI; \ 8510d565efSmrg } \ 8610d565efSmrg else if (!strcmp (rs6000_abi_name, "sysv-eabi") \ 8710d565efSmrg || !strcmp (rs6000_abi_name, "eabi")) \ 8810d565efSmrg { \ 8910d565efSmrg rs6000_current_abi = ABI_V4; \ 9010d565efSmrg rs6000_isa_flags |= OPTION_MASK_EABI; \ 9110d565efSmrg } \ 9210d565efSmrg else if (!strcmp (rs6000_abi_name, "aixdesc")) \ 9310d565efSmrg rs6000_current_abi = ABI_AIX; \ 9410d565efSmrg else if (!strcmp (rs6000_abi_name, "freebsd") \ 9510d565efSmrg || !strcmp (rs6000_abi_name, "netbsd") \ 9610d565efSmrg || !strcmp (rs6000_abi_name, "linux")) \ 9710d565efSmrg { \ 9810d565efSmrg if (TARGET_64BIT) \ 9910d565efSmrg rs6000_current_abi = ABI_AIX; \ 10010d565efSmrg else \ 10110d565efSmrg rs6000_current_abi = ABI_V4; \ 10210d565efSmrg } \ 10310d565efSmrg else if (!strcmp (rs6000_abi_name, "openbsd")) \ 10410d565efSmrg rs6000_current_abi = ABI_V4; \ 10510d565efSmrg else if (!strcmp (rs6000_abi_name, "i960-old")) \ 10610d565efSmrg { \ 10710d565efSmrg rs6000_current_abi = ABI_V4; \ 10810d565efSmrg rs6000_isa_flags |= (OPTION_MASK_LITTLE_ENDIAN | OPTION_MASK_EABI); \ 10910d565efSmrg rs6000_isa_flags &= ~OPTION_MASK_STRICT_ALIGN; \ 11010d565efSmrg TARGET_NO_BITFIELD_WORD = 1; \ 11110d565efSmrg } \ 11210d565efSmrg else \ 11310d565efSmrg { \ 11410d565efSmrg rs6000_current_abi = ABI_V4; \ 115c7a68eb7Smrg error ("bad value for %<%s-%s%>", "-mcall", rs6000_abi_name); \ 11610d565efSmrg } \ 11710d565efSmrg \ 11810d565efSmrg if (rs6000_sdata_name) \ 11910d565efSmrg { \ 12010d565efSmrg if (!strcmp (rs6000_sdata_name, "none")) \ 12110d565efSmrg rs6000_sdata = SDATA_NONE; \ 12210d565efSmrg else if (!strcmp (rs6000_sdata_name, "data")) \ 12310d565efSmrg rs6000_sdata = SDATA_DATA; \ 12410d565efSmrg else if (!strcmp (rs6000_sdata_name, "default")) \ 12510d565efSmrg rs6000_sdata = (TARGET_EABI) ? SDATA_EABI : SDATA_SYSV; \ 12610d565efSmrg else if (!strcmp (rs6000_sdata_name, "sysv")) \ 12710d565efSmrg rs6000_sdata = SDATA_SYSV; \ 12810d565efSmrg else if (!strcmp (rs6000_sdata_name, "eabi")) \ 12910d565efSmrg rs6000_sdata = SDATA_EABI; \ 13010d565efSmrg else \ 131c7a68eb7Smrg error ("bad value for %<%s=%s%>", "-msdata", rs6000_sdata_name);\ 13210d565efSmrg } \ 13310d565efSmrg else if (DEFAULT_ABI == ABI_V4) \ 13410d565efSmrg { \ 13510d565efSmrg rs6000_sdata = SDATA_DATA; \ 13610d565efSmrg rs6000_sdata_name = "data"; \ 13710d565efSmrg } \ 13810d565efSmrg else \ 13910d565efSmrg { \ 14010d565efSmrg rs6000_sdata = SDATA_NONE; \ 14110d565efSmrg rs6000_sdata_name = "none"; \ 14210d565efSmrg } \ 14310d565efSmrg \ 14410d565efSmrg if (TARGET_RELOCATABLE && \ 14510d565efSmrg (rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \ 14610d565efSmrg { \ 14710d565efSmrg rs6000_sdata = SDATA_DATA; \ 148c7a68eb7Smrg error ("%qs and %<%s=%s%> are incompatible", rs6000_sdata_name, \ 149c7a68eb7Smrg "-mrelocatable", "-msdata"); \ 15010d565efSmrg } \ 15110d565efSmrg \ 15210d565efSmrg else if (flag_pic && DEFAULT_ABI == ABI_V4 \ 15310d565efSmrg && (rs6000_sdata == SDATA_EABI \ 15410d565efSmrg || rs6000_sdata == SDATA_SYSV)) \ 15510d565efSmrg { \ 15610d565efSmrg rs6000_sdata = SDATA_DATA; \ 157c7a68eb7Smrg error ("%<-f%s%> and %<%s=%s%> are incompatible", \ 15810d565efSmrg (flag_pic > 1) ? "PIC" : "pic", \ 159c7a68eb7Smrg "-msdata", rs6000_sdata_name); \ 16010d565efSmrg } \ 16110d565efSmrg \ 16210d565efSmrg if ((rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4) \ 16310d565efSmrg || (rs6000_sdata == SDATA_EABI && !TARGET_EABI)) \ 16410d565efSmrg { \ 16510d565efSmrg rs6000_sdata = SDATA_NONE; \ 166c7a68eb7Smrg error ("%<%s=%s%> and %<%s-%s%> are incompatible", \ 167c7a68eb7Smrg "-msdata", rs6000_sdata_name, "-mcall", rs6000_abi_name); \ 16810d565efSmrg } \ 16910d565efSmrg \ 17010d565efSmrg targetm.have_srodata_section = rs6000_sdata == SDATA_EABI; \ 17110d565efSmrg \ 17210d565efSmrg if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ 17310d565efSmrg { \ 17410d565efSmrg rs6000_isa_flags |= OPTION_MASK_MINIMAL_TOC; \ 175c7a68eb7Smrg error ("%qs and %qs are incompatible", "-mrelocatable", \ 176c7a68eb7Smrg "-mno-minimal-toc"); \ 17710d565efSmrg } \ 17810d565efSmrg \ 17910d565efSmrg if (TARGET_RELOCATABLE && rs6000_current_abi != ABI_V4) \ 18010d565efSmrg { \ 18110d565efSmrg rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \ 182c7a68eb7Smrg error ("%qs and %<%s-%s%> are incompatible", \ 183c7a68eb7Smrg "-mrelocatable", "-mcall", rs6000_abi_name); \ 18410d565efSmrg } \ 18510d565efSmrg \ 18610d565efSmrg if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi != ABI_V4) \ 18710d565efSmrg { \ 18810d565efSmrg flag_pic = 0; \ 189c7a68eb7Smrg error ("%qs and %<%s-%s%> are incompatible", \ 190c7a68eb7Smrg "-fPIC", "-mcall", rs6000_abi_name); \ 19110d565efSmrg } \ 19210d565efSmrg \ 19310d565efSmrg if (TARGET_SECURE_PLT != secure_plt) \ 19410d565efSmrg { \ 195c7a68eb7Smrg error ("%qs not supported by your assembler", "-msecure-plt"); \ 19610d565efSmrg } \ 19710d565efSmrg \ 1980fc04c29Smrg if (TARGET_PLTSEQ != rs6000_pltseq \ 1990fc04c29Smrg && global_options_set.x_rs6000_pltseq) \ 2000fc04c29Smrg { \ 2010fc04c29Smrg error ("%qs not supported by your assembler", "-mpltseq"); \ 2020fc04c29Smrg } \ 2030fc04c29Smrg \ 2040fc04c29Smrg if (DEFAULT_ABI == ABI_V4 && TARGET_PLTSEQ && !TARGET_SECURE_PLT) \ 2050fc04c29Smrg { \ 2060fc04c29Smrg if (global_options_set.x_rs6000_pltseq) \ 2070fc04c29Smrg { \ 2080fc04c29Smrg if (global_options_set.x_secure_plt) \ 2090fc04c29Smrg error ("%qs and %qs are incompatible", \ 2100fc04c29Smrg "-mpltseq", "-mbss-plt"); \ 2110fc04c29Smrg else \ 2120fc04c29Smrg secure_plt = true; \ 2130fc04c29Smrg } \ 2140fc04c29Smrg if (!TARGET_SECURE_PLT) \ 2150fc04c29Smrg rs6000_pltseq = false; \ 2160fc04c29Smrg } \ 2170fc04c29Smrg \ 21810d565efSmrg if (flag_pic > 1 && DEFAULT_ABI == ABI_V4) \ 21910d565efSmrg { \ 22010d565efSmrg /* Note: flag_pic should not change any option flags that would \ 22110d565efSmrg be invalid with or pessimise -fno-PIC code. LTO turns off \ 22210d565efSmrg flag_pic when linking/recompiling a fixed position executable. \ 22310d565efSmrg However, if the objects were originally compiled with -fPIC, \ 22410d565efSmrg then other target options forced on here by -fPIC are restored \ 22510d565efSmrg when recompiling those objects without -fPIC. In particular \ 22610d565efSmrg TARGET_RELOCATABLE must not be enabled here by flag_pic. */ \ 22710d565efSmrg rs6000_isa_flags |= OPTION_MASK_MINIMAL_TOC; \ 22810d565efSmrg TARGET_NO_FP_IN_TOC = 1; \ 22910d565efSmrg } \ 23010d565efSmrg \ 23110d565efSmrg if (TARGET_RELOCATABLE) \ 23210d565efSmrg { \ 23310d565efSmrg if (!flag_pic) \ 23410d565efSmrg flag_pic = 2; \ 23510d565efSmrg TARGET_NO_FP_IN_TOC = 1; \ 23610d565efSmrg } \ 23710d565efSmrg } while (0) 23810d565efSmrg 23910d565efSmrg #ifndef RS6000_BI_ARCH 24010d565efSmrg # define SUBSUBTARGET_OVERRIDE_OPTIONS \ 24110d565efSmrg do { \ 24210d565efSmrg if ((TARGET_DEFAULT ^ rs6000_isa_flags) & OPTION_MASK_64BIT) \ 243c7a68eb7Smrg error ("%<-m%s%> not supported in this configuration", \ 24410d565efSmrg (rs6000_isa_flags & OPTION_MASK_64BIT) ? "64" : "32"); \ 24510d565efSmrg } while (0) 24610d565efSmrg #endif 24710d565efSmrg 24810d565efSmrg /* Override rs6000.h definition. */ 24910d565efSmrg #undef TARGET_DEFAULT 25010d565efSmrg #define TARGET_DEFAULT 0 25110d565efSmrg 25210d565efSmrg /* Override rs6000.h definition. */ 25310d565efSmrg #undef PROCESSOR_DEFAULT 25410d565efSmrg #define PROCESSOR_DEFAULT PROCESSOR_PPC750 25510d565efSmrg 25610d565efSmrg #define FIXED_R2 1 25710d565efSmrg /* System V.4 uses register 13 as a pointer to the small data area, 25810d565efSmrg so it is not available to the normal user. */ 25910d565efSmrg #define FIXED_R13 1 26010d565efSmrg 26110d565efSmrg /* Override default big endianism definitions in rs6000.h. */ 26210d565efSmrg #undef BYTES_BIG_ENDIAN 26310d565efSmrg #undef WORDS_BIG_ENDIAN 26410d565efSmrg #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN) 26510d565efSmrg #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) 26610d565efSmrg 26710d565efSmrg /* Put jump tables in read-only memory, rather than in .text. */ 26810d565efSmrg #define JUMP_TABLES_IN_TEXT_SECTION 0 26910d565efSmrg 27010d565efSmrg /* Prefix and suffix to use to saving floating point. */ 27110d565efSmrg #define SAVE_FP_PREFIX "_savefpr_" 27210d565efSmrg #define SAVE_FP_SUFFIX "" 27310d565efSmrg 27410d565efSmrg /* Prefix and suffix to use to restoring floating point. */ 27510d565efSmrg #define RESTORE_FP_PREFIX "_restfpr_" 27610d565efSmrg #define RESTORE_FP_SUFFIX "" 27710d565efSmrg 27810d565efSmrg /* Type used for size_t, as a string used in a declaration. */ 27910d565efSmrg #undef SIZE_TYPE 28010d565efSmrg #define SIZE_TYPE "unsigned int" 28110d565efSmrg 28210d565efSmrg /* Type used for ptrdiff_t, as a string used in a declaration. */ 28310d565efSmrg #define PTRDIFF_TYPE "int" 28410d565efSmrg 28510d565efSmrg #undef WCHAR_TYPE 28610d565efSmrg #define WCHAR_TYPE "long int" 28710d565efSmrg 28810d565efSmrg #undef WCHAR_TYPE_SIZE 28910d565efSmrg #define WCHAR_TYPE_SIZE 32 29010d565efSmrg 29110d565efSmrg /* Make int foo : 8 not cause structures to be aligned to an int boundary. */ 29210d565efSmrg /* Override elfos.h definition. */ 29310d565efSmrg #undef PCC_BITFIELD_TYPE_MATTERS 29410d565efSmrg #define PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE) 29510d565efSmrg 29610d565efSmrg #undef BITFIELD_NBYTES_LIMITED 29710d565efSmrg #define BITFIELD_NBYTES_LIMITED (TARGET_NO_BITFIELD_WORD) 29810d565efSmrg 29910d565efSmrg /* Define this macro to be the value 1 if instructions will fail to 30010d565efSmrg work if given data not on the nominal alignment. If instructions 30110d565efSmrg will merely go slower in that case, define this macro as 0. */ 30210d565efSmrg #undef STRICT_ALIGNMENT 30310d565efSmrg #define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN) 30410d565efSmrg 30510d565efSmrg /* Define this macro if you wish to preserve a certain alignment for 30610d565efSmrg the stack pointer, greater than what the hardware enforces. The 30710d565efSmrg definition is a C expression for the desired alignment (measured 30810d565efSmrg in bits). This macro must evaluate to a value equal to or larger 30910d565efSmrg than STACK_BOUNDARY. 31010d565efSmrg For the SYSV ABI and variants the alignment of the stack pointer 31110d565efSmrg is usually controlled manually in rs6000.c. However, to maintain 31210d565efSmrg alignment across alloca () in all circumstances, 31310d565efSmrg PREFERRED_STACK_BOUNDARY needs to be set as well. 31410d565efSmrg This has the additional advantage of allowing a bigger maximum 31510d565efSmrg alignment of user objects on the stack. */ 31610d565efSmrg 31710d565efSmrg #undef PREFERRED_STACK_BOUNDARY 31810d565efSmrg #define PREFERRED_STACK_BOUNDARY 128 31910d565efSmrg 32010d565efSmrg /* Real stack boundary as mandated by the appropriate ABI. */ 32110d565efSmrg #define ABI_STACK_BOUNDARY \ 32210d565efSmrg ((TARGET_EABI && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128) 32310d565efSmrg 32410d565efSmrg /* An expression for the alignment of a structure field FIELD if the 32510d565efSmrg alignment computed in the usual way is COMPUTED. */ 32610d565efSmrg #define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ 32710d565efSmrg (rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \ 32810d565efSmrg ? 128 : COMPUTED) 32910d565efSmrg 33010d565efSmrg #undef BIGGEST_FIELD_ALIGNMENT 33110d565efSmrg 33210d565efSmrg /* Use ELF style section commands. */ 33310d565efSmrg 33410d565efSmrg #define TEXT_SECTION_ASM_OP "\t.section\t\".text\"" 33510d565efSmrg 33610d565efSmrg #define DATA_SECTION_ASM_OP "\t.section\t\".data\"" 33710d565efSmrg 33810d565efSmrg #define BSS_SECTION_ASM_OP "\t.section\t\".bss\"" 33910d565efSmrg 34010d565efSmrg /* Override elfos.h definition. */ 34110d565efSmrg #undef INIT_SECTION_ASM_OP 34210d565efSmrg #define INIT_SECTION_ASM_OP "\t.section\t\".init\",\"ax\"" 34310d565efSmrg 34410d565efSmrg /* Override elfos.h definition. */ 34510d565efSmrg #undef FINI_SECTION_ASM_OP 34610d565efSmrg #define FINI_SECTION_ASM_OP "\t.section\t\".fini\",\"ax\"" 34710d565efSmrg 34810d565efSmrg #define TOC_SECTION_ASM_OP "\t.section\t\".got\",\"aw\"" 34910d565efSmrg 35010d565efSmrg /* Put PC relative got entries in .got2. */ 35110d565efSmrg #define MINIMAL_TOC_SECTION_ASM_OP \ 35210d565efSmrg (flag_pic ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") 35310d565efSmrg 35410d565efSmrg #define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\"" 35510d565efSmrg #define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\"" 35610d565efSmrg #define SBSS_SECTION_ASM_OP "\t.section\t\".sbss\",\"aw\",@nobits" 35710d565efSmrg 35810d565efSmrg /* Override default elf definitions. */ 35910d565efSmrg #define TARGET_ASM_INIT_SECTIONS rs6000_elf_asm_init_sections 36010d565efSmrg #undef TARGET_ASM_RELOC_RW_MASK 36110d565efSmrg #define TARGET_ASM_RELOC_RW_MASK rs6000_elf_reloc_rw_mask 36210d565efSmrg #undef TARGET_ASM_SELECT_RTX_SECTION 36310d565efSmrg #define TARGET_ASM_SELECT_RTX_SECTION rs6000_elf_select_rtx_section 36410d565efSmrg 36510d565efSmrg /* Return nonzero if this entry is to be written into the constant pool 36610d565efSmrg in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST 36710d565efSmrg containing one of them. If -mfp-in-toc (the default), we also do 36810d565efSmrg this for floating-point constants. We actually can only do this 36910d565efSmrg if the FP formats of the target and host machines are the same, but 37010d565efSmrg we can't check that since not every file that uses these target macros 37110d565efSmrg includes real.h. 37210d565efSmrg 37310d565efSmrg Unlike AIX, we don't key off of -mminimal-toc, but instead do not 37410d565efSmrg allow floating point constants in the TOC if -mrelocatable. */ 37510d565efSmrg 37610d565efSmrg #undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P 37710d565efSmrg #define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ 37810d565efSmrg (TARGET_TOC \ 3790fc04c29Smrg && (SYMBOL_REF_P (X) \ 38010d565efSmrg || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \ 3810fc04c29Smrg && SYMBOL_REF_P (XEXP (XEXP (X, 0), 0))) \ 38210d565efSmrg || GET_CODE (X) == LABEL_REF \ 3830fc04c29Smrg || (CONST_INT_P (X) \ 38410d565efSmrg && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ 38510d565efSmrg || (!TARGET_NO_FP_IN_TOC \ 3860fc04c29Smrg && CONST_DOUBLE_P (X) \ 38710d565efSmrg && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ 38810d565efSmrg && BITS_PER_WORD == HOST_BITS_PER_INT))) 38910d565efSmrg 39010d565efSmrg /* These macros generate the special .type and .size directives which 39110d565efSmrg are used to set the corresponding fields of the linker symbol table 39210d565efSmrg entries in an ELF object file under SVR4. These macros also output 39310d565efSmrg the starting labels for the relevant functions/objects. */ 39410d565efSmrg 39510d565efSmrg /* Write the extra assembler code needed to declare a function properly. 39610d565efSmrg Some svr4 assemblers need to also have something extra said about the 39710d565efSmrg function's return value. We allow for that here. */ 39810d565efSmrg 39910d565efSmrg /* Override elfos.h definition. */ 40010d565efSmrg #undef ASM_DECLARE_FUNCTION_NAME 40110d565efSmrg #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 40210d565efSmrg rs6000_elf_declare_function_name ((FILE), (NAME), (DECL)) 40310d565efSmrg 40410d565efSmrg /* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore 40510d565efSmrg flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ 40610d565efSmrg 40710d565efSmrg #define LOCAL_LABEL_PREFIX "." 40810d565efSmrg #define USER_LABEL_PREFIX "" 40910d565efSmrg 41010d565efSmrg #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ 41110d565efSmrg asm_fprintf (FILE, "%L%s", PREFIX) 41210d565efSmrg 41310d565efSmrg /* Globalizing directive for a label. */ 41410d565efSmrg #define GLOBAL_ASM_OP "\t.globl " 41510d565efSmrg 41610d565efSmrg /* This says how to output assembler code to declare an 41710d565efSmrg uninitialized internal linkage data object. Under SVR4, 41810d565efSmrg the linker seems to want the alignment of data objects 41910d565efSmrg to depend on their types. We do exactly that here. */ 42010d565efSmrg 42110d565efSmrg #define LOCAL_ASM_OP "\t.local\t" 42210d565efSmrg 42310d565efSmrg #define LCOMM_ASM_OP "\t.lcomm\t" 42410d565efSmrg 42510d565efSmrg /* Describe how to emit uninitialized local items. */ 42610d565efSmrg #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ 42710d565efSmrg do { \ 42810d565efSmrg if ((DECL) && rs6000_elf_in_small_data_p (DECL)) \ 42910d565efSmrg { \ 43010d565efSmrg switch_to_section (sbss_section); \ 43110d565efSmrg ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \ 43210d565efSmrg ASM_OUTPUT_LABEL (FILE, NAME); \ 43310d565efSmrg ASM_OUTPUT_SKIP (FILE, SIZE); \ 43410d565efSmrg if (!flag_inhibit_size_directive && (SIZE) > 0) \ 43510d565efSmrg ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ 43610d565efSmrg } \ 43710d565efSmrg else \ 43810d565efSmrg { \ 43910d565efSmrg fprintf (FILE, "%s", LCOMM_ASM_OP); \ 44010d565efSmrg assemble_name ((FILE), (NAME)); \ 44110d565efSmrg fprintf ((FILE), "," HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ 44210d565efSmrg (SIZE), (ALIGN) / BITS_PER_UNIT); \ 44310d565efSmrg } \ 44410d565efSmrg ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ 44510d565efSmrg } while (0) 44610d565efSmrg 44710d565efSmrg /* Describe how to emit uninitialized external linkage items. */ 44810d565efSmrg #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ 44910d565efSmrg do { \ 45010d565efSmrg ASM_OUTPUT_ALIGNED_DECL_LOCAL (FILE, DECL, NAME, SIZE, ALIGN); \ 45110d565efSmrg } while (0) 45210d565efSmrg 45310d565efSmrg #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 45410d565efSmrg /* To support -falign-* switches we need to use .p2align so 45510d565efSmrg that alignment directives in code sections will be padded 45610d565efSmrg with no-op instructions, rather than zeroes. */ 45710d565efSmrg #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 45810d565efSmrg if ((LOG) != 0) \ 45910d565efSmrg { \ 46010d565efSmrg if ((MAX_SKIP) == 0) \ 46110d565efSmrg fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 46210d565efSmrg else \ 46310d565efSmrg fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 46410d565efSmrg } 46510d565efSmrg #endif 46610d565efSmrg 46710d565efSmrg /* This is how to output code to push a register on the stack. 46810d565efSmrg It need not be very fast code. 46910d565efSmrg 47010d565efSmrg On the rs6000, we must keep the backchain up to date. In order 47110d565efSmrg to simplify things, always allocate 16 bytes for a push (System V 47210d565efSmrg wants to keep stack aligned to a 16 byte boundary). */ 47310d565efSmrg 47410d565efSmrg #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ 47510d565efSmrg do { \ 47610d565efSmrg if (DEFAULT_ABI == ABI_V4) \ 47710d565efSmrg asm_fprintf (FILE, \ 47810d565efSmrg "\tstwu %s,-16(%s)\n\tstw %s,12(%s)\n", \ 47910d565efSmrg reg_names[1], reg_names[1], reg_names[REGNO], \ 48010d565efSmrg reg_names[1]); \ 48110d565efSmrg } while (0) 48210d565efSmrg 48310d565efSmrg /* This is how to output an insn to pop a register from the stack. 48410d565efSmrg It need not be very fast code. */ 48510d565efSmrg 48610d565efSmrg #define ASM_OUTPUT_REG_POP(FILE, REGNO) \ 48710d565efSmrg do { \ 48810d565efSmrg if (DEFAULT_ABI == ABI_V4) \ 48910d565efSmrg asm_fprintf (FILE, \ 49010d565efSmrg "\tlwz %s,12(%s)\n\taddi %s,%s,16\n", \ 49110d565efSmrg reg_names[REGNO], reg_names[1], reg_names[1], \ 49210d565efSmrg reg_names[1]); \ 49310d565efSmrg } while (0) 49410d565efSmrg 49510d565efSmrg extern int fixuplabelno; 49610d565efSmrg 49710d565efSmrg /* Handle constructors specially for -mrelocatable. */ 49810d565efSmrg #define TARGET_ASM_CONSTRUCTOR rs6000_elf_asm_out_constructor 49910d565efSmrg #define TARGET_ASM_DESTRUCTOR rs6000_elf_asm_out_destructor 50010d565efSmrg 50110d565efSmrg /* This is the end of what might become sysv4.h. */ 50210d565efSmrg 50310d565efSmrg /* Use DWARF 2 debugging information by default. */ 50410d565efSmrg #undef PREFERRED_DEBUGGING_TYPE 50510d565efSmrg #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 50610d565efSmrg 50710d565efSmrg /* Historically we have also supported stabs debugging. */ 50810d565efSmrg #define DBX_DEBUGGING_INFO 1 50910d565efSmrg 51010d565efSmrg #define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info 51110d565efSmrg #define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p 51210d565efSmrg 51310d565efSmrg /* The ELF version doesn't encode [DS] or whatever at the end of symbols. */ 51410d565efSmrg 51510d565efSmrg #define RS6000_OUTPUT_BASENAME(FILE, NAME) \ 51610d565efSmrg assemble_name (FILE, NAME) 51710d565efSmrg 51810d565efSmrg /* We have to output the stabs for the function name *first*, before 51910d565efSmrg outputting its label. */ 52010d565efSmrg 52110d565efSmrg #define DBX_FUNCTION_FIRST 52210d565efSmrg 52310d565efSmrg /* This is the end of what might become sysv4dbx.h. */ 52410d565efSmrg 52510d565efSmrg #define TARGET_OS_SYSV_CPP_BUILTINS() \ 52610d565efSmrg do \ 52710d565efSmrg { \ 52810d565efSmrg if (rs6000_isa_flags_explicit \ 52910d565efSmrg & OPTION_MASK_RELOCATABLE) \ 53010d565efSmrg builtin_define ("_RELOCATABLE"); \ 53110d565efSmrg } \ 53210d565efSmrg while (0) 53310d565efSmrg 53410d565efSmrg #ifndef TARGET_OS_CPP_BUILTINS 53510d565efSmrg #define TARGET_OS_CPP_BUILTINS() \ 53610d565efSmrg do \ 53710d565efSmrg { \ 53810d565efSmrg builtin_define_std ("PPC"); \ 53910d565efSmrg builtin_define_std ("unix"); \ 54010d565efSmrg builtin_define ("__svr4__"); \ 54110d565efSmrg builtin_assert ("system=unix"); \ 54210d565efSmrg builtin_assert ("system=svr4"); \ 54310d565efSmrg builtin_assert ("cpu=powerpc"); \ 54410d565efSmrg builtin_assert ("machine=powerpc"); \ 54510d565efSmrg TARGET_OS_SYSV_CPP_BUILTINS (); \ 54610d565efSmrg } \ 54710d565efSmrg while (0) 54810d565efSmrg #endif 54910d565efSmrg 55010d565efSmrg /* Select one of BIG_OPT, LITTLE_OPT or DEFAULT_OPT depending 55110d565efSmrg on various -mbig, -mlittle and -mcall- options. */ 55210d565efSmrg #define ENDIAN_SELECT(BIG_OPT, LITTLE_OPT, DEFAULT_OPT) \ 55310d565efSmrg "%{mlittle|mlittle-endian:" LITTLE_OPT ";" \ 55410d565efSmrg "mbig|mbig-endian:" BIG_OPT ";" \ 55510d565efSmrg "mcall-i960-old:" LITTLE_OPT ";" \ 55610d565efSmrg ":" DEFAULT_OPT "}" 55710d565efSmrg 55810d565efSmrg #define DEFAULT_ASM_ENDIAN " -mbig" 55910d565efSmrg 56010d565efSmrg #undef ASM_SPEC 56110d565efSmrg #define ASM_SPEC "%(asm_cpu) \ 56210d565efSmrg %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \ 56310d565efSmrg %{mrelocatable} %{mrelocatable-lib} %{" FPIE_OR_FPIC_SPEC ":-K PIC} \ 56410d565efSmrg %{memb|msdata=eabi: -memb}" \ 56510d565efSmrg ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) 56610d565efSmrg 56710d565efSmrg #ifndef CC1_SECURE_PLT_DEFAULT_SPEC 56810d565efSmrg #define CC1_SECURE_PLT_DEFAULT_SPEC "" 56910d565efSmrg #endif 57010d565efSmrg #ifndef LINK_SECURE_PLT_DEFAULT_SPEC 57110d565efSmrg #define LINK_SECURE_PLT_DEFAULT_SPEC "" 57210d565efSmrg #endif 57310d565efSmrg 57410d565efSmrg /* Pass -G xxx to the compiler. */ 57510d565efSmrg #undef CC1_SPEC 57610d565efSmrg #define CC1_SPEC "%{G*} %(cc1_cpu)" \ 57710d565efSmrg "%{meabi: %{!mcall-*: -mcall-sysv }} \ 57810d565efSmrg %{!meabi: %{!mno-eabi: \ 57910d565efSmrg %{mrelocatable: -meabi } \ 58010d565efSmrg %{mcall-freebsd: -mno-eabi } \ 58110d565efSmrg %{mcall-i960-old: -meabi } \ 58210d565efSmrg %{mcall-linux: -mno-eabi } \ 58310d565efSmrg %{mcall-netbsd: -mno-eabi } \ 58410d565efSmrg %{mcall-openbsd: -mno-eabi }}} \ 58510d565efSmrg %{msdata: -msdata=default} \ 58610d565efSmrg %{mno-sdata: -msdata=none} \ 58710d565efSmrg %{!mbss-plt: %{!msecure-plt: %(cc1_secure_plt_default)}} \ 5880fc04c29Smrg %(cc1_os_netbsd)" \ 5890fc04c29Smrg GNU_USER_TARGET_CC1_SPEC 59010d565efSmrg 59110d565efSmrg /* Default starting address if specified. */ 59210d565efSmrg #define LINK_START_SPEC "\ 59310d565efSmrg %{mads : %(link_start_ads) ; \ 59410d565efSmrg myellowknife : %(link_start_yellowknife) ; \ 59510d565efSmrg mmvme : %(link_start_mvme) ; \ 59610d565efSmrg msim : %(link_start_sim) ; \ 59710d565efSmrg mcall-freebsd: %(link_start_freebsd) ; \ 59810d565efSmrg mcall-linux : %(link_start_linux) ; \ 59910d565efSmrg mcall-netbsd : %(link_start_netbsd) ; \ 60010d565efSmrg mcall-openbsd: %(link_start_openbsd) ; \ 60110d565efSmrg : %(link_start_default) }" 60210d565efSmrg 60310d565efSmrg #define LINK_START_DEFAULT_SPEC "" 60410d565efSmrg #define LINK_SECURE_PLT_SPEC LINK_SECURE_PLT_DEFAULT_SPEC 60510d565efSmrg 60610d565efSmrg #undef LINK_SPEC 60710d565efSmrg #define LINK_SPEC "\ 60810d565efSmrg %{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} \ 60910d565efSmrg %{R*} \ 61010d565efSmrg %(link_shlib) \ 61110d565efSmrg %{!T*: %(link_start) } \ 61210d565efSmrg %{!static: %{!mbss-plt: %(link_secure_plt)}} \ 61310d565efSmrg %(link_os)" 61410d565efSmrg 61510d565efSmrg /* Shared libraries are not default. */ 61610d565efSmrg #define LINK_SHLIB_SPEC "\ 61710d565efSmrg %{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \ 61810d565efSmrg %{static: } \ 61910d565efSmrg %{shared:-G -dy -z text } \ 62010d565efSmrg %{symbolic:-Bsymbolic -G -dy -z text }" 62110d565efSmrg 62210d565efSmrg /* Any specific OS flags. */ 62310d565efSmrg #define LINK_OS_SPEC "\ 62410d565efSmrg %{mads : %(link_os_ads) ; \ 62510d565efSmrg myellowknife : %(link_os_yellowknife) ; \ 62610d565efSmrg mmvme : %(link_os_mvme) ; \ 62710d565efSmrg msim : %(link_os_sim) ; \ 62810d565efSmrg mcall-freebsd: %(link_os_freebsd) ; \ 62910d565efSmrg mcall-linux : %(link_os_linux) ; \ 63010d565efSmrg mcall-netbsd : %(link_os_netbsd) ; \ 63110d565efSmrg mcall-openbsd: %(link_os_openbsd) ; \ 63210d565efSmrg : %(link_os_default) }" 63310d565efSmrg 63410d565efSmrg #define LINK_OS_DEFAULT_SPEC "" 63510d565efSmrg 63610d565efSmrg /* Override rs6000.h definition. */ 63710d565efSmrg #undef CPP_SPEC 63810d565efSmrg #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ 63910d565efSmrg %{mads : %(cpp_os_ads) ; \ 64010d565efSmrg myellowknife : %(cpp_os_yellowknife) ; \ 64110d565efSmrg mmvme : %(cpp_os_mvme) ; \ 64210d565efSmrg msim : %(cpp_os_sim) ; \ 64310d565efSmrg mcall-freebsd: %(cpp_os_freebsd) ; \ 64410d565efSmrg mcall-linux : %(cpp_os_linux) ; \ 64510d565efSmrg mcall-netbsd : %(cpp_os_netbsd) ; \ 64610d565efSmrg mcall-openbsd: %(cpp_os_openbsd) ; \ 64710d565efSmrg : %(cpp_os_default) }" 64810d565efSmrg 64910d565efSmrg #define CPP_OS_DEFAULT_SPEC "" 65010d565efSmrg 65110d565efSmrg #undef STARTFILE_SPEC 65210d565efSmrg #define STARTFILE_SPEC "\ 65310d565efSmrg %{mads : %(startfile_ads) ; \ 65410d565efSmrg myellowknife : %(startfile_yellowknife) ; \ 65510d565efSmrg mmvme : %(startfile_mvme) ; \ 65610d565efSmrg msim : %(startfile_sim) ; \ 65710d565efSmrg mcall-freebsd: %(startfile_freebsd) ; \ 65810d565efSmrg mcall-linux : %(startfile_linux) ; \ 65910d565efSmrg mcall-netbsd : %(startfile_netbsd) ; \ 66010d565efSmrg mcall-openbsd: %(startfile_openbsd) ; \ 66110d565efSmrg : %(startfile_default) }" 66210d565efSmrg 66310d565efSmrg #define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s" 66410d565efSmrg 66510d565efSmrg #undef LIB_SPEC 66610d565efSmrg #define LIB_SPEC "\ 66710d565efSmrg %{mads : %(lib_ads) ; \ 66810d565efSmrg myellowknife : %(lib_yellowknife) ; \ 66910d565efSmrg mmvme : %(lib_mvme) ; \ 67010d565efSmrg msim : %(lib_sim) ; \ 67110d565efSmrg mcall-freebsd: %(lib_freebsd) ; \ 67210d565efSmrg mcall-linux : %(lib_linux) ; \ 67310d565efSmrg mcall-netbsd : %(lib_netbsd) ; \ 67410d565efSmrg mcall-openbsd: %(lib_openbsd) ; \ 67510d565efSmrg : %(lib_default) }" 67610d565efSmrg 67710d565efSmrg #define LIB_DEFAULT_SPEC "-lc" 67810d565efSmrg 67910d565efSmrg #undef ENDFILE_SPEC 68010d565efSmrg #define ENDFILE_SPEC "\ 68110d565efSmrg %{mads : %(endfile_ads) ; \ 68210d565efSmrg myellowknife : %(endfile_yellowknife) ; \ 68310d565efSmrg mmvme : %(endfile_mvme) ; \ 68410d565efSmrg msim : %(endfile_sim) ; \ 68510d565efSmrg mcall-freebsd: %(endfile_freebsd) ; \ 68610d565efSmrg mcall-linux : %(endfile_linux) ; \ 68710d565efSmrg mcall-netbsd : %(endfile_netbsd) ; \ 68810d565efSmrg mcall-openbsd: %(endfile_openbsd) ; \ 68910d565efSmrg : %(crtsavres_default) %(endfile_default) }" 69010d565efSmrg 69110d565efSmrg #define CRTSAVRES_DEFAULT_SPEC "" 69210d565efSmrg 69310d565efSmrg #define ENDFILE_DEFAULT_SPEC "crtend.o%s ecrtn.o%s" 69410d565efSmrg 69510d565efSmrg /* Motorola ADS support. */ 69610d565efSmrg #define LIB_ADS_SPEC "--start-group -lads -lc --end-group" 69710d565efSmrg 69810d565efSmrg #define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 69910d565efSmrg 70010d565efSmrg #define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s" 70110d565efSmrg 70210d565efSmrg #define LINK_START_ADS_SPEC "-T ads.ld%s" 70310d565efSmrg 70410d565efSmrg #define LINK_OS_ADS_SPEC "" 70510d565efSmrg 70610d565efSmrg #define CPP_OS_ADS_SPEC "" 70710d565efSmrg 70810d565efSmrg /* Motorola Yellowknife support. */ 70910d565efSmrg #define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" 71010d565efSmrg 71110d565efSmrg #define STARTFILE_YELLOWKNIFE_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 71210d565efSmrg 71310d565efSmrg #define ENDFILE_YELLOWKNIFE_SPEC "crtend.o%s ecrtn.o%s" 71410d565efSmrg 71510d565efSmrg #define LINK_START_YELLOWKNIFE_SPEC "-T yellowknife.ld%s" 71610d565efSmrg 71710d565efSmrg #define LINK_OS_YELLOWKNIFE_SPEC "" 71810d565efSmrg 71910d565efSmrg #define CPP_OS_YELLOWKNIFE_SPEC "" 72010d565efSmrg 72110d565efSmrg /* Motorola MVME support. */ 72210d565efSmrg #define LIB_MVME_SPEC "--start-group -lmvme -lc --end-group" 72310d565efSmrg 72410d565efSmrg #define STARTFILE_MVME_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" 72510d565efSmrg 72610d565efSmrg #define ENDFILE_MVME_SPEC "crtend.o%s ecrtn.o%s" 72710d565efSmrg 72810d565efSmrg #define LINK_START_MVME_SPEC "-Ttext 0x40000" 72910d565efSmrg 73010d565efSmrg #define LINK_OS_MVME_SPEC "" 73110d565efSmrg 73210d565efSmrg #define CPP_OS_MVME_SPEC "" 73310d565efSmrg 73410d565efSmrg /* PowerPC simulator based on netbsd system calls support. */ 73510d565efSmrg #define LIB_SIM_SPEC "--start-group -lsim -lc --end-group" 73610d565efSmrg 73710d565efSmrg #define STARTFILE_SIM_SPEC "ecrti.o%s sim-crt0.o%s crtbegin.o%s" 73810d565efSmrg 73910d565efSmrg #define ENDFILE_SIM_SPEC "crtend.o%s ecrtn.o%s" 74010d565efSmrg 74110d565efSmrg #define LINK_START_SIM_SPEC "" 74210d565efSmrg 74310d565efSmrg #define LINK_OS_SIM_SPEC "-m elf32ppcsim" 74410d565efSmrg 74510d565efSmrg #define CPP_OS_SIM_SPEC "" 74610d565efSmrg 74710d565efSmrg /* FreeBSD support. */ 74810d565efSmrg 74910d565efSmrg #define CPP_OS_FREEBSD_SPEC "\ 75010d565efSmrg -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ 75110d565efSmrg -Acpu=powerpc -Amachine=powerpc" 75210d565efSmrg 75310d565efSmrg #define STARTFILE_FREEBSD_SPEC FBSD_STARTFILE_SPEC 75410d565efSmrg #define ENDFILE_FREEBSD_SPEC FBSD_ENDFILE_SPEC 75510d565efSmrg #define LIB_FREEBSD_SPEC FBSD_LIB_SPEC 75610d565efSmrg #define LINK_START_FREEBSD_SPEC "" 75710d565efSmrg 75810d565efSmrg #define LINK_OS_FREEBSD_SPEC "\ 75910d565efSmrg %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \ 76010d565efSmrg %{v:-V} \ 76110d565efSmrg %{assert*} %{R*} %{rpath*} %{defsym*} \ 76210d565efSmrg %{shared:-Bshareable %{h*} %{soname*}} \ 76310d565efSmrg %{!shared: \ 76410d565efSmrg %{!static: \ 76510d565efSmrg %{rdynamic: -export-dynamic} \ 76610d565efSmrg -dynamic-linker %(fbsd_dynamic_linker) } \ 76710d565efSmrg %{static:-Bstatic}} \ 76810d565efSmrg %{symbolic:-Bsymbolic}" 76910d565efSmrg 77010d565efSmrg /* GNU/Linux support. */ 7710fc04c29Smrg #define LIB_LINUX_SPEC \ 7720fc04c29Smrg "%{mnewlib: --start-group -llinux -lc --end-group; \ 7730fc04c29Smrg :" GNU_USER_TARGET_LIB_SPEC "}" 77410d565efSmrg 7750fc04c29Smrg #define STARTFILE_LINUX_SPEC GNU_USER_TARGET_STARTFILE_SPEC 77610d565efSmrg 7770fc04c29Smrg #define ENDFILE_LINUX_SPEC GNU_USER_TARGET_ENDFILE_SPEC 77810d565efSmrg 77910d565efSmrg #define LINK_START_LINUX_SPEC "" 78010d565efSmrg 78110d565efSmrg #define MUSL_DYNAMIC_LINKER_E ENDIAN_SELECT("","le","") 78210d565efSmrg 78310d565efSmrg #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" 7840fc04c29Smrg #undef MUSL_DYNAMIC_LINKER 78510d565efSmrg #define MUSL_DYNAMIC_LINKER \ 78610d565efSmrg "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1" 7870fc04c29Smrg 7880fc04c29Smrg #ifndef GNU_USER_DYNAMIC_LINKER 7890fc04c29Smrg #define GNU_USER_DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER 79010d565efSmrg #endif 79110d565efSmrg 79210d565efSmrg #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ 79310d565efSmrg %{rdynamic:-export-dynamic} \ 79410d565efSmrg -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" 79510d565efSmrg 7960fc04c29Smrg #define CPP_OS_LINUX_SPEC "%{pthread:-D_REENTRANT}" 79710d565efSmrg 79810d565efSmrg /* NetBSD support. */ 79910d565efSmrg #define LIB_NETBSD_SPEC NETBSD_LIB_SPEC 80010d565efSmrg 80110d565efSmrg #define STARTFILE_NETBSD_SPEC NETBSD_STARTFILE_SPEC 80210d565efSmrg 80310d565efSmrg #define ENDFILE_NETBSD_SPEC NETBSD_ENDFILE_SPEC 80410d565efSmrg 80510d565efSmrg #define LINK_START_NETBSD_SPEC "\ 80610d565efSmrg " 80710d565efSmrg 80810d565efSmrg #define LINK_OS_NETBSD_SPEC NETBSD_LINK_SPEC_ELF 80910d565efSmrg 81010d565efSmrg #define CPP_OS_NETBSD_SPEC "\ 81110d565efSmrg -D__powerpc__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__" 81210d565efSmrg 81310d565efSmrg #define CC1_OS_NETBSD_SPEC "\ 81410d565efSmrg %{cxx-isystem}" 81510d565efSmrg 81610d565efSmrg /* OpenBSD support. */ 81710d565efSmrg #ifndef LIB_OPENBSD_SPEC 81810d565efSmrg #define LIB_OPENBSD_SPEC "%{!shared:%{pthread:-lpthread%{p:_p}%{!p:%{pg:_p}}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}" 81910d565efSmrg #endif 82010d565efSmrg 82110d565efSmrg #ifndef STARTFILE_OPENBSD_SPEC 82210d565efSmrg #define STARTFILE_OPENBSD_SPEC "\ 82310d565efSmrg %{!shared: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ 82410d565efSmrg %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 82510d565efSmrg #endif 82610d565efSmrg 82710d565efSmrg #ifndef ENDFILE_OPENBSD_SPEC 82810d565efSmrg #define ENDFILE_OPENBSD_SPEC "\ 82910d565efSmrg %{!shared:crtend.o%s} %{shared:crtendS.o%s}" 83010d565efSmrg #endif 83110d565efSmrg 83210d565efSmrg #ifndef LINK_START_OPENBSD_SPEC 83310d565efSmrg #define LINK_START_OPENBSD_SPEC "-Ttext 0x400074" 83410d565efSmrg #endif 83510d565efSmrg 83610d565efSmrg #ifndef LINK_OS_OPENBSD_SPEC 83710d565efSmrg #define LINK_OS_OPENBSD_SPEC "" 83810d565efSmrg #endif 83910d565efSmrg 84010d565efSmrg #ifndef CPP_OS_OPENBSD_SPEC 84110d565efSmrg #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" 84210d565efSmrg #endif 84310d565efSmrg 84410d565efSmrg /* Define any extra SPECS that the compiler needs to generate. */ 84510d565efSmrg /* Override rs6000.h definition. */ 84610d565efSmrg #undef SUBTARGET_EXTRA_SPECS 84710d565efSmrg #define SUBTARGET_EXTRA_SPECS \ 84810d565efSmrg { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ 84910d565efSmrg { "lib_ads", LIB_ADS_SPEC }, \ 85010d565efSmrg { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ 85110d565efSmrg { "lib_mvme", LIB_MVME_SPEC }, \ 85210d565efSmrg { "lib_sim", LIB_SIM_SPEC }, \ 85310d565efSmrg { "lib_freebsd", LIB_FREEBSD_SPEC }, \ 85410d565efSmrg { "lib_linux", LIB_LINUX_SPEC }, \ 85510d565efSmrg { "lib_netbsd", LIB_NETBSD_SPEC }, \ 85610d565efSmrg { "lib_openbsd", LIB_OPENBSD_SPEC }, \ 85710d565efSmrg { "lib_default", LIB_DEFAULT_SPEC }, \ 85810d565efSmrg { "startfile_ads", STARTFILE_ADS_SPEC }, \ 85910d565efSmrg { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ 86010d565efSmrg { "startfile_mvme", STARTFILE_MVME_SPEC }, \ 86110d565efSmrg { "startfile_sim", STARTFILE_SIM_SPEC }, \ 86210d565efSmrg { "startfile_freebsd", STARTFILE_FREEBSD_SPEC }, \ 86310d565efSmrg { "startfile_linux", STARTFILE_LINUX_SPEC }, \ 86410d565efSmrg { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ 86510d565efSmrg { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ 86610d565efSmrg { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ 86710d565efSmrg { "endfile_ads", ENDFILE_ADS_SPEC }, \ 86810d565efSmrg { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ 86910d565efSmrg { "endfile_mvme", ENDFILE_MVME_SPEC }, \ 87010d565efSmrg { "endfile_sim", ENDFILE_SIM_SPEC }, \ 87110d565efSmrg { "endfile_freebsd", ENDFILE_FREEBSD_SPEC }, \ 87210d565efSmrg { "endfile_linux", ENDFILE_LINUX_SPEC }, \ 87310d565efSmrg { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ 87410d565efSmrg { "endfile_openbsd", ENDFILE_OPENBSD_SPEC }, \ 87510d565efSmrg { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ 87610d565efSmrg { "link_shlib", LINK_SHLIB_SPEC }, \ 87710d565efSmrg { "link_start", LINK_START_SPEC }, \ 87810d565efSmrg { "link_start_ads", LINK_START_ADS_SPEC }, \ 87910d565efSmrg { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ 88010d565efSmrg { "link_start_mvme", LINK_START_MVME_SPEC }, \ 88110d565efSmrg { "link_start_sim", LINK_START_SIM_SPEC }, \ 88210d565efSmrg { "link_start_freebsd", LINK_START_FREEBSD_SPEC }, \ 88310d565efSmrg { "link_start_linux", LINK_START_LINUX_SPEC }, \ 88410d565efSmrg { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ 88510d565efSmrg { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ 88610d565efSmrg { "link_start_default", LINK_START_DEFAULT_SPEC }, \ 88710d565efSmrg { "link_os", LINK_OS_SPEC }, \ 88810d565efSmrg { "link_os_ads", LINK_OS_ADS_SPEC }, \ 88910d565efSmrg { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ 89010d565efSmrg { "link_os_mvme", LINK_OS_MVME_SPEC }, \ 89110d565efSmrg { "link_os_sim", LINK_OS_SIM_SPEC }, \ 89210d565efSmrg { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \ 89310d565efSmrg { "link_os_linux", LINK_OS_LINUX_SPEC }, \ 89410d565efSmrg { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ 89510d565efSmrg { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ 89610d565efSmrg { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ 89710d565efSmrg { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ 89810d565efSmrg { "cc1_os_netbsd", CC1_OS_NETBSD_SPEC }, \ 89910d565efSmrg { "link_secure_plt", LINK_SECURE_PLT_SPEC }, \ 90010d565efSmrg { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ 90110d565efSmrg { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ 90210d565efSmrg { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ 90310d565efSmrg { "cpp_os_sim", CPP_OS_SIM_SPEC }, \ 90410d565efSmrg { "cpp_os_freebsd", CPP_OS_FREEBSD_SPEC }, \ 90510d565efSmrg { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ 90610d565efSmrg { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ 90710d565efSmrg { "cpp_os_openbsd", CPP_OS_OPENBSD_SPEC }, \ 90810d565efSmrg { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, \ 90910d565efSmrg { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }, \ 91010d565efSmrg SUBSUBTARGET_EXTRA_SPECS 91110d565efSmrg 91210d565efSmrg #define SUBSUBTARGET_EXTRA_SPECS 91310d565efSmrg 91410d565efSmrg /* Define this macro as a C expression for the initializer of an 91510d565efSmrg array of string to tell the driver program which options are 91610d565efSmrg defaults for this target and thus do not need to be handled 91710d565efSmrg specially when using `MULTILIB_OPTIONS'. 91810d565efSmrg 91910d565efSmrg Do not define this macro if `MULTILIB_OPTIONS' is not defined in 92010d565efSmrg the target makefile fragment or if none of the options listed in 92110d565efSmrg `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ 92210d565efSmrg 92310d565efSmrg #define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" } 92410d565efSmrg 92510d565efSmrg /* Define this macro if the code for function profiling should come 92610d565efSmrg before the function prologue. Normally, the profiling code comes 92710d565efSmrg after. */ 92810d565efSmrg #define PROFILE_BEFORE_PROLOGUE 1 92910d565efSmrg 93010d565efSmrg /* Function name to call to do profiling. */ 93110d565efSmrg #define RS6000_MCOUNT "_mcount" 93210d565efSmrg 93310d565efSmrg /* Select a format to encode pointers in exception handling data. CODE 93410d565efSmrg is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is 93510d565efSmrg true if the symbol may be affected by dynamic relocations. */ 93610d565efSmrg #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ 93710d565efSmrg (flag_pic \ 93810d565efSmrg ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel \ 93910d565efSmrg | DW_EH_PE_sdata4) \ 94010d565efSmrg : DW_EH_PE_absptr) 94110d565efSmrg 94210d565efSmrg #define DOUBLE_INT_ASM_OP "\t.quad\t" 94310d565efSmrg 94410d565efSmrg /* Generate entries in .fixup for relocatable addresses. */ 94510d565efSmrg #define RELOCATABLE_NEEDS_FIXUP 1 94610d565efSmrg 94710d565efSmrg #define TARGET_ASM_FILE_END rs6000_elf_file_end 94810d565efSmrg 94910d565efSmrg #undef TARGET_ASAN_SHADOW_OFFSET 95010d565efSmrg #define TARGET_ASAN_SHADOW_OFFSET rs6000_asan_shadow_offset 95110d565efSmrg 95210d565efSmrg /* This target uses the sysv4.opt file. */ 95310d565efSmrg #define TARGET_USES_SYSV4_OPT 1 95410d565efSmrg 95510d565efSmrg /* Include order changes for musl, same as in generic linux.h. */ 95610d565efSmrg #if DEFAULT_LIBC == LIBC_MUSL 95710d565efSmrg #define INCLUDE_DEFAULTS_MUSL_GPP \ 95810d565efSmrg { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, \ 95910d565efSmrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, \ 96010d565efSmrg { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, \ 96110d565efSmrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, \ 96210d565efSmrg { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, \ 96310d565efSmrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, 96410d565efSmrg 96510d565efSmrg #ifdef LOCAL_INCLUDE_DIR 96610d565efSmrg #define INCLUDE_DEFAULTS_MUSL_LOCAL \ 96710d565efSmrg { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, \ 96810d565efSmrg { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 }, 96910d565efSmrg #else 97010d565efSmrg #define INCLUDE_DEFAULTS_MUSL_LOCAL 97110d565efSmrg #endif 97210d565efSmrg 97310d565efSmrg #ifdef PREFIX_INCLUDE_DIR 97410d565efSmrg #define INCLUDE_DEFAULTS_MUSL_PREFIX \ 97510d565efSmrg { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0}, 97610d565efSmrg #else 97710d565efSmrg #define INCLUDE_DEFAULTS_MUSL_PREFIX 97810d565efSmrg #endif 97910d565efSmrg 98010d565efSmrg #ifdef CROSS_INCLUDE_DIR 98110d565efSmrg #define INCLUDE_DEFAULTS_MUSL_CROSS \ 98210d565efSmrg { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0}, 98310d565efSmrg #else 98410d565efSmrg #define INCLUDE_DEFAULTS_MUSL_CROSS 98510d565efSmrg #endif 98610d565efSmrg 98710d565efSmrg #ifdef TOOL_INCLUDE_DIR 98810d565efSmrg #define INCLUDE_DEFAULTS_MUSL_TOOL \ 98910d565efSmrg { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0}, 99010d565efSmrg #else 99110d565efSmrg #define INCLUDE_DEFAULTS_MUSL_TOOL 99210d565efSmrg #endif 99310d565efSmrg 99410d565efSmrg #ifdef NATIVE_SYSTEM_HEADER_DIR 99510d565efSmrg #define INCLUDE_DEFAULTS_MUSL_NATIVE \ 99610d565efSmrg { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ 99710d565efSmrg { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, 99810d565efSmrg #else 99910d565efSmrg #define INCLUDE_DEFAULTS_MUSL_NATIVE 100010d565efSmrg #endif 100110d565efSmrg 100210d565efSmrg #if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT) 100310d565efSmrg # undef INCLUDE_DEFAULTS_MUSL_LOCAL 100410d565efSmrg # define INCLUDE_DEFAULTS_MUSL_LOCAL 100510d565efSmrg # undef INCLUDE_DEFAULTS_MUSL_NATIVE 100610d565efSmrg # define INCLUDE_DEFAULTS_MUSL_NATIVE 100710d565efSmrg #else 100810d565efSmrg # undef INCLUDE_DEFAULTS_MUSL_CROSS 100910d565efSmrg # define INCLUDE_DEFAULTS_MUSL_CROSS 101010d565efSmrg #endif 101110d565efSmrg 101210d565efSmrg #undef INCLUDE_DEFAULTS 101310d565efSmrg #define INCLUDE_DEFAULTS \ 101410d565efSmrg { \ 101510d565efSmrg INCLUDE_DEFAULTS_MUSL_GPP \ 101610d565efSmrg INCLUDE_DEFAULTS_MUSL_LOCAL \ 101710d565efSmrg INCLUDE_DEFAULTS_MUSL_PREFIX \ 101810d565efSmrg INCLUDE_DEFAULTS_MUSL_CROSS \ 101910d565efSmrg INCLUDE_DEFAULTS_MUSL_TOOL \ 102010d565efSmrg INCLUDE_DEFAULTS_MUSL_NATIVE \ 102110d565efSmrg { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \ 102210d565efSmrg { 0, 0, 0, 0, 0, 0 } \ 102310d565efSmrg } 102410d565efSmrg #endif 1025