]>
Commit | Line | Data |
---|---|---|
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 | 5 | This file is part of GCC. |
ee890fe2 | 6 | |
7ec022b2 | 7 | GCC is free software; you can redistribute it and/or modify |
ee890fe2 | 8 | it under the terms of the GNU General Public License as published by |
748086b7 | 9 | the Free Software Foundation; either version 3, or (at your option) |
ee890fe2 SS |
10 | any later version. |
11 | ||
7ec022b2 | 12 | GCC is distributed in the hope that it will be useful, |
ee890fe2 SS |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
748086b7 JJ |
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/>. */ | |
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. */ |
122 | extern 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 | 581 | int 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 |
659 | enum 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 | }; | |
665 | extern 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 | ||
735 | enum 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 |
867 | void darwin_register_frameworks (const char *, const char *, int); |
868 | void 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 | ||
872 | void 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 |
907 | extern 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 */ |