]>
Commit | Line | Data |
---|---|---|
ee890fe2 | 1 | /* Target definitions for Darwin (Mac OS X) systems. |
5b86a469 KH |
2 | Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003, 2004, |
3 | 2005 | |
ee890fe2 SS |
4 | Free Software Foundation, Inc. |
5 | Contributed by Apple Computer Inc. | |
6 | ||
7ec022b2 | 7 | This file is part of GCC. |
ee890fe2 | 8 | |
7ec022b2 | 9 | GCC is free software; you can redistribute it and/or modify |
ee890fe2 SS |
10 | it under the terms of the GNU General Public License as published by |
11 | the Free Software Foundation; either version 2, or (at your option) | |
12 | any later version. | |
13 | ||
7ec022b2 | 14 | GCC is distributed in the hope that it will be useful, |
ee890fe2 SS |
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | GNU General Public License for more details. | |
18 | ||
19 | You should have received a copy of the GNU General Public License | |
7ec022b2 | 20 | along with GCC; see the file COPYING. If not, write to |
39d14dda KC |
21 | the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
22 | Boston, MA 02110-1301, USA. */ | |
ee890fe2 | 23 | |
213c4a8a GK |
24 | #ifndef CONFIG_DARWIN_H |
25 | #define CONFIG_DARWIN_H | |
26 | ||
ee890fe2 SS |
27 | /* The definitions in this file are common to all processor types |
28 | running Darwin, which is the kernel for Mac OS X. Darwin is | |
29 | basically a BSD user layer laid over a Mach kernel, then evolved | |
30 | for many years (at NeXT) in parallel with other Unix systems. So | |
31 | while the runtime is a somewhat idiosyncratic Mach-based thing, | |
32 | other definitions look like they would for a BSD variant. */ | |
33 | ||
34 | /* Although NeXT ran on many different architectures, as of Jan 2001 | |
35 | the only supported Darwin targets are PowerPC and x86. */ | |
36 | ||
7606e68f SS |
37 | /* One of Darwin's NeXT legacies is the Mach-O format, which is partly |
38 | like a.out and partly like COFF, with additional features like | |
39 | multi-architecture binary support. */ | |
40 | ||
41 | #define OBJECT_FORMAT_MACHO | |
42 | ||
d42093a1 | 43 | /* Suppress g++ attempt to link in the math library automatically. */ |
abe72dd8 | 44 | #define MATH_LIBRARY "" |
ee890fe2 SS |
45 | |
46 | /* We have atexit. */ | |
47 | ||
48 | #define HAVE_ATEXIT | |
49 | ||
50 | /* Define an empty body for the function do_global_dtors() in libgcc2.c. */ | |
51 | ||
52 | #define DO_GLOBAL_DTORS_BODY | |
53 | ||
54 | /* The string value for __SIZE_TYPE__. */ | |
55 | ||
56 | #ifndef SIZE_TYPE | |
57 | #define SIZE_TYPE "long unsigned int" | |
58 | #endif | |
59 | ||
60 | /* Type used for ptrdiff_t, as a string used in a declaration. */ | |
61 | ||
62 | #undef PTRDIFF_TYPE | |
63 | #define PTRDIFF_TYPE "int" | |
64 | ||
65 | /* wchar_t is int. */ | |
66 | ||
67 | #undef WCHAR_TYPE | |
68 | #define WCHAR_TYPE "int" | |
69 | #undef WCHAR_TYPE_SIZE | |
70 | #define WCHAR_TYPE_SIZE 32 | |
71 | ||
f37f462a SS |
72 | /* Default to using the NeXT-style runtime, since that's what is |
73 | pre-installed on Darwin systems. */ | |
74 | ||
75 | #define NEXT_OBJC_RUNTIME | |
76 | ||
ee890fe2 SS |
77 | /* Don't default to pcc-struct-return, because gcc is the only compiler, and |
78 | we want to retain compatibility with older gcc versions. */ | |
79 | ||
80 | #undef DEFAULT_PCC_STRUCT_RETURN | |
81 | #define DEFAULT_PCC_STRUCT_RETURN 0 | |
82 | ||
48aec0bc DP |
83 | /* This table intercepts weirdo options whose names would interfere |
84 | with normal driver conventions, and either translates them into | |
85 | standardly-named options, or adds a 'Z' so that they can get to | |
86 | specs processing without interference. | |
87 | ||
88 | Do not expand a linker option to "-Xlinker -<option>", since that | |
89 | forfeits the ability to control via spec strings later. However, | |
90 | as a special exception, do this translation with -filelist, because | |
91 | otherwise the driver will think there are no input files and quit. | |
92 | (The alternative would be to hack the driver to recognize -filelist | |
93 | specially, but it's simpler to use the translation table.) | |
94 | ||
95 | Note that an option name with a prefix that matches another option | |
96 | name, that also takes an argument, needs to be modified so the | |
97 | prefix is different, otherwise a '*' after the shorter option will | |
8bb418a3 | 98 | match with the longer one. |
7904f95f | 99 | |
8bb418a3 ZL |
100 | The SUBTARGET_OPTION_TRANSLATE_TABLE macro, which _must_ be defined |
101 | in gcc/config/{i386,rs6000}/darwin.h, should contain any additional | |
102 | command-line option translations specific to the particular target | |
103 | architecture. */ | |
7904f95f | 104 | |
48aec0bc DP |
105 | #define TARGET_OPTION_TRANSLATE_TABLE \ |
106 | { "-all_load", "-Zall_load" }, \ | |
107 | { "-allowable_client", "-Zallowable_client" }, \ | |
108 | { "-arch_errors_fatal", "-Zarch_errors_fatal" }, \ | |
109 | { "-bind_at_load", "-Zbind_at_load" }, \ | |
110 | { "-bundle", "-Zbundle" }, \ | |
111 | { "-bundle_loader", "-Zbundle_loader" }, \ | |
112 | { "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \ | |
5079843a DP |
113 | { "-dead_strip", "-Zdead_strip" }, \ |
114 | { "-no_dead_strip_inits_and_terms", "-Zno_dead_strip_inits_and_terms" }, \ | |
48aec0bc DP |
115 | { "-dependency-file", "-MF" }, \ |
116 | { "-dylib_file", "-Zdylib_file" }, \ | |
3ab68120 | 117 | { "-dynamic", "-Zdynamic" }, \ |
48aec0bc DP |
118 | { "-dynamiclib", "-Zdynamiclib" }, \ |
119 | { "-exported_symbols_list", "-Zexported_symbols_list" }, \ | |
910fbc16 DP |
120 | { "-gfull", "-g -fno-eliminate-unused-debug-symbols" }, \ |
121 | { "-gused", "-g -feliminate-unused-debug-symbols" }, \ | |
5826770c DP |
122 | { "-segaddr", "-Zsegaddr" }, \ |
123 | { "-segs_read_only_addr", "-Zsegs_read_only_addr" }, \ | |
124 | { "-segs_read_write_addr", "-Zsegs_read_write_addr" }, \ | |
125 | { "-seg_addr_table", "-Zseg_addr_table" }, \ | |
48aec0bc DP |
126 | { "-seg_addr_table_filename", "-Zseg_addr_table_filename" }, \ |
127 | { "-filelist", "-Xlinker -filelist -Xlinker" }, \ | |
94d1613b | 128 | { "-framework", "-Xlinker -framework -Xlinker" }, \ |
48aec0bc DP |
129 | { "-flat_namespace", "-Zflat_namespace" }, \ |
130 | { "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \ | |
131 | { "-force_flat_namespace", "-Zforce_flat_namespace" }, \ | |
132 | { "-image_base", "-Zimage_base" }, \ | |
133 | { "-init", "-Zinit" }, \ | |
134 | { "-install_name", "-Zinstall_name" }, \ | |
135 | { "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \ | |
136 | { "-multiply_defined", "-Zmultiply_defined" }, \ | |
137 | { "-multi_module", "-Zmulti_module" }, \ | |
138 | { "-static", "-static -Wa,-static" }, \ | |
139 | { "-single_module", "-Zsingle_module" }, \ | |
8bb418a3 ZL |
140 | { "-unexported_symbols_list", "-Zunexported_symbols_list" }, \ |
141 | SUBTARGET_OPTION_TRANSLATE_TABLE | |
8f4220dc | 142 | |
48aec0bc DP |
143 | /* These compiler options take n arguments. */ |
144 | ||
145 | #undef WORD_SWITCH_TAKES_ARG | |
146 | #define WORD_SWITCH_TAKES_ARG(STR) \ | |
147 | (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 : \ | |
148 | !strcmp (STR, "Zallowable_client") ? 1 : \ | |
149 | !strcmp (STR, "arch") ? 1 : \ | |
150 | !strcmp (STR, "arch_only") ? 1 : \ | |
151 | !strcmp (STR, "Zbundle_loader") ? 1 : \ | |
152 | !strcmp (STR, "client_name") ? 1 : \ | |
153 | !strcmp (STR, "compatibility_version") ? 1 : \ | |
154 | !strcmp (STR, "current_version") ? 1 : \ | |
155 | !strcmp (STR, "Zdylib_file") ? 1 : \ | |
156 | !strcmp (STR, "Zexported_symbols_list") ? 1 : \ | |
157 | !strcmp (STR, "Zimage_base") ? 1 : \ | |
158 | !strcmp (STR, "Zinit") ? 1 : \ | |
159 | !strcmp (STR, "Zinstall_name") ? 1 : \ | |
160 | !strcmp (STR, "Zmultiplydefinedunused") ? 1 : \ | |
161 | !strcmp (STR, "Zmultiply_defined") ? 1 : \ | |
162 | !strcmp (STR, "precomp-trustfile") ? 1 : \ | |
163 | !strcmp (STR, "read_only_relocs") ? 1 : \ | |
164 | !strcmp (STR, "sectcreate") ? 3 : \ | |
165 | !strcmp (STR, "sectorder") ? 3 : \ | |
5826770c DP |
166 | !strcmp (STR, "Zsegaddr") ? 2 : \ |
167 | !strcmp (STR, "Zsegs_read_only_addr") ? 1 : \ | |
168 | !strcmp (STR, "Zsegs_read_write_addr") ? 1 : \ | |
169 | !strcmp (STR, "Zseg_addr_table") ? 1 : \ | |
48aec0bc DP |
170 | !strcmp (STR, "Zseg_addr_table_filename") ?1 :\ |
171 | !strcmp (STR, "seg1addr") ? 1 : \ | |
172 | !strcmp (STR, "segprot") ? 3 : \ | |
48aec0bc DP |
173 | !strcmp (STR, "sub_library") ? 1 : \ |
174 | !strcmp (STR, "sub_umbrella") ? 1 : \ | |
175 | !strcmp (STR, "umbrella") ? 1 : \ | |
176 | !strcmp (STR, "undefined") ? 1 : \ | |
177 | !strcmp (STR, "Zunexported_symbols_list") ? 1 : \ | |
178 | !strcmp (STR, "Zweak_reference_mismatches") ? 1 : \ | |
179 | !strcmp (STR, "pagezero_size") ? 1 : \ | |
180 | !strcmp (STR, "segs_read_only_addr") ? 1 : \ | |
181 | !strcmp (STR, "segs_read_write_addr") ? 1 : \ | |
182 | !strcmp (STR, "sectalign") ? 3 : \ | |
183 | !strcmp (STR, "sectobjectsymbols") ? 2 : \ | |
184 | !strcmp (STR, "segcreate") ? 3 : \ | |
185 | !strcmp (STR, "dylinker_install_name") ? 1 : \ | |
186 | 0) | |
187 | ||
ed5b9f96 GK |
188 | /* Machine dependent cpp options. Don't add more options here, add |
189 | them to darwin_cpp_builtins in darwin-c.c. */ | |
ee890fe2 | 190 | |
ee890fe2 | 191 | #undef CPP_SPEC |
ed5b9f96 | 192 | #define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" |
ee890fe2 | 193 | |
48aec0bc DP |
194 | /* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus |
195 | precomp, libtool, and fat build additions. Also we | |
196 | don't specify a second %G after %L because libSystem is | |
197 | self-contained and doesn't need to link against libgcc.a. */ | |
198 | /* In general, random Darwin linker flags should go into LINK_SPEC | |
199 | instead of LINK_COMMAND_SPEC. The command spec is better for | |
200 | specifying the handling of options understood by generic Unix | |
201 | linkers, and for positional arguments like libraries. */ | |
202 | #define LINK_COMMAND_SPEC "\ | |
203 | %{!fdump=*:%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\ | |
204 | %{!Zdynamiclib:%(linker)}%{Zdynamiclib:/usr/bin/libtool} \ | |
205 | %l %X %{d} %{s} %{t} %{Z} \ | |
206 | %{!Zdynamiclib:%{A} %{e*} %{m} %{N} %{n} %{r} %{u*} %{x} %{z}} \ | |
207 | %{@:-o %f%u.out}%{!@:%{o*}%{!o:-o a.out}} \ | |
208 | %{!Zdynamiclib:%{!A:%{!nostdlib:%{!nostartfiles:%S}}}} \ | |
ee4c708e | 209 | %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate|coverage:-lgcov} \ |
7904f95f | 210 | %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %G %L}} \ |
ef262483 | 211 | %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}}" |
48aec0bc DP |
212 | |
213 | /* Please keep the random linker options in alphabetical order (modulo | |
214 | 'Z' and 'no' prefixes). Options that can only go to one of libtool | |
215 | or ld must be listed twice, under both !Zdynamiclib and | |
216 | Zdynamiclib, with one of the cases reporting an error. */ | |
217 | /* Note that options taking arguments may appear multiple times on a | |
218 | command line with different arguments each time, so put a * after | |
219 | their names so all of them get passed. */ | |
220 | #define LINK_SPEC \ | |
221 | "%{static}%{!static:-dynamic} \ | |
3dd53121 | 222 | %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}\ |
48aec0bc | 223 | %{!Zdynamiclib: \ |
965a7e90 GK |
224 | %{Zforce_cpusubtype_ALL:-arch %(darwin_arch) -force_cpusubtype_ALL} \ |
225 | %{!Zforce_cpusubtype_ALL:-arch %(darwin_subarch)} \ | |
48aec0bc DP |
226 | %{Zbundle:-bundle} \ |
227 | %{Zbundle_loader*:-bundle_loader %*} \ | |
228 | %{client_name*} \ | |
229 | %{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\ | |
230 | } \ | |
231 | %{current_version*:%e-current_version only allowed with -dynamiclib} \ | |
48aec0bc DP |
232 | %{Zforce_flat_namespace:-force_flat_namespace} \ |
233 | %{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \ | |
234 | %{keep_private_externs} \ | |
235 | %{private_bundle} \ | |
236 | } \ | |
237 | %{Zdynamiclib: \ | |
238 | %{Zbundle:%e-bundle not allowed with -dynamiclib} \ | |
239 | %{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \ | |
240 | %{client_name*:%e-client_name not allowed with -dynamiclib} \ | |
241 | %{compatibility_version*} \ | |
242 | %{current_version*} \ | |
965a7e90 GK |
243 | %{Zforce_cpusubtype_ALL:-arch_only %(darwin_arch)} \ |
244 | %{!Zforce_cpusubtype_ALL: -arch_only %(darwin_subarch)} \ | |
48aec0bc DP |
245 | %{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \ |
246 | %{Zinstall_name*:-install_name %*} \ | |
247 | %{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \ | |
248 | %{private_bundle:%e-private_bundle not allowed with -dynamiclib} \ | |
249 | } \ | |
250 | %{Zall_load:-all_load}%{Zdynamiclib:%{!Zall_load:-noall_load}} \ | |
251 | %{Zallowable_client*:-allowable_client %*} \ | |
252 | %{Zbind_at_load:-bind_at_load} \ | |
253 | %{Zarch_errors_fatal:-arch_errors_fatal} \ | |
5079843a DP |
254 | %{Zdead_strip:-dead_strip} \ |
255 | %{Zno_dead_strip_inits_and_terms:-no_dead_strip_inits_and_terms} \ | |
48aec0bc | 256 | %{Zdylib_file*:-dylib_file %*} \ |
3ab68120 | 257 | %{Zdynamic:-dynamic}\ |
48aec0bc DP |
258 | %{Zexported_symbols_list*:-exported_symbols_list %*} \ |
259 | %{Zflat_namespace:-flat_namespace} \ | |
260 | %{headerpad_max_install_names*} \ | |
261 | %{Zimage_base*:-image_base %*} \ | |
262 | %{Zinit*:-init %*} \ | |
960ac6e1 | 263 | %{mmacosx-version-min=*:-macosx_version_min %*} \ |
48aec0bc DP |
264 | %{nomultidefs} \ |
265 | %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \ | |
266 | %{Zmultiply_defined*:-multiply_defined %*} \ | |
267 | %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \ | |
e62f462e | 268 | %{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \ |
48aec0bc | 269 | %{read_only_relocs} \ |
5826770c DP |
270 | %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} \ |
271 | %{Zsegaddr*:-segaddr %*} \ | |
272 | %{Zsegs_read_only_addr*:-segs_read_only_addr %*} \ | |
273 | %{Zsegs_read_write_addr*:-segs_read_write_addr %*} \ | |
274 | %{Zseg_addr_table*: -seg_addr_table %*} \ | |
48aec0bc DP |
275 | %{Zseg_addr_table_filename*:-seg_addr_table_filename %*} \ |
276 | %{sub_library*} %{sub_umbrella*} \ | |
d0b73789 | 277 | %{isysroot*:-syslibroot %*} \ |
48aec0bc DP |
278 | %{twolevel_namespace} %{twolevel_namespace_hints} \ |
279 | %{umbrella*} \ | |
280 | %{undefined*} \ | |
281 | %{Zunexported_symbols_list*:-unexported_symbols_list %*} \ | |
282 | %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \ | |
f1a66265 | 283 | %{!Zweak_reference_mismatches*:-weak_reference_mismatches non-weak} \ |
48aec0bc DP |
284 | %{X} \ |
285 | %{y*} \ | |
286 | %{w} \ | |
287 | %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \ | |
288 | %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \ | |
289 | %{whatsloaded} %{dylinker_install_name*} \ | |
290 | %{dylinker} %{Mach} " | |
291 | ||
292 | ||
ed5b9f96 | 293 | /* Machine dependent libraries. */ |
ee890fe2 | 294 | |
5fa5a27c | 295 | #define LIB_SPEC "%{!static:-lSystem}" |
ee890fe2 | 296 | |
56309261 GK |
297 | /* Support -mmacosx-version-min by supplying different (stub) libgcc_s.dylib |
298 | libraries to link against, and by not linking against libgcc_s on | |
299 | earlier-than-10.3.9. | |
300 | ||
301 | Note that by default, -lgcc_eh is not linked against! This is | |
302 | because in a future version of Darwin the EH frame information may | |
303 | be in a new format, or the fallback routine might be changed; if | |
304 | you want to explicitly link against the static version of those | |
305 | routines, because you know you don't need to unwind through system | |
306 | libraries, you need to explicitly say -static-libgcc. | |
307 | ||
308 | If it is linked against, it has to be before -lgcc, because it may | |
309 | need symbols from -lgcc. */ | |
040b1c5a | 310 | #undef REAL_LIBGCC_SPEC |
56309261 GK |
311 | #define REAL_LIBGCC_SPEC \ |
312 | "%{static-libgcc|static: -lgcc_eh -lgcc; \ | |
313 | shared-libgcc|fexceptions: \ | |
314 | %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ | |
315 | %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ | |
316 | -lgcc; \ | |
317 | :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ | |
318 | %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ | |
319 | -lgcc}" | |
320 | ||
991b6592 | 321 | /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */ |
ee890fe2 | 322 | |
48aec0bc | 323 | #undef STARTFILE_SPEC |
ee890fe2 | 324 | #define STARTFILE_SPEC \ |
48aec0bc DP |
325 | "%{!Zdynamiclib:%{Zbundle:%{!static:-lbundle1.o}} \ |
326 | %{!Zbundle:%{pg:%{static:-lgcrt0.o} \ | |
327 | %{!static:%{object:-lgcrt0.o} \ | |
328 | %{!object:%{preload:-lgcrt0.o} \ | |
56309261 | 329 | %{!preload:-lgcrt1.o %(darwin_crt2)}}}} \ |
48aec0bc DP |
330 | %{!pg:%{static:-lcrt0.o} \ |
331 | %{!static:%{object:-lcrt0.o} \ | |
332 | %{!object:%{preload:-lcrt0.o} \ | |
56309261 | 333 | %{!preload:-lcrt1.o %(darwin_crt2)}}}}}}" |
7606e68f | 334 | |
3cfe49da GK |
335 | /* The native Darwin linker doesn't necessarily place files in the order |
336 | that they're specified on the link line. Thus, it is pointless | |
337 | to put anything in ENDFILE_SPEC. */ | |
338 | /* #define ENDFILE_SPEC "" */ | |
ee890fe2 | 339 | |
c4e18b1c | 340 | /* Default Darwin ASM_SPEC, very simple. */ |
965a7e90 GK |
341 | #define ASM_SPEC "-arch %(darwin_arch) \ |
342 | %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL}" | |
c4e18b1c | 343 | |
ee890fe2 SS |
344 | /* We use Dbx symbol format. */ |
345 | ||
23532de9 | 346 | #define DBX_DEBUGGING_INFO 1 |
ee890fe2 | 347 | |
eeab4d81 MS |
348 | /* Also enable Dwarf 2 as an option. */ |
349 | #define DWARF2_DEBUGGING_INFO | |
350 | #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG | |
351 | ||
352 | #define DEBUG_FRAME_SECTION "__DWARFA,__debug_frame,coalesced,no_toc+strip_static_syms" | |
353 | #define DEBUG_INFO_SECTION "__DWARFA,__debug_info" | |
354 | #define DEBUG_ABBREV_SECTION "__DWARFA,__debug_abbrev" | |
355 | #define DEBUG_ARANGES_SECTION "__DWARFA,__debug_aranges" | |
356 | #define DEBUG_MACINFO_SECTION "__DWARFA,__debug_macinfo" | |
357 | #define DEBUG_LINE_SECTION "__DWARFA,__debug_line" | |
358 | #define DEBUG_LOC_SECTION "__DWARFA,__debug_loc" | |
359 | #define DEBUG_PUBNAMES_SECTION "__DWARFA,__debug_pubnames" | |
360 | #define DEBUG_STR_SECTION "__DWARFA,__debug_str" | |
361 | #define DEBUG_RANGES_SECTION "__DWARFA,__debug_ranges" | |
362 | ||
ee890fe2 SS |
363 | /* When generating stabs debugging, use N_BINCL entries. */ |
364 | ||
365 | #define DBX_USE_BINCL | |
366 | ||
367 | /* There is no limit to the length of stabs strings. */ | |
368 | ||
369 | #define DBX_CONTIN_LENGTH 0 | |
370 | ||
991b6592 | 371 | /* gdb needs a null N_SO at the end of each file for scattered loading. */ |
ee890fe2 | 372 | |
3e487b21 | 373 | #define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END |
ee890fe2 | 374 | |
f1a66265 GK |
375 | /* GCC's definition of 'one_only' is the same as its definition of 'weak'. */ |
376 | #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) | |
4746cf84 | 377 | |
f1a66265 GK |
378 | /* Mach-O supports 'weak imports', and 'weak definitions' in coalesced |
379 | sections. machopic_select_section ensures that weak variables go in | |
380 | coalesced sections. Weak aliases (or any other kind of aliases) are | |
381 | not supported. Weak symbols that aren't visible outside the .s file | |
382 | are not supported. */ | |
383 | #define ASM_WEAKEN_DECL(FILE, DECL, NAME, ALIAS) \ | |
384 | do { \ | |
385 | if (ALIAS) \ | |
386 | { \ | |
d4ee4d25 | 387 | warning (0, "alias definitions not supported in Mach-O; ignored"); \ |
f1a66265 GK |
388 | break; \ |
389 | } \ | |
390 | \ | |
391 | if (! DECL_EXTERNAL (DECL) && TREE_PUBLIC (DECL)) \ | |
392 | targetm.asm_out.globalize_label (FILE, NAME); \ | |
393 | if (DECL_EXTERNAL (DECL)) \ | |
394 | fputs ("\t.weak_reference ", FILE); \ | |
005c1a13 GK |
395 | else if (! lookup_attribute ("weak", DECL_ATTRIBUTES (DECL)) \ |
396 | && lookup_attribute ("weak_import", DECL_ATTRIBUTES (DECL))) \ | |
397 | break; \ | |
f1a66265 GK |
398 | else if (TREE_PUBLIC (DECL)) \ |
399 | fputs ("\t.weak_definition ", FILE); \ | |
400 | else \ | |
401 | break; \ | |
402 | assemble_name (FILE, NAME); \ | |
403 | fputc ('\n', FILE); \ | |
404 | } while (0) | |
4746cf84 | 405 | |
72747d40 GK |
406 | /* Darwin has the pthread routines in libSystem, which every program |
407 | links to, so there's no need for weak-ness for that. */ | |
408 | #define GTHREAD_USE_WEAK 0 | |
409 | ||
7904f95f | 410 | /* The Darwin linker imposes two limitations on common symbols: they |
4746cf84 | 411 | can't have hidden visibility, and they can't appear in dylibs. As |
7904f95f | 412 | a consequence, we should never use common symbols to represent |
4746cf84 MA |
413 | vague linkage. */ |
414 | #undef USE_COMMON_FOR_ONE_ONLY | |
415 | #define USE_COMMON_FOR_ONE_ONLY 0 | |
416 | ||
0524c91d | 417 | /* The Darwin linker doesn't want coalesced symbols to appear in |
4746cf84 | 418 | a static archive's table of contents. */ |
0524c91d MA |
419 | #undef TARGET_WEAK_NOT_IN_ARCHIVE_TOC |
420 | #define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 1 | |
4746cf84 | 421 | |
9e170098 GK |
422 | /* On Darwin, we don't (at the time of writing) have linkonce sections |
423 | with names, so it's safe to make the class data not comdat. */ | |
424 | #define TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT hook_bool_void_false | |
425 | ||
4746cf84 MA |
426 | /* We make exception information linkonce. */ |
427 | #undef TARGET_USES_WEAK_UNWIND_INFO | |
428 | #define TARGET_USES_WEAK_UNWIND_INFO 1 | |
429 | ||
430 | /* We need to use a nonlocal label for the start of an EH frame: the | |
431 | Darwin linker requires that a coalesced section start with a label. */ | |
432 | #undef FRAME_BEGIN_LABEL | |
433 | #define FRAME_BEGIN_LABEL "EH_frame" | |
434 | ||
7904f95f | 435 | /* Emit a label for the FDE corresponding to DECL. EMPTY means |
4746cf84 MA |
436 | emit a label for an empty FDE. */ |
437 | #define TARGET_ASM_EMIT_UNWIND_LABEL darwin_emit_unwind_label | |
438 | ||
ee890fe2 SS |
439 | /* Our profiling scheme doesn't LP labels and counter words. */ |
440 | ||
9739c90c | 441 | #define NO_PROFILE_COUNTERS 1 |
ee890fe2 | 442 | |
ee890fe2 | 443 | #undef INIT_SECTION_ASM_OP |
d6b5193b | 444 | #define HAS_INIT_SECTION |
ee890fe2 SS |
445 | |
446 | #undef INVOKE__main | |
447 | ||
2cc07db4 RH |
448 | #define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor |
449 | #define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor | |
ee890fe2 | 450 | |
6ab9a3f4 SS |
451 | /* Always prefix with an underscore. */ |
452 | ||
453 | #define USER_LABEL_PREFIX "_" | |
454 | ||
ee890fe2 SS |
455 | /* Don't output a .file directive. That is only used by the assembler for |
456 | error reporting. */ | |
720b7001 ZW |
457 | #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE |
458 | #define TARGET_ASM_FILE_START_FILE_DIRECTIVE false | |
ee890fe2 | 459 | |
a5fe455b ZW |
460 | #undef TARGET_ASM_FILE_END |
461 | #define TARGET_ASM_FILE_END darwin_file_end | |
ee890fe2 | 462 | |
2aa9948d | 463 | #define ASM_OUTPUT_SKIP(FILE,SIZE) \ |
58e15542 | 464 | fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", SIZE) |
2aa9948d | 465 | |
991b6592 | 466 | /* Give ObjC methods pretty symbol names. */ |
ee890fe2 SS |
467 | |
468 | #undef OBJC_GEN_METHOD_LABEL | |
469 | #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \ | |
470 | do { if (CAT_NAME) \ | |
471 | sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \ | |
472 | (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \ | |
473 | else \ | |
474 | sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \ | |
475 | (CLASS_NAME), (SEL_NAME)); \ | |
476 | } while (0) | |
477 | ||
478 | /* The RTTI data (e.g., __ti4name) is common and public (and static), | |
479 | but it does need to be referenced via indirect PIC data pointers. | |
11abc112 | 480 | The machopic_define_symbol calls are telling the machopic subsystem |
ee890fe2 SS |
481 | that the name *is* defined in this module, so it doesn't need to |
482 | make them indirect. */ | |
483 | ||
484 | #undef ASM_DECLARE_OBJECT_NAME | |
485 | #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ | |
486 | do { \ | |
18f3e349 GK |
487 | const char *xname = NAME; \ |
488 | if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ | |
489 | xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
f1a66265 GK |
490 | if (! DECL_WEAK (DECL) \ |
491 | && ((TREE_STATIC (DECL) \ | |
492 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
493 | || DECL_INITIAL (DECL))) \ | |
11abc112 | 494 | machopic_define_symbol (DECL_RTL (DECL)); \ |
18f3e349 GK |
495 | if ((TREE_STATIC (DECL) \ |
496 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
497 | || DECL_INITIAL (DECL)) \ | |
c6a2438a | 498 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ |
18f3e349 | 499 | ASM_OUTPUT_LABEL (FILE, xname); \ |
f1a66265 | 500 | /* Darwin doesn't support zero-size objects, so give them a \ |
18f3e349 GK |
501 | byte. */ \ |
502 | if (tree_low_cst (DECL_SIZE_UNIT (DECL), 1) == 0) \ | |
503 | assemble_zeros (1); \ | |
93913281 SS |
504 | } while (0) |
505 | ||
f1a66265 | 506 | #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ |
93913281 | 507 | do { \ |
f1a66265 GK |
508 | const char *xname = NAME; \ |
509 | if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ | |
510 | xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
511 | if (! DECL_WEAK (DECL) \ | |
512 | && ((TREE_STATIC (DECL) \ | |
513 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
514 | || DECL_INITIAL (DECL))) \ | |
515 | machopic_define_symbol (DECL_RTL (DECL)); \ | |
516 | if ((TREE_STATIC (DECL) \ | |
517 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
518 | || DECL_INITIAL (DECL)) \ | |
c6a2438a | 519 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ |
f1a66265 | 520 | ASM_OUTPUT_LABEL (FILE, xname); \ |
ee890fe2 SS |
521 | } while (0) |
522 | ||
18f3e349 GK |
523 | #define ASM_DECLARE_CONSTANT_NAME(FILE, NAME, EXP, SIZE) \ |
524 | do { \ | |
525 | ASM_OUTPUT_LABEL (FILE, NAME); \ | |
526 | /* Darwin doesn't support zero-size objects, so give them a \ | |
527 | byte. */ \ | |
528 | if ((SIZE) == 0) \ | |
529 | assemble_zeros (1); \ | |
530 | } while (0) | |
531 | ||
ee890fe2 SS |
532 | /* Wrap new method names in quotes so the assembler doesn't gag. |
533 | Make Objective-C internal symbols local. */ | |
534 | ||
535 | #undef ASM_OUTPUT_LABELREF | |
772c5265 RH |
536 | #define ASM_OUTPUT_LABELREF(FILE,NAME) \ |
537 | do { \ | |
11abc112 | 538 | const char *xname = (NAME); \ |
1622229c AP |
539 | if (! strcmp (xname, "<pic base>")) \ |
540 | machopic_output_function_base_name(FILE); \ | |
541 | else if (xname[0] == '&' || xname[0] == '*') \ | |
772c5265 RH |
542 | { \ |
543 | int len = strlen (xname); \ | |
544 | if (len > 6 && !strcmp ("$stub", xname + len - 5)) \ | |
11abc112 | 545 | machopic_validate_stub_or_non_lazy_ptr (xname); \ |
772c5265 | 546 | else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \ |
11abc112 | 547 | machopic_validate_stub_or_non_lazy_ptr (xname); \ |
772c5265 | 548 | else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \ |
11abc112 | 549 | machopic_validate_stub_or_non_lazy_ptr (xname); \ |
2f7bb89d MS |
550 | else if (len > 15 && !strcmp ("$non_lazy_ptr\"", xname + len - 14)) \ |
551 | machopic_validate_stub_or_non_lazy_ptr (xname); \ | |
6e955430 ZL |
552 | if (xname[1] != '"' && name_needs_quotes (&xname[1])) \ |
553 | fprintf (FILE, "\"%s\"", &xname[1]); \ | |
554 | else \ | |
555 | fputs (&xname[1], FILE); \ | |
772c5265 RH |
556 | } \ |
557 | else if (xname[0] == '+' || xname[0] == '-') \ | |
558 | fprintf (FILE, "\"%s\"", xname); \ | |
559 | else if (!strncmp (xname, "_OBJC_", 6)) \ | |
560 | fprintf (FILE, "L%s", xname); \ | |
561 | else if (!strncmp (xname, ".objc_class_name_", 17)) \ | |
562 | fprintf (FILE, "%s", xname); \ | |
6e955430 ZL |
563 | else if (xname[0] != '"' && name_needs_quotes (xname)) \ |
564 | fprintf (FILE, "\"%s\"", xname); \ | |
772c5265 | 565 | else \ |
789a4ea3 | 566 | asm_fprintf (FILE, "%U%s", xname); \ |
ee890fe2 SS |
567 | } while (0) |
568 | ||
2aa9948d SS |
569 | /* Output before executable code. */ |
570 | #undef TEXT_SECTION_ASM_OP | |
f1a66265 | 571 | #define TEXT_SECTION_ASM_OP "\t.text" |
2aa9948d SS |
572 | |
573 | /* Output before writable data. */ | |
574 | ||
575 | #undef DATA_SECTION_ASM_OP | |
f1a66265 | 576 | #define DATA_SECTION_ASM_OP "\t.data" |
2aa9948d | 577 | |
ee890fe2 SS |
578 | #undef ALIGN_ASM_OP |
579 | #define ALIGN_ASM_OP ".align" | |
580 | ||
581 | #undef ASM_OUTPUT_ALIGN | |
582 | #define ASM_OUTPUT_ALIGN(FILE,LOG) \ | |
583 | if ((LOG) != 0) \ | |
584 | fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)) | |
585 | ||
586 | /* Ensure correct alignment of bss data. */ | |
587 | ||
7904f95f | 588 | #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL |
b2003250 RH |
589 | #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ |
590 | do { \ | |
8c3cc7d9 | 591 | unsigned HOST_WIDE_INT _new_size = SIZE; \ |
b2003250 RH |
592 | fputs (".lcomm ", (FILE)); \ |
593 | assemble_name ((FILE), (NAME)); \ | |
8c3cc7d9 MS |
594 | if (_new_size == 0) _new_size = 1; \ |
595 | fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", _new_size, \ | |
b2003250 RH |
596 | floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ |
597 | if ((DECL) && ((TREE_STATIC (DECL) \ | |
598 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
599 | || DECL_INITIAL (DECL))) \ | |
11abc112 MM |
600 | { \ |
601 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ | |
602 | machopic_define_symbol (DECL_RTL (DECL)); \ | |
603 | } \ | |
ee890fe2 SS |
604 | } while (0) |
605 | ||
ee890fe2 SS |
606 | /* The maximum alignment which the object file format can support. |
607 | For Mach-O, this is 2^15. */ | |
608 | ||
609 | #undef MAX_OFILE_ALIGNMENT | |
610 | #define MAX_OFILE_ALIGNMENT 0x8000 | |
611 | ||
d6b5193b RS |
612 | /* Declare the section variables. */ |
613 | #define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) extern section *NAME; | |
614 | #include "darwin-sections.def" | |
615 | #undef DEF_SECTION | |
ee890fe2 | 616 | |
ae46c4e0 RH |
617 | #undef TARGET_ASM_SELECT_SECTION |
618 | #define TARGET_ASM_SELECT_SECTION machopic_select_section | |
f1a66265 GK |
619 | #define USE_SELECT_SECTION_FOR_FUNCTIONS |
620 | ||
b64a1b53 RH |
621 | #undef TARGET_ASM_SELECT_RTX_SECTION |
622 | #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section | |
4746cf84 MA |
623 | #undef TARGET_ASM_UNIQUE_SECTION |
624 | #define TARGET_ASM_UNIQUE_SECTION darwin_unique_section | |
ab5c8549 JJ |
625 | #undef TARGET_ASM_FUNCTION_RODATA_SECTION |
626 | #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section | |
4746cf84 | 627 | |
ee890fe2 | 628 | |
28df0b5a | 629 | #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ |
9c808aad | 630 | do { \ |
28df0b5a | 631 | if (FILE) { \ |
ab82a49f | 632 | if (MACHOPIC_INDIRECT) \ |
28df0b5a | 633 | fprintf (FILE, "\t.lazy_reference "); \ |
ee890fe2 | 634 | else \ |
28df0b5a SS |
635 | fprintf (FILE, "\t.reference "); \ |
636 | assemble_name (FILE, NAME); \ | |
637 | fprintf (FILE, "\n"); \ | |
ee890fe2 SS |
638 | } \ |
639 | } while (0) | |
640 | ||
f60b945b SS |
641 | #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \ |
642 | do { \ | |
643 | if (FILE) { \ | |
644 | fprintf (FILE, "\t"); \ | |
9c808aad | 645 | assemble_name (FILE, NAME); \ |
f60b945b | 646 | fprintf (FILE, "=0\n"); \ |
5eb99654 | 647 | (*targetm.asm_out.globalize_label) (FILE, NAME); \ |
ee890fe2 SS |
648 | } \ |
649 | } while (0) | |
650 | ||
5eb99654 KG |
651 | /* Globalizing directive for a label. */ |
652 | #define GLOBAL_ASM_OP ".globl " | |
653 | #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label | |
ee890fe2 | 654 | |
6ce4806b MA |
655 | /* Emit an assembler directive to set visibility for a symbol. Used |
656 | to support visibility attribute and Darwin's private extern | |
ff482c8d | 657 | feature. */ |
6ce4806b MA |
658 | #undef TARGET_ASM_ASSEMBLE_VISIBILITY |
659 | #define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility | |
660 | ||
005c1a13 GK |
661 | /* Extra attributes for Darwin. */ |
662 | #define SUBTARGET_ATTRIBUTE_TABLE \ | |
663 | /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \ | |
664 | { "weak_import", 0, 0, true, false, false, \ | |
665 | darwin_handle_weak_import_attribute } | |
6ce4806b | 666 | |
ee890fe2 SS |
667 | #undef ASM_GENERATE_INTERNAL_LABEL |
668 | #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ | |
91dc3130 | 669 | sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM)) |
ee890fe2 | 670 | |
8e3e233b DP |
671 | #undef TARGET_ASM_MARK_DECL_PRESERVED |
672 | #define TARGET_ASM_MARK_DECL_PRESERVED darwin_mark_decl_preserved | |
673 | ||
11abc112 MM |
674 | /* Set on a symbol with SYMBOL_FLAG_FUNCTION or |
675 | MACHO_SYMBOL_FLAG_VARIABLE to indicate that the function or | |
676 | variable has been defined in this translation unit. */ | |
699c914a | 677 | |
11abc112 MM |
678 | #define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP) |
679 | #define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1) | |
680 | ||
699c914a MS |
681 | /* Set on a symbol to indicate when fix-and-continue style code |
682 | generation is being used and the symbol refers to a static symbol | |
683 | that should be rebound from new instances of a translation unit to | |
684 | the original instance of the data. */ | |
685 | ||
686 | #define MACHO_SYMBOL_STATIC ((SYMBOL_FLAG_MACH_DEP) << 2) | |
687 | ||
ee890fe2 SS |
688 | /* Symbolic names for various things we might know about a symbol. */ |
689 | ||
690 | enum machopic_addr_class { | |
691 | MACHOPIC_UNDEFINED, | |
692 | MACHOPIC_DEFINED_DATA, | |
693 | MACHOPIC_UNDEFINED_DATA, | |
694 | MACHOPIC_DEFINED_FUNCTION, | |
695 | MACHOPIC_UNDEFINED_FUNCTION | |
696 | }; | |
697 | ||
698 | /* Macros defining the various PIC cases. */ | |
699 | ||
ab82a49f AP |
700 | #define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC) |
701 | #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) | |
702 | #define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P) | |
703 | #define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P) | |
ee890fe2 | 704 | |
b069de3b | 705 | #undef TARGET_ENCODE_SECTION_INFO |
fb49053f | 706 | #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info |
b069de3b | 707 | #undef TARGET_STRIP_NAME_ENCODING |
11abc112 | 708 | #define TARGET_STRIP_NAME_ENCODING default_strip_name_encoding |
df56a27f | 709 | |
ee890fe2 SS |
710 | #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \ |
711 | do { \ | |
83182544 | 712 | const char *const stub_ = (STUB); \ |
ee890fe2 SS |
713 | char *buffer_ = (BUF); \ |
714 | strcpy (buffer_, stub_); \ | |
715 | if (stub_[0] == '"') \ | |
716 | { \ | |
717 | strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \ | |
718 | } \ | |
719 | else \ | |
720 | { \ | |
721 | strcpy (buffer_ + (STUB_LENGTH), "_binder"); \ | |
722 | } \ | |
723 | } while (0) | |
724 | ||
725 | #define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
726 | do { \ | |
83182544 | 727 | const char *const symbol_ = (SYMBOL); \ |
ee890fe2 SS |
728 | char *buffer_ = (BUF); \ |
729 | if (name_needs_quotes (symbol_) && symbol_[0] != '"') \ | |
730 | { \ | |
731 | sprintf (buffer_, "\"%s\"", symbol_); \ | |
732 | } \ | |
733 | else \ | |
734 | { \ | |
735 | strcpy (buffer_, symbol_); \ | |
736 | } \ | |
737 | } while (0) | |
738 | ||
739 | /* Given a symbol name string, create the lazy pointer version | |
740 | of the symbol name. */ | |
741 | ||
742 | #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
743 | do { \ | |
11abc112 | 744 | const char *symbol_ = (SYMBOL); \ |
ee890fe2 SS |
745 | char *buffer_ = (BUF); \ |
746 | if (symbol_[0] == '"') \ | |
747 | { \ | |
772c5265 | 748 | strcpy (buffer_, "\"L"); \ |
ee890fe2 SS |
749 | strcpy (buffer_ + 2, symbol_ + 1); \ |
750 | strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \ | |
751 | } \ | |
752 | else if (name_needs_quotes (symbol_)) \ | |
753 | { \ | |
754 | strcpy (buffer_, "\"L"); \ | |
755 | strcpy (buffer_ + 2, symbol_); \ | |
756 | strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \ | |
757 | } \ | |
758 | else \ | |
759 | { \ | |
760 | strcpy (buffer_, "L"); \ | |
761 | strcpy (buffer_ + 1, symbol_); \ | |
762 | strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \ | |
763 | } \ | |
764 | } while (0) | |
765 | ||
4746cf84 | 766 | #define EH_FRAME_SECTION_NAME "__TEXT" |
92b9a671 | 767 | #define EH_FRAME_SECTION_ATTR ",coalesced,no_toc+strip_static_syms+live_support" |
4746cf84 | 768 | |
f1a66265 GK |
769 | /* Java runtime class list. */ |
770 | #define JCR_SECTION_NAME "__DATA,jcr,regular,no_dead_strip" | |
771 | ||
b069de3b | 772 | #undef ASM_PREFERRED_EH_DATA_FORMAT |
abe72dd8 | 773 | #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ |
7606e68f | 774 | (((CODE) == 2 && (GLOBAL) == 1) \ |
59d8fe27 | 775 | ? (DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4) : \ |
7606e68f SS |
776 | ((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr) |
777 | ||
778 | #define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \ | |
779 | darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2) | |
780 | ||
4746cf84 MA |
781 | #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(ASM_OUT_FILE, ENCODING, SIZE, ADDR, DONE) \ |
782 | if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) { \ | |
783 | darwin_non_lazy_pcrel (ASM_OUT_FILE, ADDR); \ | |
784 | goto DONE; \ | |
785 | } | |
786 | ||
5a25e0c5 DJ |
787 | /* Experimentally, putting jump tables in text is faster on SPEC. |
788 | Also this is needed for correctness for coalesced functions. */ | |
789 | ||
790 | #ifndef JUMP_TABLES_IN_TEXT_SECTION | |
31492595 | 791 | #define JUMP_TABLES_IN_TEXT_SECTION 1 |
5a25e0c5 | 792 | #endif |
4746cf84 | 793 | |
7606e68f | 794 | #define TARGET_TERMINATE_DW2_EH_FRAME_INFO false |
abe72dd8 | 795 | |
d6b5193b | 796 | #define TARGET_ASM_INIT_SECTIONS darwin_init_sections |
4746cf84 MA |
797 | #undef TARGET_ASM_NAMED_SECTION |
798 | #define TARGET_ASM_NAMED_SECTION darwin_asm_named_section | |
4746cf84 | 799 | |
c58b209a NB |
800 | #define DARWIN_REGISTER_TARGET_PRAGMAS() \ |
801 | do { \ | |
802 | c_register_pragma (0, "mark", darwin_pragma_ignore); \ | |
803 | c_register_pragma (0, "options", darwin_pragma_options); \ | |
804 | c_register_pragma (0, "segment", darwin_pragma_ignore); \ | |
805 | c_register_pragma (0, "unused", darwin_pragma_unused); \ | |
0168a849 | 806 | } while (0) |
2aa9948d SS |
807 | |
808 | #undef ASM_APP_ON | |
809 | #define ASM_APP_ON "" | |
810 | #undef ASM_APP_OFF | |
811 | #define ASM_APP_OFF "" | |
213c4a8a | 812 | |
3dd53121 AP |
813 | void darwin_register_frameworks (const char *, const char *, int); |
814 | void darwin_register_objc_includes (const char *, const char *, int); | |
815 | #define TARGET_EXTRA_PRE_INCLUDES darwin_register_objc_includes | |
94d1613b MS |
816 | #define TARGET_EXTRA_INCLUDES darwin_register_frameworks |
817 | ||
818 | void add_framework_path (char *); | |
819 | #define TARGET_OPTF add_framework_path | |
820 | ||
4969c0d8 | 821 | #define TARGET_POSIX_IO |
8db4d7a1 | 822 | |
ed5b9f96 | 823 | /* All new versions of Darwin have C99 functions. */ |
68ece23d | 824 | #define TARGET_C99_FUNCTIONS 1 |
9b2d02a0 | 825 | |
2baeaa1b MS |
826 | #define WINT_TYPE "int" |
827 | ||
213c4a8a | 828 | #endif /* CONFIG_DARWIN_H */ |