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