]> gcc.gnu.org Git - gcc.git/blame - gcc/config/darwin.h
Merge ubsan into trunk.
[gcc.git] / gcc / config / darwin.h
CommitLineData
ee890fe2 1/* Target definitions for Darwin (Mac OS X) systems.
d1e082c2 2 Copyright (C) 1989-2013 Free Software Foundation, Inc.
ee890fe2
SS
3 Contributed by Apple Computer Inc.
4
7ec022b2 5This file is part of GCC.
ee890fe2 6
7ec022b2 7GCC is free software; you can redistribute it and/or modify
ee890fe2 8it under the terms of the GNU General Public License as published by
748086b7 9the Free Software Foundation; either version 3, or (at your option)
ee890fe2
SS
10any later version.
11
7ec022b2 12GCC is distributed in the hope that it will be useful,
ee890fe2
SS
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
748086b7
JJ
17Under Section 7 of GPL version 3, you are granted additional
18permissions described in the GCC Runtime Library Exception, version
193.1, as published by the Free Software Foundation.
20
21You should have received a copy of the GNU General Public License and
22a copy of the GCC Runtime Library Exception along with this program;
23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24<http://www.gnu.org/licenses/>. */
ee890fe2 25
213c4a8a
GK
26#ifndef CONFIG_DARWIN_H
27#define CONFIG_DARWIN_H
28
ee890fe2
SS
29/* The definitions in this file are common to all processor types
30 running Darwin, which is the kernel for Mac OS X. Darwin is
31 basically a BSD user layer laid over a Mach kernel, then evolved
32 for many years (at NeXT) in parallel with other Unix systems. So
33 while the runtime is a somewhat idiosyncratic Mach-based thing,
34 other definitions look like they would for a BSD variant. */
35
36/* Although NeXT ran on many different architectures, as of Jan 2001
37 the only supported Darwin targets are PowerPC and x86. */
38
7606e68f
SS
39/* One of Darwin's NeXT legacies is the Mach-O format, which is partly
40 like a.out and partly like COFF, with additional features like
41 multi-architecture binary support. */
42
fee3eacd
IS
43#define DARWIN_X86 0
44#define DARWIN_PPC 0
7606e68f 45
7eb0a43c
GK
46/* Don't assume anything about the header files. */
47#define NO_IMPLICIT_EXTERN_C
48
d42093a1 49/* Suppress g++ attempt to link in the math library automatically. */
abe72dd8 50#define MATH_LIBRARY ""
ee890fe2
SS
51
52/* We have atexit. */
53
54#define HAVE_ATEXIT
55
56/* Define an empty body for the function do_global_dtors() in libgcc2.c. */
57
58#define DO_GLOBAL_DTORS_BODY
59
60/* The string value for __SIZE_TYPE__. */
61
62#ifndef SIZE_TYPE
63#define SIZE_TYPE "long unsigned int"
64#endif
65
66/* Type used for ptrdiff_t, as a string used in a declaration. */
67
68#undef PTRDIFF_TYPE
69#define PTRDIFF_TYPE "int"
70
71/* wchar_t is int. */
72
73#undef WCHAR_TYPE
74#define WCHAR_TYPE "int"
75#undef WCHAR_TYPE_SIZE
76#define WCHAR_TYPE_SIZE 32
77
428ddbf0
FXC
78#define INT8_TYPE "signed char"
79#define INT16_TYPE "short int"
80#define INT32_TYPE "int"
81#define INT64_TYPE "long long int"
82#define UINT8_TYPE "unsigned char"
83#define UINT16_TYPE "short unsigned int"
84#define UINT32_TYPE "unsigned int"
85#define UINT64_TYPE "long long unsigned int"
86
87#define INT_LEAST8_TYPE "signed char"
88#define INT_LEAST16_TYPE "short int"
89#define INT_LEAST32_TYPE "int"
90#define INT_LEAST64_TYPE "long long int"
91#define UINT_LEAST8_TYPE "unsigned char"
92#define UINT_LEAST16_TYPE "short unsigned int"
93#define UINT_LEAST32_TYPE "unsigned int"
94#define UINT_LEAST64_TYPE "long long unsigned int"
95
96#define INT_FAST8_TYPE "signed char"
97#define INT_FAST16_TYPE "short int"
98#define INT_FAST32_TYPE "int"
99#define INT_FAST64_TYPE "long long int"
100#define UINT_FAST8_TYPE "unsigned char"
101#define UINT_FAST16_TYPE "short unsigned int"
102#define UINT_FAST32_TYPE "unsigned int"
103#define UINT_FAST64_TYPE "long long unsigned int"
104
105#define INTPTR_TYPE "long int"
106#define UINTPTR_TYPE "long unsigned int"
107
108#define SIG_ATOMIC_TYPE "int"
109
f37f462a
SS
110/* Default to using the NeXT-style runtime, since that's what is
111 pre-installed on Darwin systems. */
112
fea3ca91 113#define NEXT_OBJC_RUNTIME 1
f37f462a 114
ee890fe2
SS
115/* Don't default to pcc-struct-return, because gcc is the only compiler, and
116 we want to retain compatibility with older gcc versions. */
117
118#undef DEFAULT_PCC_STRUCT_RETURN
119#define DEFAULT_PCC_STRUCT_RETURN 0
120
4f8bdef9
EC
121/* True if pragma ms_struct is in effect. */
122extern GTY(()) int darwin_ms_struct;
123
dd2e44f0
IS
124#define DRIVER_SELF_SPECS \
125 "%{gfull:-g -fno-eliminate-unused-debug-symbols} %<gfull", \
126 "%{gused:-g -feliminate-unused-debug-symbols} %<gused", \
127 "%{fapple-kext|mkernel:-static}", \
128 "%{shared:-Zdynamiclib} %<shared"
129
130#define DARWIN_CC1_SPEC \
131 "%{findirect-virtual-calls: -fapple-kext} %<findirect-virtual-calls " \
132 "%{fterminated-vtables: -fapple-kext} %<fterminated-vtables " \
133 "%<filelist* %<framework*"
134
135#define SUBSUBTARGET_OVERRIDE_OPTIONS \
136 do { \
137 darwin_override_options (); \
138 } while (0)
139
140#define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do { \
dd2e44f0
IS
141 if (flag_mkernel || flag_apple_kext) \
142 { \
143 if (flag_use_cxa_atexit == 2) \
144 flag_use_cxa_atexit = 0; \
145 /* kexts should always be built without the coalesced sections \
146 because the kernel loader doesn't grok such sections. */ \
147 flag_weak = 0; \
148 /* No RTTI in kexts. */ \
149 flag_rtti = 0; \
150 } \
151 } while (0)
f475fd3c 152
ed5b9f96
GK
153/* Machine dependent cpp options. Don't add more options here, add
154 them to darwin_cpp_builtins in darwin-c.c. */
ee890fe2 155
ee890fe2 156#undef CPP_SPEC
dd2e44f0
IS
157#define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" \
158 " %{pthread:-D_REENTRANT}"
ee890fe2 159
48aec0bc 160/* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus
7f814c0b
IS
161 precomp, libtool, and fat build additions.
162
163 In general, random Darwin linker flags should go into LINK_SPEC
48aec0bc
DP
164 instead of LINK_COMMAND_SPEC. The command spec is better for
165 specifying the handling of options understood by generic Unix
166 linkers, and for positional arguments like libraries. */
50eb566f 167
dd2e44f0
IS
168#define LINK_COMMAND_SPEC_A \
169 "%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
dd350eba
RO
170 %(linker)" \
171 LINK_PLUGIN_SPEC \
172 "%{flto*:%<fcompare-debug*} \
dd2e44f0
IS
173 %{flto*} \
174 %l %X %{s} %{t} %{Z} %{u*} \
175 %{e*} %{r} \
176 %{o*}%{!o:-o a.out} \
177 %{!nostdlib:%{!nostartfiles:%S}} \
178 %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \
179 %{fopenmp|ftree-parallelize-loops=*: \
180 %{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \
de5a5fa1 181 %{%:sanitize(address): -lasan } \
255a9a1b
EB
182 %{fgnu-tm: \
183 %{static|static-libgcc|static-libstdc++|static-libgfortran: libitm.a%s; : -litm } } \
dd2e44f0
IS
184 %{!nostdlib:%{!nodefaultlibs:\
185 %(link_ssp) %(link_gcc_c_sequence)\
186 }}\
187 %{!nostdlib:%{!nostartfiles:%E}} %{T*} %{F*} }}}}}}}"
50eb566f 188
7f814c0b 189#define DSYMUTIL "\ndsymutil"
50eb566f 190
dd2e44f0
IS
191#define DSYMUTIL_SPEC \
192 "%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
193 %{v} \
194 %{gdwarf-2:%{!gstabs*:%{!g0: -idsym}}}\
195 %{.c|.cc|.C|.cpp|.cp|.c++|.cxx|.CPP|.m|.mm: \
196 %{gdwarf-2:%{!gstabs*:%{!g0: -dsym}}}}}}}}}}}"
50eb566f
IS
197
198#define LINK_COMMAND_SPEC LINK_COMMAND_SPEC_A DSYMUTIL_SPEC
48aec0bc 199
7e82085a 200/* Tell collect2 to run dsymutil for us as necessary. */
11afe8e8
MS
201#define COLLECT_RUN_DSYMUTIL 1
202
7f814c0b
IS
203/* We only want one instance of %G, since libSystem (Darwin's -lc) does not depend
204 on libgcc. */
205#undef LINK_GCC_C_SEQUENCE_SPEC
206#define LINK_GCC_C_SEQUENCE_SPEC "%G %L"
207
9281e73d 208#ifdef TARGET_SYSTEM_ROOT
dd2e44f0
IS
209#define LINK_SYSROOT_SPEC \
210 "%{isysroot*:-syslibroot %*;:-syslibroot " TARGET_SYSTEM_ROOT "}"
9281e73d
GK
211#else
212#define LINK_SYSROOT_SPEC "%{isysroot*:-syslibroot %*}"
213#endif
214
0e9197f5
IS
215#define PIE_SPEC "%{fpie|pie|fPIE:}"
216
48aec0bc 217/* Please keep the random linker options in alphabetical order (modulo
bd6a0889
EC
218 'Z' and 'no' prefixes). Note that options taking arguments may appear
219 multiple times on a command line with different arguments each time,
220 so put a * after their names so all of them get passed. */
dd2e44f0
IS
221#define LINK_SPEC \
222 "%{static}%{!static:-dynamic} \
223 %:remove-outfile(-ldl) \
224 %:remove-outfile(-lm) \
225 %:remove-outfile(-lpthread) \
226 %{fgnu-runtime: %{static|static-libgcc: \
227 %:replace-outfile(-lobjc libobjc-gnu.a%s); \
228 :%:replace-outfile(-lobjc -lobjc-gnu ) } }\
229 %{static|static-libgcc|static-libgfortran:%:replace-outfile(-lgfortran libgfortran.a%s)}\
230 %{static|static-libgcc|static-libstdc++|static-libgfortran:%:replace-outfile(-lgomp libgomp.a%s)}\
231 %{static|static-libgcc|static-libstdc++:%:replace-outfile(-lstdc++ libstdc++.a%s)}\
232 %{!Zdynamiclib: \
233 %{Zforce_cpusubtype_ALL:-arch %(darwin_arch) -force_cpusubtype_ALL} \
234 %{!Zforce_cpusubtype_ALL:-arch %(darwin_subarch)} \
235 %{Zbundle:-bundle} \
236 %{Zbundle_loader*:-bundle_loader %*} \
237 %{client_name*} \
238 %{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\
239} \
240 %{current_version*:%e-current_version only allowed with -dynamiclib} \
241 %{Zforce_flat_namespace:-force_flat_namespace} \
242 %{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \
243 %{keep_private_externs} \
244 %{private_bundle} \
245 } \
246 %{Zdynamiclib: -dylib \
247 %{Zbundle:%e-bundle not allowed with -dynamiclib} \
248 %{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \
249 %{client_name*:%e-client_name not allowed with -dynamiclib} \
250 %{compatibility_version*:-dylib_compatibility_version %*} \
251 %{current_version*:-dylib_current_version %*} \
252 %{Zforce_cpusubtype_ALL:-arch %(darwin_arch)} \
253 %{!Zforce_cpusubtype_ALL: -arch %(darwin_subarch)} \
254 %{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \
255 %{Zinstall_name*:-dylib_install_name %*} \
256 %{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \
257 %{private_bundle:%e-private_bundle not allowed with -dynamiclib} \
258 } \
259 %{Zall_load:-all_load} \
260 %{Zallowable_client*:-allowable_client %*} \
261 %{Zbind_at_load:-bind_at_load} \
262 %{Zarch_errors_fatal:-arch_errors_fatal} \
263 %{Zdead_strip:-dead_strip} \
264 %{Zno_dead_strip_inits_and_terms:-no_dead_strip_inits_and_terms} \
265 %{Zdylib_file*:-dylib_file %*} \
266 %{Zdynamic:-dynamic}\
267 %{Zexported_symbols_list*:-exported_symbols_list %*} \
268 %{Zflat_namespace:-flat_namespace} \
269 %{headerpad_max_install_names} \
270 %{Zimage_base*:-image_base %*} \
271 %{Zinit*:-init %*} \
272 %{!mmacosx-version-min=*:-macosx_version_min %(darwin_minversion)} \
273 %{mmacosx-version-min=*:-macosx_version_min %*} \
274 %{nomultidefs} \
275 %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \
276 %{Zmultiply_defined*:-multiply_defined %*} \
277 %{!Zmultiply_defined*:%{shared-libgcc: \
278 %:version-compare(< 10.5 mmacosx-version-min= -multiply_defined) \
279 %:version-compare(< 10.5 mmacosx-version-min= suppress)}} \
280 %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \
0e9197f5 281 " PIE_SPEC " \
dd2e44f0
IS
282 %{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \
283 %{read_only_relocs} \
284 %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} \
285 %{Zsegaddr*:-segaddr %*} \
286 %{Zsegs_read_only_addr*:-segs_read_only_addr %*} \
287 %{Zsegs_read_write_addr*:-segs_read_write_addr %*} \
288 %{Zseg_addr_table*: -seg_addr_table %*} \
289 %{Zfn_seg_addr_table_filename*:-seg_addr_table_filename %*} \
290 %{sub_library*} %{sub_umbrella*} \
291 " LINK_SYSROOT_SPEC " \
292 %{twolevel_namespace} %{twolevel_namespace_hints} \
293 %{Zumbrella*: -umbrella %*} \
294 %{undefined*} \
295 %{Zunexported_symbols_list*:-unexported_symbols_list %*} \
296 %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \
297 %{!Zweak_reference_mismatches*:-weak_reference_mismatches non-weak} \
298 %{X} \
299 %{y*} \
300 %{w} \
301 %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \
302 %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \
303 %{whatsloaded} %{dylinker_install_name*} \
304 %{dylinker} %{Mach} "
48aec0bc
DP
305
306
ed5b9f96 307/* Machine dependent libraries. */
ee890fe2 308
5fa5a27c 309#define LIB_SPEC "%{!static:-lSystem}"
ee890fe2 310
56309261
GK
311/* Support -mmacosx-version-min by supplying different (stub) libgcc_s.dylib
312 libraries to link against, and by not linking against libgcc_s on
313 earlier-than-10.3.9.
314
315 Note that by default, -lgcc_eh is not linked against! This is
316 because in a future version of Darwin the EH frame information may
317 be in a new format, or the fallback routine might be changed; if
318 you want to explicitly link against the static version of those
319 routines, because you know you don't need to unwind through system
083cad55
EC
320 libraries, you need to explicitly say -static-libgcc.
321
56309261
GK
322 If it is linked against, it has to be before -lgcc, because it may
323 need symbols from -lgcc. */
040b1c5a 324#undef REAL_LIBGCC_SPEC
dd2e44f0
IS
325#define REAL_LIBGCC_SPEC \
326 "%{static-libgcc|static: -lgcc_eh -lgcc; \
327 shared-libgcc|fexceptions|fgnu-runtime: \
328 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \
329 %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \
330 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \
331 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \
332 -lgcc ; \
333 :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \
334 %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \
335 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \
336 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \
337 -lgcc }"
083cad55 338
747b9f55
GK
339/* We specify crt0.o as -lcrt0.o so that ld will search the library path.
340
341 crt3.o provides __cxa_atexit on systems that don't have it. Since
342 it's only used with C++, which requires passing -shared-libgcc, key
343 off that to avoid unnecessarily adding a destructor to every
344 powerpc program built. */
ee890fe2 345
48aec0bc 346#undef STARTFILE_SPEC
dd2e44f0 347#define STARTFILE_SPEC \
e2362f5d 348 "%{Zdynamiclib: %(darwin_dylib1) %{fgnu-tm: -lcrttms.o}} \
99b375d0
IS
349 %{!Zdynamiclib:%{Zbundle:%{!static: \
350 %:version-compare(< 10.6 mmacosx-version-min= -lbundle1.o) \
351 %{fgnu-tm: -lcrttms.o}}} \
dd2e44f0
IS
352 %{!Zbundle:%{pg:%{static:-lgcrt0.o} \
353 %{!static:%{object:-lgcrt0.o} \
354 %{!object:%{preload:-lgcrt0.o} \
3127f133
JH
355 %{!preload:-lgcrt1.o \
356 %:version-compare(>= 10.8 mmacosx-version-min= -no_new_main) \
357 %(darwin_crt2)}}}} \
dd2e44f0
IS
358 %{!pg:%{static:-lcrt0.o} \
359 %{!static:%{object:-lcrt0.o} \
360 %{!object:%{preload:-lcrt0.o} \
361 %{!preload: %(darwin_crt1) \
362 %(darwin_crt2)}}}}}} \
363 %{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}"
7606e68f 364
e2362f5d 365/* We want a destructor last in the list. */
6c59ffd1
IS
366#define TM_DESTRUCTOR "%{fgnu-tm: -lcrttme.o}"
367#define ENDFILE_SPEC TM_DESTRUCTOR
ee890fe2 368
dd2e44f0
IS
369#define DARWIN_EXTRA_SPECS \
370 { "darwin_crt1", DARWIN_CRT1_SPEC }, \
371 { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \
372 { "darwin_minversion", DARWIN_MINVERSION_SPEC },
742163c0 373
dd2e44f0
IS
374#define DARWIN_DYLIB1_SPEC \
375 "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
99b375d0 376 %:version-compare(>< 10.5 10.6 mmacosx-version-min= -ldylib1.10.5.o)"
742163c0 377
dd2e44f0
IS
378#define DARWIN_CRT1_SPEC \
379 "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \
99b375d0 380 %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lcrt1.10.5.o) \
3127f133 381 %:version-compare(>< 10.6 10.8 mmacosx-version-min= -lcrt1.10.6.o) \
e2362f5d 382 %{fgnu-tm: -lcrttms.o}"
742163c0 383
c4e18b1c 384/* Default Darwin ASM_SPEC, very simple. */
dd2e44f0
IS
385#define ASM_SPEC "-arch %(darwin_arch) \
386 %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \
387 %{static}"
c4e18b1c 388
40353fb3
IS
389/* Default ASM_DEBUG_SPEC. Darwin's as cannot currently produce dwarf
390 debugging data. */
391
392#define ASM_DEBUG_SPEC "%{g*:%{!g0:%{!gdwarf*:--gstabs}}}"
393
4d04fa05 394/* We still allow output of STABS. */
ee890fe2 395
23532de9 396#define DBX_DEBUGGING_INFO 1
ee890fe2 397
2d84a337 398#define DWARF2_DEBUGGING_INFO 1
80c85ca2 399#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
eeab4d81 400
192d0f89
GK
401#define DEBUG_FRAME_SECTION "__DWARF,__debug_frame,regular,debug"
402#define DEBUG_INFO_SECTION "__DWARF,__debug_info,regular,debug"
403#define DEBUG_ABBREV_SECTION "__DWARF,__debug_abbrev,regular,debug"
404#define DEBUG_ARANGES_SECTION "__DWARF,__debug_aranges,regular,debug"
405#define DEBUG_MACINFO_SECTION "__DWARF,__debug_macinfo,regular,debug"
406#define DEBUG_LINE_SECTION "__DWARF,__debug_line,regular,debug"
407#define DEBUG_LOC_SECTION "__DWARF,__debug_loc,regular,debug"
408#define DEBUG_PUBNAMES_SECTION "__DWARF,__debug_pubnames,regular,debug"
89708594 409#define DEBUG_PUBTYPES_SECTION "__DWARF,__debug_pubtypes,regular,debug"
192d0f89
GK
410#define DEBUG_STR_SECTION "__DWARF,__debug_str,regular,debug"
411#define DEBUG_RANGES_SECTION "__DWARF,__debug_ranges,regular,debug"
c0c19685 412#define DEBUG_MACRO_SECTION "__DWARF,__debug_macro,regular,debug"
eeab4d81 413
9730bc27
TT
414#define TARGET_WANT_DEBUG_PUB_SECTIONS true
415
638c962f
JH
416#define TARGET_FORCE_AT_COMP_DIR true
417
ee890fe2
SS
418/* When generating stabs debugging, use N_BINCL entries. */
419
420#define DBX_USE_BINCL
421
422/* There is no limit to the length of stabs strings. */
423
424#define DBX_CONTIN_LENGTH 0
425
991b6592 426/* gdb needs a null N_SO at the end of each file for scattered loading. */
ee890fe2 427
3e487b21 428#define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
ee890fe2 429
f1a66265
GK
430/* GCC's definition of 'one_only' is the same as its definition of 'weak'. */
431#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
4746cf84 432
f1a66265
GK
433/* Mach-O supports 'weak imports', and 'weak definitions' in coalesced
434 sections. machopic_select_section ensures that weak variables go in
435 coalesced sections. Weak aliases (or any other kind of aliases) are
436 not supported. Weak symbols that aren't visible outside the .s file
437 are not supported. */
dd2e44f0
IS
438#define ASM_WEAKEN_DECL(FILE, DECL, NAME, ALIAS) \
439 do { \
440 if (ALIAS) \
441 { \
442 warning (0, "alias definitions not supported in Mach-O; ignored"); \
443 break; \
444 } \
445 \
446 if (! DECL_EXTERNAL (DECL) && TREE_PUBLIC (DECL)) \
447 targetm.asm_out.globalize_label (FILE, NAME); \
448 if (DECL_EXTERNAL (DECL)) \
449 fputs ("\t.weak_reference ", FILE); \
450 else if (lookup_attribute ("weak_import", DECL_ATTRIBUTES (DECL))) \
451 break; \
452 else if (TREE_PUBLIC (DECL)) \
453 fputs ("\t.weak_definition ", FILE); \
454 else \
455 break; \
456 assemble_name (FILE, NAME); \
457 fputc ('\n', FILE); \
458 } while (0)
4746cf84 459
72747d40
GK
460/* Darwin has the pthread routines in libSystem, which every program
461 links to, so there's no need for weak-ness for that. */
462#define GTHREAD_USE_WEAK 0
463
0524c91d 464/* The Darwin linker doesn't want coalesced symbols to appear in
4746cf84 465 a static archive's table of contents. */
0524c91d
MA
466#undef TARGET_WEAK_NOT_IN_ARCHIVE_TOC
467#define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 1
4746cf84 468
9e170098
GK
469/* On Darwin, we don't (at the time of writing) have linkonce sections
470 with names, so it's safe to make the class data not comdat. */
471#define TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT hook_bool_void_false
472
157600d0
GK
473/* For efficiency, on Darwin the RTTI information that is always
474 emitted in the standard C++ library should not be COMDAT. */
475#define TARGET_CXX_LIBRARY_RTTI_COMDAT hook_bool_void_false
476
4746cf84
MA
477/* We make exception information linkonce. */
478#undef TARGET_USES_WEAK_UNWIND_INFO
479#define TARGET_USES_WEAK_UNWIND_INFO 1
480
481/* We need to use a nonlocal label for the start of an EH frame: the
16d6f994 482 Darwin linker requires that a coalesced section start with a label.
192d0f89
GK
483 Unfortunately, it also requires that 'debug' sections don't contain
484 labels. */
4746cf84 485#undef FRAME_BEGIN_LABEL
192d0f89 486#define FRAME_BEGIN_LABEL (for_eh ? "EH_frame" : "Lframe")
4746cf84 487
7904f95f 488/* Emit a label for the FDE corresponding to DECL. EMPTY means
4746cf84
MA
489 emit a label for an empty FDE. */
490#define TARGET_ASM_EMIT_UNWIND_LABEL darwin_emit_unwind_label
491
083cad55
EC
492/* Emit a label to separate the exception table. */
493#define TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL darwin_emit_except_table_label
494
ee890fe2
SS
495/* Our profiling scheme doesn't LP labels and counter words. */
496
9739c90c 497#define NO_PROFILE_COUNTERS 1
ee890fe2 498
ee890fe2 499#undef INIT_SECTION_ASM_OP
d82f6b00 500#define INIT_SECTION_ASM_OP
ee890fe2
SS
501
502#undef INVOKE__main
503
2cc07db4
RH
504#define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor
505#define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor
ee890fe2 506
6ab9a3f4
SS
507/* Always prefix with an underscore. */
508
509#define USER_LABEL_PREFIX "_"
510
08a6a74b
RS
511/* A dummy symbol that will be replaced with the function base name. */
512#define MACHOPIC_FUNCTION_BASE_NAME "<pic base>"
513
ee890fe2
SS
514/* Don't output a .file directive. That is only used by the assembler for
515 error reporting. */
720b7001
ZW
516#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
517#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
ee890fe2 518
a5fe455b
ZW
519#undef TARGET_ASM_FILE_END
520#define TARGET_ASM_FILE_END darwin_file_end
ee890fe2 521
c082f9f3
SB
522/* Because Mach-O relocations have a counter from 1 to 255 for the
523 section number they apply to, it is necessary to output all
524 normal sections before the LTO sections, to make sure that the
525 sections that may have relocations always have a section number
526 smaller than 255. */
527#undef TARGET_ASM_LTO_START
528#define TARGET_ASM_LTO_START darwin_asm_lto_start
529#undef TARGET_ASM_LTO_END
530#define TARGET_ASM_LTO_END darwin_asm_lto_end
531
dd2e44f0
IS
532#define ASM_OUTPUT_SKIP(FILE,SIZE) \
533 fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", SIZE)
2aa9948d 534
991b6592 535/* Give ObjC methods pretty symbol names. */
ee890fe2
SS
536
537#undef OBJC_GEN_METHOD_LABEL
dd2e44f0
IS
538#define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
539 do { if (CAT_NAME) \
540 sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \
541 (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \
542 else \
543 sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \
544 (CLASS_NAME), (SEL_NAME)); \
545 } while (0)
ee890fe2 546
46a99b06 547#undef ASM_DECLARE_OBJECT_NAME
dd2e44f0
IS
548#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
549 darwin_asm_declare_object_name ((FILE), (NAME), (DECL))
46a99b06 550
ee890fe2
SS
551/* The RTTI data (e.g., __ti4name) is common and public (and static),
552 but it does need to be referenced via indirect PIC data pointers.
11abc112 553 The machopic_define_symbol calls are telling the machopic subsystem
ee890fe2
SS
554 that the name *is* defined in this module, so it doesn't need to
555 make them indirect. */
556
dd2e44f0
IS
557#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
558 do { \
559 const char *xname = NAME; \
560 if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
561 xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
562 if (! DECL_WEAK (DECL) \
563 && ((TREE_STATIC (DECL) \
564 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
565 || DECL_INITIAL (DECL))) \
566 machopic_define_symbol (DECL_RTL (DECL)); \
567 if ((TREE_STATIC (DECL) \
568 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
569 || DECL_INITIAL (DECL)) \
570 (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
571 ASM_OUTPUT_FUNCTION_LABEL (FILE, xname, DECL); \
572 } while (0)
ee890fe2 573
e4f7c483
AS
574#undef TARGET_ASM_DECLARE_CONSTANT_NAME
575#define TARGET_ASM_DECLARE_CONSTANT_NAME darwin_asm_declare_constant_name
18f3e349 576
ee890fe2 577/* Wrap new method names in quotes so the assembler doesn't gag.
dd2e44f0 578 Make Objective-C internal symbols local and in doing this, we need
d8299715
DK
579 to accommodate the name mangling done by c++ on file scope locals. */
580
d8299715 581int darwin_label_is_anonymous_local_objc_name (const char *name);
ee890fe2
SS
582
583#undef ASM_OUTPUT_LABELREF
dd2e44f0
IS
584#define ASM_OUTPUT_LABELREF(FILE,NAME) \
585 do { \
586 const char *xname = (NAME); \
587 if (! strcmp (xname, MACHOPIC_FUNCTION_BASE_NAME)) \
588 machopic_output_function_base_name(FILE); \
589 else if (xname[0] == '&' || xname[0] == '*') \
590 { \
591 int len = strlen (xname); \
592 if (len > 6 && !strcmp ("$stub", xname + len - 5)) \
593 machopic_validate_stub_or_non_lazy_ptr (xname); \
594 else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \
595 machopic_validate_stub_or_non_lazy_ptr (xname); \
596 else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \
597 machopic_validate_stub_or_non_lazy_ptr (xname); \
598 else if (len > 15 && !strcmp ("$non_lazy_ptr\"", xname + len - 14)) \
599 machopic_validate_stub_or_non_lazy_ptr (xname); \
600 if (xname[1] != '"' && name_needs_quotes (&xname[1])) \
601 fprintf (FILE, "\"%s\"", &xname[1]); \
602 else \
603 fputs (&xname[1], FILE); \
604 } \
605 else if (xname[0] == '+' || xname[0] == '-') \
606 fprintf (FILE, "\"%s\"", xname); \
d764a8e6 607 else if (darwin_label_is_anonymous_local_objc_name (xname)) \
dd2e44f0 608 fprintf (FILE, "L%s", xname); \
dd2e44f0 609 else if (xname[0] != '"' && name_needs_quotes (xname)) \
cebb4698 610 asm_fprintf (FILE, "\"%U%s\"", xname); \
dd2e44f0
IS
611 else \
612 asm_fprintf (FILE, "%U%s", xname); \
613 } while (0)
ee890fe2 614
2aa9948d
SS
615/* Output before executable code. */
616#undef TEXT_SECTION_ASM_OP
f1a66265 617#define TEXT_SECTION_ASM_OP "\t.text"
2aa9948d
SS
618
619/* Output before writable data. */
620
621#undef DATA_SECTION_ASM_OP
f1a66265 622#define DATA_SECTION_ASM_OP "\t.data"
2aa9948d 623
ee890fe2
SS
624#undef ALIGN_ASM_OP
625#define ALIGN_ASM_OP ".align"
626
627#undef ASM_OUTPUT_ALIGN
dd2e44f0
IS
628#define ASM_OUTPUT_ALIGN(FILE,LOG) \
629 if ((LOG) != 0) \
630 fprintf (FILE, "\t%s\t%d\n", ALIGN_ASM_OP, (LOG))
ee890fe2 631
4beb5c4b
MS
632/* The maximum alignment which the object file format can support in
633 bits. For Mach-O, this is 2^15 bytes. */
ee890fe2
SS
634
635#undef MAX_OFILE_ALIGNMENT
4beb5c4b 636#define MAX_OFILE_ALIGNMENT (0x8000 * 8)
ee890fe2 637
46a99b06
IS
638#define L2_MAX_OFILE_ALIGNMENT 15
639
640/* These are the three variants that emit referenced blank space. */
dd2e44f0
IS
641#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
642 darwin_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
46a99b06
IS
643
644#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
dd2e44f0
IS
645#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
646 darwin_asm_output_aligned_decl_local \
647 ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
46a99b06
IS
648
649#undef ASM_OUTPUT_ALIGNED_DECL_COMMON
dd2e44f0
IS
650#define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
651 darwin_asm_output_aligned_decl_common \
652 ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
46a99b06 653
fee3eacd
IS
654/* The generic version, archs should over-ride where required. */
655#define MACHOPIC_NL_SYMBOL_PTR_SECTION ".non_lazy_symbol_pointer"
656
d6b5193b 657/* Declare the section variables. */
c3e23a08 658#ifndef USED_FOR_TARGET
56c779bc
GK
659enum darwin_section_enum {
660#define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) NAME,
d6b5193b
RS
661#include "darwin-sections.def"
662#undef DEF_SECTION
56c779bc
GK
663 NUM_DARWIN_SECTIONS
664};
665extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
0e230dfa 666#endif
ee890fe2 667
ae46c4e0
RH
668#undef TARGET_ASM_SELECT_SECTION
669#define TARGET_ASM_SELECT_SECTION machopic_select_section
1f81953b 670
f16d3f39
JH
671#undef TARGET_ASM_FUNCTION_SECTION
672#define TARGET_ASM_FUNCTION_SECTION darwin_function_section
f1a66265 673
14d11d40 674#undef TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS
dd2e44f0
IS
675#define TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS \
676 darwin_function_switched_text_sections
14d11d40 677
b64a1b53
RH
678#undef TARGET_ASM_SELECT_RTX_SECTION
679#define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section
4746cf84
MA
680#undef TARGET_ASM_UNIQUE_SECTION
681#define TARGET_ASM_UNIQUE_SECTION darwin_unique_section
ab5c8549
JJ
682#undef TARGET_ASM_FUNCTION_RODATA_SECTION
683#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
50b0b78a
IS
684
685#undef TARGET_ASM_TM_CLONE_TABLE_SECTION
686#define TARGET_ASM_TM_CLONE_TABLE_SECTION darwin_tm_clone_table_section
687
24c78b3a
RH
688#undef TARGET_ASM_RELOC_RW_MASK
689#define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
4746cf84 690
5eb99654 691/* Globalizing directive for a label. */
83bf7f5e 692#define GLOBAL_ASM_OP "\t.globl "
5eb99654 693#define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
ee890fe2 694
6ce4806b
MA
695/* Emit an assembler directive to set visibility for a symbol. Used
696 to support visibility attribute and Darwin's private extern
ff482c8d 697 feature. */
6ce4806b
MA
698#undef TARGET_ASM_ASSEMBLE_VISIBILITY
699#define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility
700
005c1a13 701/* Extra attributes for Darwin. */
dd2e44f0 702#define SUBTARGET_ATTRIBUTE_TABLE \
62d784f7
KT
703 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler, \
704 affects_type_identity } */ \
dd2e44f0 705 { "apple_kext_compatibility", 0, 0, false, true, false, \
62d784f7 706 darwin_handle_kext_attribute, false }, \
dd2e44f0 707 { "weak_import", 0, 0, true, false, false, \
62d784f7 708 darwin_handle_weak_import_attribute, false }
6ce4806b 709
ee890fe2 710#undef ASM_GENERATE_INTERNAL_LABEL
dd2e44f0
IS
711#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
712 sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM))
ee890fe2 713
8e3e233b
DP
714#undef TARGET_ASM_MARK_DECL_PRESERVED
715#define TARGET_ASM_MARK_DECL_PRESERVED darwin_mark_decl_preserved
716
11abc112
MM
717/* Set on a symbol with SYMBOL_FLAG_FUNCTION or
718 MACHO_SYMBOL_FLAG_VARIABLE to indicate that the function or
2e71a7a3
EC
719 variable has been defined in this translation unit.
720 When porting Mach-O to new architectures you need to make
721 sure these aren't clobbered by the backend. */
699c914a 722
11abc112
MM
723#define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP)
724#define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1)
725
699c914a
MS
726/* Set on a symbol to indicate when fix-and-continue style code
727 generation is being used and the symbol refers to a static symbol
728 that should be rebound from new instances of a translation unit to
729 the original instance of the data. */
730
731#define MACHO_SYMBOL_STATIC ((SYMBOL_FLAG_MACH_DEP) << 2)
732
ee890fe2
SS
733/* Symbolic names for various things we might know about a symbol. */
734
735enum machopic_addr_class {
736 MACHOPIC_UNDEFINED,
737 MACHOPIC_DEFINED_DATA,
738 MACHOPIC_UNDEFINED_DATA,
739 MACHOPIC_DEFINED_FUNCTION,
740 MACHOPIC_UNDEFINED_FUNCTION
741};
742
743/* Macros defining the various PIC cases. */
744
fee3eacd
IS
745#undef MACHO_DYNAMIC_NO_PIC_P
746#define MACHO_DYNAMIC_NO_PIC_P (TARGET_MACHO_DYNAMIC_NO_PIC)
747#undef MACHOPIC_INDIRECT
ab82a49f 748#define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
c446d1a7 749#define MACHOPIC_JUST_INDIRECT (MACHO_DYNAMIC_NO_PIC_P)
fee3eacd 750#undef MACHOPIC_PURE
c446d1a7 751#define MACHOPIC_PURE (flag_pic && ! MACHO_DYNAMIC_NO_PIC_P)
ee890fe2 752
b069de3b 753#undef TARGET_ENCODE_SECTION_INFO
fb49053f 754#define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
b069de3b 755#undef TARGET_STRIP_NAME_ENCODING
11abc112 756#define TARGET_STRIP_NAME_ENCODING default_strip_name_encoding
df56a27f 757
dd2e44f0
IS
758#define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \
759 do { \
760 const char *const stub_ = (STUB); \
761 char *buffer_ = (BUF); \
762 strcpy (buffer_, stub_); \
763 if (stub_[0] == '"') \
764 { \
765 strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \
766 } \
767 else \
768 { \
769 strcpy (buffer_ + (STUB_LENGTH), "_binder"); \
770 } \
771 } while (0)
772
773#define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
774 do { \
775 const char *const symbol_ = (SYMBOL); \
776 char *buffer_ = (BUF); \
777 if (name_needs_quotes (symbol_) && symbol_[0] != '"') \
778 { \
779 sprintf (buffer_, "\"%s\"", symbol_); \
780 } \
781 else \
782 { \
783 strcpy (buffer_, symbol_); \
784 } \
785 } while (0)
ee890fe2
SS
786
787/* Given a symbol name string, create the lazy pointer version
788 of the symbol name. */
789
dd2e44f0
IS
790#define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
791 do { \
792 const char *symbol_ = (SYMBOL); \
793 char *buffer_ = (BUF); \
794 if (symbol_[0] == '"') \
795 { \
796 strcpy (buffer_, "\"L"); \
797 strcpy (buffer_ + 2, symbol_ + 1); \
798 strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \
799 } \
800 else if (name_needs_quotes (symbol_)) \
801 { \
802 strcpy (buffer_, "\"L"); \
803 strcpy (buffer_ + 2, symbol_); \
804 strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \
805 } \
806 else \
807 { \
808 strcpy (buffer_, "L"); \
809 strcpy (buffer_ + 1, symbol_); \
810 strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \
811 } \
812 } while (0)
ee890fe2 813
4746cf84 814#define EH_FRAME_SECTION_NAME "__TEXT"
92b9a671 815#define EH_FRAME_SECTION_ATTR ",coalesced,no_toc+strip_static_syms+live_support"
4746cf84 816
f1a66265
GK
817/* Java runtime class list. */
818#define JCR_SECTION_NAME "__DATA,jcr,regular,no_dead_strip"
819
b069de3b 820#undef ASM_PREFERRED_EH_DATA_FORMAT
dd2e44f0
IS
821#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
822 (((CODE) == 2 && (GLOBAL) == 1) \
823 ? (DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4) : \
824 ((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
7606e68f 825
dd2e44f0
IS
826#define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \
827 darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2)
7606e68f 828
dd2e44f0
IS
829#define ASM_OUTPUT_DWARF_OFFSET(FILE,SIZE,LABEL,BASE) \
830 darwin_asm_output_dwarf_offset (FILE, SIZE, LABEL, BASE)
192d0f89 831
dd2e44f0
IS
832#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(ASM_OUT_FILE, ENCODING, SIZE, ADDR, DONE) \
833 if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) { \
834 darwin_non_lazy_pcrel (ASM_OUT_FILE, ADDR); \
835 goto DONE; \
836 }
4746cf84 837
5a25e0c5
DJ
838/* Experimentally, putting jump tables in text is faster on SPEC.
839 Also this is needed for correctness for coalesced functions. */
840
841#ifndef JUMP_TABLES_IN_TEXT_SECTION
31492595 842#define JUMP_TABLES_IN_TEXT_SECTION 1
5a25e0c5 843#endif
4746cf84 844
7606e68f 845#define TARGET_TERMINATE_DW2_EH_FRAME_INFO false
abe72dd8 846
d6b5193b 847#define TARGET_ASM_INIT_SECTIONS darwin_init_sections
4746cf84
MA
848#undef TARGET_ASM_NAMED_SECTION
849#define TARGET_ASM_NAMED_SECTION darwin_asm_named_section
4746cf84 850
dd2e44f0
IS
851#define DARWIN_REGISTER_TARGET_PRAGMAS() \
852 do { \
853 if (!flag_preprocess_only) \
854 cpp_register_pragma (parse_in, NULL, "mark", \
855 darwin_pragma_ignore, false); \
856 c_register_pragma (0, "options", darwin_pragma_options); \
857 c_register_pragma (0, "segment", darwin_pragma_ignore); \
858 c_register_pragma (0, "unused", darwin_pragma_unused); \
859 c_register_pragma (0, "ms_struct", darwin_pragma_ms_struct); \
860 } while (0)
2aa9948d
SS
861
862#undef ASM_APP_ON
863#define ASM_APP_ON ""
864#undef ASM_APP_OFF
865#define ASM_APP_OFF ""
213c4a8a 866
3dd53121
AP
867void darwin_register_frameworks (const char *, const char *, int);
868void darwin_register_objc_includes (const char *, const char *, int);
869#define TARGET_EXTRA_PRE_INCLUDES darwin_register_objc_includes
94d1613b
MS
870#define TARGET_EXTRA_INCLUDES darwin_register_frameworks
871
872void add_framework_path (char *);
873#define TARGET_OPTF add_framework_path
874
4969c0d8 875#define TARGET_POSIX_IO
8db4d7a1 876
2baeaa1b
MS
877#define WINT_TYPE "int"
878
953ff289
DN
879/* Every program on darwin links against libSystem which contains the pthread
880 routines, so there's no need to explicitly call out when doing threaded
881 work. */
23f99493 882
953ff289
DN
883#undef GOMP_SELF_SPECS
884#define GOMP_SELF_SPECS ""
255a9a1b
EB
885#undef GTM_SELF_SPECS
886#define GTM_SELF_SPECS ""
953ff289 887
dd2e44f0 888/* Darwin disables section anchors by default.
46a99b06 889 They should be enabled per arch where support exists in that arch. */
23f99493 890#define TARGET_ASM_OUTPUT_ANCHOR NULL
46a99b06 891#define DARWIN_SECTION_ANCHORS 0
23f99493 892
10e48e39 893#define HAVE_ENABLE_EXECUTE_STACK
c6c621d4 894
f475fd3c
MS
895/* For Apple KEXTs, we make the constructors return this to match gcc
896 2.95. */
897#define TARGET_CXX_CDTOR_RETURNS_THIS (darwin_kextabi_p)
f475fd3c
MS
898#define TARGET_KEXTABI flag_apple_kext
899
26705988 900/* We have target-specific builtins. */
1cd130b0 901#define SUBTARGET_FOLD_BUILTIN darwin_fold_builtin
26705988 902
91ebb981
IS
903#define TARGET_N_FORMAT_TYPES 1
904#define TARGET_FORMAT_TYPES darwin_additional_format_types
905
927b679c
IS
906#ifndef USED_FOR_TARGET
907extern void darwin_driver_init (unsigned int *,struct cl_decoded_option **);
dd2e44f0
IS
908#define GCC_DRIVER_HOST_INITIALIZATION \
909 darwin_driver_init (&decoded_options_count, &decoded_options)
927b679c 910#endif
e46b55d0 911
8cd01fe6
JDA
912/* The Apple assembler and linker do not support constructor priorities. */
913#undef SUPPORTS_INIT_PRIORITY
914#define SUPPORTS_INIT_PRIORITY 0
915
558c362a
IS
916/* When building cross-compilers (and native crosses) we shall default to
917 providing an osx-version-min of this unless overridden by the User. */
918#define DEF_MIN_OSX_VERSION "10.4"
919
213c4a8a 920#endif /* CONFIG_DARWIN_H */
This page took 2.7617 seconds and 5 git commands to generate.