]>
Commit | Line | Data |
---|---|---|
ee890fe2 | 1 | /* Target definitions for Darwin (Mac OS X) systems. |
c58b209a | 2 | Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003 |
ee890fe2 SS |
3 | Free Software Foundation, Inc. |
4 | Contributed by Apple Computer Inc. | |
5 | ||
6 | This file is part of GNU CC. | |
7 | ||
8 | GNU CC is free software; you can redistribute it and/or modify | |
9 | it under the terms of the GNU General Public License as published by | |
10 | the Free Software Foundation; either version 2, or (at your option) | |
11 | any later version. | |
12 | ||
13 | GNU CC is distributed in the hope that it will be useful, | |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | GNU General Public License for more details. | |
17 | ||
18 | You should have received a copy of the GNU General Public License | |
19 | along with GNU CC; see the file COPYING. If not, write to | |
20 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
21 | Boston, MA 02111-1307, USA. */ | |
22 | ||
23 | /* The definitions in this file are common to all processor types | |
24 | running Darwin, which is the kernel for Mac OS X. Darwin is | |
25 | basically a BSD user layer laid over a Mach kernel, then evolved | |
26 | for many years (at NeXT) in parallel with other Unix systems. So | |
27 | while the runtime is a somewhat idiosyncratic Mach-based thing, | |
28 | other definitions look like they would for a BSD variant. */ | |
29 | ||
30 | /* Although NeXT ran on many different architectures, as of Jan 2001 | |
31 | the only supported Darwin targets are PowerPC and x86. */ | |
32 | ||
f37f462a SS |
33 | /* Technically, STANDARD_EXEC_PREFIX should be /usr/libexec/, but in |
34 | practice this makes it hard to install new compilers elsewhere, so | |
35 | leave it undefined and expect system builders to set configure args | |
36 | correctly. */ | |
ee890fe2 | 37 | |
7606e68f SS |
38 | /* One of Darwin's NeXT legacies is the Mach-O format, which is partly |
39 | like a.out and partly like COFF, with additional features like | |
40 | multi-architecture binary support. */ | |
41 | ||
42 | #define OBJECT_FORMAT_MACHO | |
43 | ||
abe72dd8 SS |
44 | /* Suppress g++ attempt to link in the math library automatically. |
45 | (Some Darwin versions have a libm, but they seem to cause problems | |
46 | for C++ executables.) */ | |
ee890fe2 | 47 | |
abe72dd8 | 48 | #define MATH_LIBRARY "" |
ee890fe2 SS |
49 | |
50 | /* We have atexit. */ | |
51 | ||
52 | #define HAVE_ATEXIT | |
53 | ||
54 | /* Define an empty body for the function do_global_dtors() in libgcc2.c. */ | |
55 | ||
56 | #define DO_GLOBAL_DTORS_BODY | |
57 | ||
58 | /* The string value for __SIZE_TYPE__. */ | |
59 | ||
60 | #ifndef SIZE_TYPE | |
61 | #define SIZE_TYPE "long unsigned int" | |
62 | #endif | |
63 | ||
64 | /* Type used for ptrdiff_t, as a string used in a declaration. */ | |
65 | ||
66 | #undef PTRDIFF_TYPE | |
67 | #define PTRDIFF_TYPE "int" | |
68 | ||
69 | /* wchar_t is int. */ | |
70 | ||
71 | #undef WCHAR_TYPE | |
72 | #define WCHAR_TYPE "int" | |
73 | #undef WCHAR_TYPE_SIZE | |
74 | #define WCHAR_TYPE_SIZE 32 | |
75 | ||
f37f462a SS |
76 | /* Default to using the NeXT-style runtime, since that's what is |
77 | pre-installed on Darwin systems. */ | |
78 | ||
79 | #define NEXT_OBJC_RUNTIME | |
80 | ||
ee890fe2 SS |
81 | /* Don't default to pcc-struct-return, because gcc is the only compiler, and |
82 | we want to retain compatibility with older gcc versions. */ | |
83 | ||
84 | #undef DEFAULT_PCC_STRUCT_RETURN | |
85 | #define DEFAULT_PCC_STRUCT_RETURN 0 | |
86 | ||
48aec0bc DP |
87 | /* This table intercepts weirdo options whose names would interfere |
88 | with normal driver conventions, and either translates them into | |
89 | standardly-named options, or adds a 'Z' so that they can get to | |
90 | specs processing without interference. | |
91 | ||
92 | Do not expand a linker option to "-Xlinker -<option>", since that | |
93 | forfeits the ability to control via spec strings later. However, | |
94 | as a special exception, do this translation with -filelist, because | |
95 | otherwise the driver will think there are no input files and quit. | |
96 | (The alternative would be to hack the driver to recognize -filelist | |
97 | specially, but it's simpler to use the translation table.) | |
98 | ||
99 | Note that an option name with a prefix that matches another option | |
100 | name, that also takes an argument, needs to be modified so the | |
101 | prefix is different, otherwise a '*' after the shorter option will | |
102 | match with the longer one. */ | |
48aec0bc DP |
103 | #define TARGET_OPTION_TRANSLATE_TABLE \ |
104 | { "-all_load", "-Zall_load" }, \ | |
105 | { "-allowable_client", "-Zallowable_client" }, \ | |
106 | { "-arch_errors_fatal", "-Zarch_errors_fatal" }, \ | |
107 | { "-bind_at_load", "-Zbind_at_load" }, \ | |
108 | { "-bundle", "-Zbundle" }, \ | |
109 | { "-bundle_loader", "-Zbundle_loader" }, \ | |
110 | { "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \ | |
111 | { "-dependency-file", "-MF" }, \ | |
112 | { "-dylib_file", "-Zdylib_file" }, \ | |
3ab68120 | 113 | { "-dynamic", "-Zdynamic" }, \ |
48aec0bc DP |
114 | { "-dynamiclib", "-Zdynamiclib" }, \ |
115 | { "-exported_symbols_list", "-Zexported_symbols_list" }, \ | |
116 | { "-seg_addr_table_filename", "-Zseg_addr_table_filename" }, \ | |
117 | { "-filelist", "-Xlinker -filelist -Xlinker" }, \ | |
118 | { "-flat_namespace", "-Zflat_namespace" }, \ | |
119 | { "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \ | |
120 | { "-force_flat_namespace", "-Zforce_flat_namespace" }, \ | |
121 | { "-image_base", "-Zimage_base" }, \ | |
122 | { "-init", "-Zinit" }, \ | |
123 | { "-install_name", "-Zinstall_name" }, \ | |
124 | { "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \ | |
125 | { "-multiply_defined", "-Zmultiply_defined" }, \ | |
126 | { "-multi_module", "-Zmulti_module" }, \ | |
127 | { "-static", "-static -Wa,-static" }, \ | |
128 | { "-single_module", "-Zsingle_module" }, \ | |
129 | { "-unexported_symbols_list", "-Zunexported_symbols_list" } | |
130 | ||
131 | /* These compiler options take n arguments. */ | |
132 | ||
133 | #undef WORD_SWITCH_TAKES_ARG | |
134 | #define WORD_SWITCH_TAKES_ARG(STR) \ | |
135 | (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 : \ | |
136 | !strcmp (STR, "Zallowable_client") ? 1 : \ | |
137 | !strcmp (STR, "arch") ? 1 : \ | |
138 | !strcmp (STR, "arch_only") ? 1 : \ | |
139 | !strcmp (STR, "Zbundle_loader") ? 1 : \ | |
140 | !strcmp (STR, "client_name") ? 1 : \ | |
141 | !strcmp (STR, "compatibility_version") ? 1 : \ | |
142 | !strcmp (STR, "current_version") ? 1 : \ | |
143 | !strcmp (STR, "Zdylib_file") ? 1 : \ | |
144 | !strcmp (STR, "Zexported_symbols_list") ? 1 : \ | |
145 | !strcmp (STR, "Zimage_base") ? 1 : \ | |
146 | !strcmp (STR, "Zinit") ? 1 : \ | |
147 | !strcmp (STR, "Zinstall_name") ? 1 : \ | |
148 | !strcmp (STR, "Zmultiplydefinedunused") ? 1 : \ | |
149 | !strcmp (STR, "Zmultiply_defined") ? 1 : \ | |
150 | !strcmp (STR, "precomp-trustfile") ? 1 : \ | |
151 | !strcmp (STR, "read_only_relocs") ? 1 : \ | |
152 | !strcmp (STR, "sectcreate") ? 3 : \ | |
153 | !strcmp (STR, "sectorder") ? 3 : \ | |
154 | !strcmp (STR, "Zseg_addr_table_filename") ?1 :\ | |
155 | !strcmp (STR, "seg1addr") ? 1 : \ | |
156 | !strcmp (STR, "segprot") ? 3 : \ | |
157 | !strcmp (STR, "seg_addr_table") ? 1 : \ | |
158 | !strcmp (STR, "sub_library") ? 1 : \ | |
159 | !strcmp (STR, "sub_umbrella") ? 1 : \ | |
160 | !strcmp (STR, "umbrella") ? 1 : \ | |
161 | !strcmp (STR, "undefined") ? 1 : \ | |
162 | !strcmp (STR, "Zunexported_symbols_list") ? 1 : \ | |
163 | !strcmp (STR, "Zweak_reference_mismatches") ? 1 : \ | |
164 | !strcmp (STR, "pagezero_size") ? 1 : \ | |
165 | !strcmp (STR, "segs_read_only_addr") ? 1 : \ | |
166 | !strcmp (STR, "segs_read_write_addr") ? 1 : \ | |
167 | !strcmp (STR, "sectalign") ? 3 : \ | |
168 | !strcmp (STR, "sectobjectsymbols") ? 2 : \ | |
169 | !strcmp (STR, "segcreate") ? 3 : \ | |
170 | !strcmp (STR, "dylinker_install_name") ? 1 : \ | |
171 | 0) | |
172 | ||
ee890fe2 SS |
173 | /* Machine dependent cpp options. */ |
174 | ||
ee890fe2 | 175 | #undef CPP_SPEC |
3ab68120 | 176 | #define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" |
ee890fe2 | 177 | |
48aec0bc DP |
178 | /* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus |
179 | precomp, libtool, and fat build additions. Also we | |
180 | don't specify a second %G after %L because libSystem is | |
181 | self-contained and doesn't need to link against libgcc.a. */ | |
182 | /* In general, random Darwin linker flags should go into LINK_SPEC | |
183 | instead of LINK_COMMAND_SPEC. The command spec is better for | |
184 | specifying the handling of options understood by generic Unix | |
185 | linkers, and for positional arguments like libraries. */ | |
186 | #define LINK_COMMAND_SPEC "\ | |
187 | %{!fdump=*:%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\ | |
188 | %{!Zdynamiclib:%(linker)}%{Zdynamiclib:/usr/bin/libtool} \ | |
189 | %l %X %{d} %{s} %{t} %{Z} \ | |
190 | %{!Zdynamiclib:%{A} %{e*} %{m} %{N} %{n} %{r} %{u*} %{x} %{z}} \ | |
191 | %{@:-o %f%u.out}%{!@:%{o*}%{!o:-o a.out}} \ | |
192 | %{!Zdynamiclib:%{!A:%{!nostdlib:%{!nostartfiles:%S}}}} \ | |
1f61a15d GK |
193 | %{L*} %(link_libgcc) %o %{fprofile-arcs:-lgcov} \ |
194 | %{!nostdlib:%{!nodefaultlibs:%G %L}} \ | |
48aec0bc DP |
195 | %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} \ |
196 | %{!--help:%{!no-c++filt|c++filt:| c++filt3 }} }}}}}}}}" | |
197 | ||
198 | /* Please keep the random linker options in alphabetical order (modulo | |
199 | 'Z' and 'no' prefixes). Options that can only go to one of libtool | |
200 | or ld must be listed twice, under both !Zdynamiclib and | |
201 | Zdynamiclib, with one of the cases reporting an error. */ | |
202 | /* Note that options taking arguments may appear multiple times on a | |
203 | command line with different arguments each time, so put a * after | |
204 | their names so all of them get passed. */ | |
205 | #define LINK_SPEC \ | |
206 | "%{static}%{!static:-dynamic} \ | |
207 | %{!Zdynamiclib: \ | |
208 | %{Zbundle:-bundle} \ | |
209 | %{Zbundle_loader*:-bundle_loader %*} \ | |
210 | %{client_name*} \ | |
211 | %{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\ | |
212 | } \ | |
213 | %{current_version*:%e-current_version only allowed with -dynamiclib} \ | |
214 | %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \ | |
215 | %{Zforce_flat_namespace:-force_flat_namespace} \ | |
216 | %{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \ | |
217 | %{keep_private_externs} \ | |
218 | %{private_bundle} \ | |
219 | } \ | |
220 | %{Zdynamiclib: \ | |
221 | %{Zbundle:%e-bundle not allowed with -dynamiclib} \ | |
222 | %{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \ | |
223 | %{client_name*:%e-client_name not allowed with -dynamiclib} \ | |
224 | %{compatibility_version*} \ | |
225 | %{current_version*} \ | |
226 | %{Zforce_cpusubtype_ALL:%e-force_cpusubtype_ALL not allowed with -dynamiclib} \ | |
227 | %{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \ | |
228 | %{Zinstall_name*:-install_name %*} \ | |
229 | %{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \ | |
230 | %{private_bundle:%e-private_bundle not allowed with -dynamiclib} \ | |
231 | } \ | |
232 | %{Zall_load:-all_load}%{Zdynamiclib:%{!Zall_load:-noall_load}} \ | |
233 | %{Zallowable_client*:-allowable_client %*} \ | |
234 | %{Zbind_at_load:-bind_at_load} \ | |
235 | %{Zarch_errors_fatal:-arch_errors_fatal} \ | |
236 | %{Zdylib_file*:-dylib_file %*} \ | |
3ab68120 | 237 | %{Zdynamic:-dynamic}\ |
48aec0bc DP |
238 | %{Zexported_symbols_list*:-exported_symbols_list %*} \ |
239 | %{Zflat_namespace:-flat_namespace} \ | |
240 | %{headerpad_max_install_names*} \ | |
241 | %{Zimage_base*:-image_base %*} \ | |
242 | %{Zinit*:-init %*} \ | |
243 | %{nomultidefs} \ | |
244 | %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \ | |
245 | %{Zmultiply_defined*:-multiply_defined %*} \ | |
246 | %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \ | |
247 | %{prebind} %{noprebind} %{prebind_all_twolevel_modules} \ | |
248 | %{read_only_relocs} \ | |
249 | %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} %{seg_addr_table*} \ | |
250 | %{Zseg_addr_table_filename*:-seg_addr_table_filename %*} \ | |
251 | %{sub_library*} %{sub_umbrella*} \ | |
252 | %{twolevel_namespace} %{twolevel_namespace_hints} \ | |
253 | %{umbrella*} \ | |
254 | %{undefined*} \ | |
255 | %{Zunexported_symbols_list*:-unexported_symbols_list %*} \ | |
256 | %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \ | |
257 | %{X} \ | |
258 | %{y*} \ | |
259 | %{w} \ | |
260 | %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \ | |
261 | %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \ | |
262 | %{whatsloaded} %{dylinker_install_name*} \ | |
263 | %{dylinker} %{Mach} " | |
264 | ||
265 | ||
ee890fe2 SS |
266 | /* Machine dependent libraries. */ |
267 | ||
268 | #undef LIB_SPEC | |
5fa5a27c | 269 | #define LIB_SPEC "%{!static:-lSystem}" |
ee890fe2 | 270 | |
991b6592 | 271 | /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */ |
ee890fe2 | 272 | |
48aec0bc | 273 | #undef STARTFILE_SPEC |
ee890fe2 | 274 | #define STARTFILE_SPEC \ |
48aec0bc DP |
275 | "%{!Zdynamiclib:%{Zbundle:%{!static:-lbundle1.o}} \ |
276 | %{!Zbundle:%{pg:%{static:-lgcrt0.o} \ | |
277 | %{!static:%{object:-lgcrt0.o} \ | |
278 | %{!object:%{preload:-lgcrt0.o} \ | |
279 | %{!preload:-lgcrt1.o -lcrt2.o}}}} \ | |
280 | %{!pg:%{static:-lcrt0.o} \ | |
281 | %{!static:%{object:-lcrt0.o} \ | |
282 | %{!object:%{preload:-lcrt0.o} \ | |
283 | %{!preload:-lcrt1.o -lcrt2.o}}}}}}" | |
7606e68f | 284 | |
3cfe49da GK |
285 | /* The native Darwin linker doesn't necessarily place files in the order |
286 | that they're specified on the link line. Thus, it is pointless | |
287 | to put anything in ENDFILE_SPEC. */ | |
288 | /* #define ENDFILE_SPEC "" */ | |
ee890fe2 | 289 | |
ee890fe2 SS |
290 | /* We use Dbx symbol format. */ |
291 | ||
23532de9 | 292 | #define DBX_DEBUGGING_INFO 1 |
ee890fe2 SS |
293 | |
294 | /* When generating stabs debugging, use N_BINCL entries. */ | |
295 | ||
296 | #define DBX_USE_BINCL | |
297 | ||
298 | /* There is no limit to the length of stabs strings. */ | |
299 | ||
300 | #define DBX_CONTIN_LENGTH 0 | |
301 | ||
991b6592 | 302 | /* gdb needs a null N_SO at the end of each file for scattered loading. */ |
ee890fe2 SS |
303 | |
304 | #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END | |
305 | #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ | |
306 | do { text_section (); \ | |
307 | fprintf (FILE, \ | |
308 | "\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n", "" , N_SO); \ | |
309 | } while (0) | |
310 | ||
311 | /* Our profiling scheme doesn't LP labels and counter words. */ | |
312 | ||
9739c90c | 313 | #define NO_PROFILE_COUNTERS 1 |
ee890fe2 | 314 | |
ee890fe2 SS |
315 | #undef INIT_SECTION_ASM_OP |
316 | #define INIT_SECTION_ASM_OP | |
317 | ||
318 | #undef INVOKE__main | |
319 | ||
2cc07db4 RH |
320 | #define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor |
321 | #define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor | |
ee890fe2 | 322 | |
6ab9a3f4 SS |
323 | /* Always prefix with an underscore. */ |
324 | ||
325 | #define USER_LABEL_PREFIX "_" | |
326 | ||
ee890fe2 SS |
327 | /* Don't output a .file directive. That is only used by the assembler for |
328 | error reporting. */ | |
720b7001 ZW |
329 | #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE |
330 | #define TARGET_ASM_FILE_START_FILE_DIRECTIVE false | |
ee890fe2 | 331 | |
a5fe455b ZW |
332 | #undef TARGET_ASM_FILE_END |
333 | #define TARGET_ASM_FILE_END darwin_file_end | |
ee890fe2 | 334 | |
2aa9948d | 335 | #define ASM_OUTPUT_SKIP(FILE,SIZE) \ |
58e15542 | 336 | fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", SIZE) |
2aa9948d | 337 | |
991b6592 | 338 | /* Give ObjC methods pretty symbol names. */ |
ee890fe2 SS |
339 | |
340 | #undef OBJC_GEN_METHOD_LABEL | |
341 | #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \ | |
342 | do { if (CAT_NAME) \ | |
343 | sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \ | |
344 | (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \ | |
345 | else \ | |
346 | sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \ | |
347 | (CLASS_NAME), (SEL_NAME)); \ | |
348 | } while (0) | |
349 | ||
350 | /* The RTTI data (e.g., __ti4name) is common and public (and static), | |
351 | but it does need to be referenced via indirect PIC data pointers. | |
352 | The machopic_define_name calls are telling the machopic subsystem | |
353 | that the name *is* defined in this module, so it doesn't need to | |
354 | make them indirect. */ | |
355 | ||
356 | #undef ASM_DECLARE_OBJECT_NAME | |
357 | #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ | |
358 | do { \ | |
91dc3130 | 359 | const char *xname = NAME; \ |
ee890fe2 SS |
360 | if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ |
361 | xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
362 | if ((TREE_STATIC (DECL) \ | |
363 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
364 | || DECL_INITIAL (DECL)) \ | |
365 | machopic_define_name (xname); \ | |
df56a27f SS |
366 | if ((TREE_STATIC (DECL) \ |
367 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
368 | || DECL_INITIAL (DECL)) \ | |
c6a2438a | 369 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ |
ee890fe2 | 370 | ASM_OUTPUT_LABEL (FILE, xname); \ |
93913281 SS |
371 | } while (0) |
372 | ||
373 | #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ | |
374 | do { \ | |
91dc3130 | 375 | const char *xname = NAME; \ |
93913281 SS |
376 | if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ |
377 | xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
378 | if ((TREE_STATIC (DECL) \ | |
379 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
380 | || DECL_INITIAL (DECL)) \ | |
381 | machopic_define_name (xname); \ | |
382 | if ((TREE_STATIC (DECL) \ | |
383 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
384 | || DECL_INITIAL (DECL)) \ | |
c6a2438a | 385 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ |
93913281 | 386 | ASM_OUTPUT_LABEL (FILE, xname); \ |
b7fb9feb TC |
387 | /* Avoid generating stubs for functions we've just defined by \ |
388 | outputting any required stub name label now. */ \ | |
389 | machopic_output_possible_stub_label (FILE, xname); \ | |
ee890fe2 SS |
390 | } while (0) |
391 | ||
392 | /* Wrap new method names in quotes so the assembler doesn't gag. | |
393 | Make Objective-C internal symbols local. */ | |
394 | ||
395 | #undef ASM_OUTPUT_LABELREF | |
772c5265 RH |
396 | #define ASM_OUTPUT_LABELREF(FILE,NAME) \ |
397 | do { \ | |
398 | const char *xname = darwin_strip_name_encoding (NAME); \ | |
399 | if (xname[0] == '&' || xname[0] == '*') \ | |
400 | { \ | |
401 | int len = strlen (xname); \ | |
402 | if (len > 6 && !strcmp ("$stub", xname + len - 5)) \ | |
403 | machopic_validate_stub_or_non_lazy_ptr (xname, 1); \ | |
404 | else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \ | |
405 | machopic_validate_stub_or_non_lazy_ptr (xname, 1); \ | |
406 | else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \ | |
407 | machopic_validate_stub_or_non_lazy_ptr (xname, 0); \ | |
408 | fputs (&xname[1], FILE); \ | |
409 | } \ | |
410 | else if (xname[0] == '+' || xname[0] == '-') \ | |
411 | fprintf (FILE, "\"%s\"", xname); \ | |
412 | else if (!strncmp (xname, "_OBJC_", 6)) \ | |
413 | fprintf (FILE, "L%s", xname); \ | |
414 | else if (!strncmp (xname, ".objc_class_name_", 17)) \ | |
415 | fprintf (FILE, "%s", xname); \ | |
416 | else \ | |
417 | fprintf (FILE, "_%s", xname); \ | |
ee890fe2 SS |
418 | } while (0) |
419 | ||
2aa9948d SS |
420 | /* Output before executable code. */ |
421 | #undef TEXT_SECTION_ASM_OP | |
422 | #define TEXT_SECTION_ASM_OP ".text" | |
423 | ||
424 | /* Output before writable data. */ | |
425 | ||
426 | #undef DATA_SECTION_ASM_OP | |
427 | #define DATA_SECTION_ASM_OP ".data" | |
428 | ||
ee890fe2 SS |
429 | #undef ALIGN_ASM_OP |
430 | #define ALIGN_ASM_OP ".align" | |
431 | ||
432 | #undef ASM_OUTPUT_ALIGN | |
433 | #define ASM_OUTPUT_ALIGN(FILE,LOG) \ | |
434 | if ((LOG) != 0) \ | |
435 | fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)) | |
436 | ||
437 | /* Ensure correct alignment of bss data. */ | |
438 | ||
439 | #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL | |
b2003250 RH |
440 | #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ |
441 | do { \ | |
442 | fputs (".lcomm ", (FILE)); \ | |
443 | assemble_name ((FILE), (NAME)); \ | |
58e15542 | 444 | fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", (SIZE), \ |
b2003250 RH |
445 | floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ |
446 | if ((DECL) && ((TREE_STATIC (DECL) \ | |
447 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
448 | || DECL_INITIAL (DECL))) \ | |
c6a2438a | 449 | (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ |
b2003250 RH |
450 | if ((DECL) && ((TREE_STATIC (DECL) \ |
451 | && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
452 | || DECL_INITIAL (DECL))) \ | |
453 | machopic_define_name (NAME); \ | |
ee890fe2 SS |
454 | } while (0) |
455 | ||
ee890fe2 SS |
456 | /* The maximum alignment which the object file format can support. |
457 | For Mach-O, this is 2^15. */ | |
458 | ||
459 | #undef MAX_OFILE_ALIGNMENT | |
460 | #define MAX_OFILE_ALIGNMENT 0x8000 | |
461 | ||
991b6592 | 462 | /* Create new Mach-O sections. */ |
ee890fe2 SS |
463 | |
464 | #undef SECTION_FUNCTION | |
70fb5453 | 465 | #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, OBJC) \ |
91dc3130 | 466 | extern void FUNCTION PARAMS ((void)); \ |
ee890fe2 SS |
467 | void \ |
468 | FUNCTION () \ | |
469 | { \ | |
70fb5453 | 470 | if (in_section != SECTION) \ |
ee890fe2 SS |
471 | { \ |
472 | if (OBJC) \ | |
473 | objc_section_init (); \ | |
474 | data_section (); \ | |
475 | if (asm_out_file) \ | |
476 | fprintf (asm_out_file, "%s\n", DIRECTIVE); \ | |
477 | in_section = SECTION; \ | |
478 | } \ | |
479 | } \ | |
480 | ||
ee890fe2 SS |
481 | /* Darwin uses many types of special sections. */ |
482 | ||
483 | #undef EXTRA_SECTIONS | |
484 | #define EXTRA_SECTIONS \ | |
485 | in_const, in_const_data, in_cstring, in_literal4, in_literal8, \ | |
486 | in_constructor, in_destructor, in_mod_init, in_mod_term, \ | |
487 | in_objc_class, in_objc_meta_class, in_objc_category, \ | |
488 | in_objc_class_vars, in_objc_instance_vars, \ | |
489 | in_objc_cls_meth, in_objc_inst_meth, \ | |
490 | in_objc_cat_cls_meth, in_objc_cat_inst_meth, \ | |
491 | in_objc_selector_refs, \ | |
492 | in_objc_selector_fixup, \ | |
493 | in_objc_symbols, in_objc_module_info, \ | |
494 | in_objc_protocol, in_objc_string_object, \ | |
495 | in_objc_constant_string_object, \ | |
496 | in_objc_class_names, in_objc_meth_var_names, \ | |
497 | in_objc_meth_var_types, in_objc_cls_refs, \ | |
498 | in_machopic_nl_symbol_ptr, \ | |
499 | in_machopic_lazy_symbol_ptr, \ | |
500 | in_machopic_symbol_stub, \ | |
d3c300d2 | 501 | in_machopic_symbol_stub1, \ |
ee890fe2 | 502 | in_machopic_picsymbol_stub, \ |
d3c300d2 | 503 | in_machopic_picsymbol_stub1, \ |
07c9d2eb | 504 | in_darwin_exception, in_darwin_eh_frame, \ |
ee890fe2 SS |
505 | num_sections |
506 | ||
507 | #undef EXTRA_SECTION_FUNCTIONS | |
508 | #define EXTRA_SECTION_FUNCTIONS \ | |
91dc3130 | 509 | static void objc_section_init PARAMS ((void)); \ |
ee890fe2 SS |
510 | SECTION_FUNCTION (const_section, \ |
511 | in_const, \ | |
70fb5453 | 512 | ".const", 0) \ |
ee890fe2 SS |
513 | SECTION_FUNCTION (const_data_section, \ |
514 | in_const_data, \ | |
70fb5453 | 515 | ".const_data", 0) \ |
ee890fe2 SS |
516 | SECTION_FUNCTION (cstring_section, \ |
517 | in_cstring, \ | |
70fb5453 | 518 | ".cstring", 0) \ |
ee890fe2 SS |
519 | SECTION_FUNCTION (literal4_section, \ |
520 | in_literal4, \ | |
70fb5453 | 521 | ".literal4", 0) \ |
ee890fe2 SS |
522 | SECTION_FUNCTION (literal8_section, \ |
523 | in_literal8, \ | |
70fb5453 | 524 | ".literal8", 0) \ |
ee890fe2 SS |
525 | SECTION_FUNCTION (constructor_section, \ |
526 | in_constructor, \ | |
70fb5453 | 527 | ".constructor", 0) \ |
ee890fe2 SS |
528 | SECTION_FUNCTION (mod_init_section, \ |
529 | in_mod_init, \ | |
70fb5453 | 530 | ".mod_init_func", 0) \ |
ee890fe2 SS |
531 | SECTION_FUNCTION (mod_term_section, \ |
532 | in_mod_term, \ | |
70fb5453 | 533 | ".mod_term_func", 0) \ |
ee890fe2 SS |
534 | SECTION_FUNCTION (destructor_section, \ |
535 | in_destructor, \ | |
70fb5453 | 536 | ".destructor", 0) \ |
ee890fe2 SS |
537 | SECTION_FUNCTION (objc_class_section, \ |
538 | in_objc_class, \ | |
70fb5453 | 539 | ".objc_class", 1) \ |
ee890fe2 SS |
540 | SECTION_FUNCTION (objc_meta_class_section, \ |
541 | in_objc_meta_class, \ | |
70fb5453 | 542 | ".objc_meta_class", 1) \ |
ee890fe2 SS |
543 | SECTION_FUNCTION (objc_category_section, \ |
544 | in_objc_category, \ | |
70fb5453 | 545 | ".objc_category", 1) \ |
ee890fe2 SS |
546 | SECTION_FUNCTION (objc_class_vars_section, \ |
547 | in_objc_class_vars, \ | |
70fb5453 | 548 | ".objc_class_vars", 1) \ |
ee890fe2 SS |
549 | SECTION_FUNCTION (objc_instance_vars_section, \ |
550 | in_objc_instance_vars, \ | |
70fb5453 | 551 | ".objc_instance_vars", 1) \ |
ee890fe2 SS |
552 | SECTION_FUNCTION (objc_cls_meth_section, \ |
553 | in_objc_cls_meth, \ | |
70fb5453 | 554 | ".objc_cls_meth", 1) \ |
ee890fe2 SS |
555 | SECTION_FUNCTION (objc_inst_meth_section, \ |
556 | in_objc_inst_meth, \ | |
70fb5453 | 557 | ".objc_inst_meth", 1) \ |
ee890fe2 SS |
558 | SECTION_FUNCTION (objc_cat_cls_meth_section, \ |
559 | in_objc_cat_cls_meth, \ | |
70fb5453 | 560 | ".objc_cat_cls_meth", 1) \ |
ee890fe2 SS |
561 | SECTION_FUNCTION (objc_cat_inst_meth_section, \ |
562 | in_objc_cat_inst_meth, \ | |
70fb5453 | 563 | ".objc_cat_inst_meth", 1) \ |
ee890fe2 SS |
564 | SECTION_FUNCTION (objc_selector_refs_section, \ |
565 | in_objc_selector_refs, \ | |
70fb5453 | 566 | ".objc_message_refs", 1) \ |
ee890fe2 SS |
567 | SECTION_FUNCTION (objc_selector_fixup_section, \ |
568 | in_objc_selector_fixup, \ | |
70fb5453 | 569 | ".section __OBJC, __sel_fixup", 1) \ |
ee890fe2 SS |
570 | SECTION_FUNCTION (objc_symbols_section, \ |
571 | in_objc_symbols, \ | |
70fb5453 | 572 | ".objc_symbols", 1) \ |
ee890fe2 SS |
573 | SECTION_FUNCTION (objc_module_info_section, \ |
574 | in_objc_module_info, \ | |
70fb5453 | 575 | ".objc_module_info", 1) \ |
ee890fe2 SS |
576 | SECTION_FUNCTION (objc_protocol_section, \ |
577 | in_objc_protocol, \ | |
70fb5453 | 578 | ".objc_protocol", 1) \ |
ee890fe2 SS |
579 | SECTION_FUNCTION (objc_string_object_section, \ |
580 | in_objc_string_object, \ | |
70fb5453 | 581 | ".objc_string_object", 1) \ |
ee890fe2 SS |
582 | SECTION_FUNCTION (objc_constant_string_object_section, \ |
583 | in_objc_constant_string_object, \ | |
70fb5453 | 584 | ".section __OBJC, __cstring_object", 1) \ |
ee890fe2 SS |
585 | SECTION_FUNCTION (objc_class_names_section, \ |
586 | in_objc_class_names, \ | |
70fb5453 | 587 | ".objc_class_names", 1) \ |
ee890fe2 SS |
588 | SECTION_FUNCTION (objc_meth_var_names_section, \ |
589 | in_objc_meth_var_names, \ | |
70fb5453 | 590 | ".objc_meth_var_names", 1) \ |
ee890fe2 SS |
591 | SECTION_FUNCTION (objc_meth_var_types_section, \ |
592 | in_objc_meth_var_types, \ | |
70fb5453 | 593 | ".objc_meth_var_types", 1) \ |
ee890fe2 SS |
594 | SECTION_FUNCTION (objc_cls_refs_section, \ |
595 | in_objc_cls_refs, \ | |
70fb5453 | 596 | ".objc_cls_refs", 1) \ |
ee890fe2 SS |
597 | \ |
598 | SECTION_FUNCTION (machopic_lazy_symbol_ptr_section, \ | |
599 | in_machopic_lazy_symbol_ptr, \ | |
70fb5453 | 600 | ".lazy_symbol_pointer", 0) \ |
ee890fe2 SS |
601 | SECTION_FUNCTION (machopic_nl_symbol_ptr_section, \ |
602 | in_machopic_nl_symbol_ptr, \ | |
70fb5453 | 603 | ".non_lazy_symbol_pointer", 0) \ |
ee890fe2 SS |
604 | SECTION_FUNCTION (machopic_symbol_stub_section, \ |
605 | in_machopic_symbol_stub, \ | |
70fb5453 | 606 | ".symbol_stub", 0) \ |
d3c300d2 DJ |
607 | SECTION_FUNCTION (machopic_symbol_stub1_section, \ |
608 | in_machopic_symbol_stub1, \ | |
609 | ".section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16", 0)\ | |
ee890fe2 SS |
610 | SECTION_FUNCTION (machopic_picsymbol_stub_section, \ |
611 | in_machopic_picsymbol_stub, \ | |
70fb5453 | 612 | ".picsymbol_stub", 0) \ |
d3c300d2 DJ |
613 | SECTION_FUNCTION (machopic_picsymbol_stub1_section, \ |
614 | in_machopic_picsymbol_stub1, \ | |
615 | ".section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32", 0)\ | |
abe72dd8 SS |
616 | SECTION_FUNCTION (darwin_exception_section, \ |
617 | in_darwin_exception, \ | |
7606e68f | 618 | ".section __DATA,__gcc_except_tab", 0) \ |
07c9d2eb SS |
619 | SECTION_FUNCTION (darwin_eh_frame_section, \ |
620 | in_darwin_eh_frame, \ | |
621 | ".section __TEXT,__eh_frame", 0) \ | |
ee890fe2 | 622 | \ |
91dc3130 | 623 | static void \ |
ee890fe2 SS |
624 | objc_section_init () \ |
625 | { \ | |
626 | static int been_here = 0; \ | |
627 | \ | |
628 | if (been_here == 0) \ | |
629 | { \ | |
630 | been_here = 1; \ | |
631 | /* written, cold -> hot */ \ | |
632 | objc_cat_cls_meth_section (); \ | |
633 | objc_cat_inst_meth_section (); \ | |
634 | objc_string_object_section (); \ | |
635 | objc_constant_string_object_section (); \ | |
636 | objc_selector_refs_section (); \ | |
637 | objc_selector_fixup_section (); \ | |
638 | objc_cls_refs_section (); \ | |
639 | objc_class_section (); \ | |
640 | objc_meta_class_section (); \ | |
641 | /* shared, hot -> cold */ \ | |
642 | objc_cls_meth_section (); \ | |
643 | objc_inst_meth_section (); \ | |
644 | objc_protocol_section (); \ | |
645 | objc_class_names_section (); \ | |
646 | objc_meth_var_types_section (); \ | |
647 | objc_meth_var_names_section (); \ | |
648 | objc_category_section (); \ | |
649 | objc_class_vars_section (); \ | |
650 | objc_instance_vars_section (); \ | |
651 | objc_module_info_section (); \ | |
652 | objc_symbols_section (); \ | |
653 | } \ | |
ee890fe2 SS |
654 | } |
655 | ||
ee890fe2 SS |
656 | #define READONLY_DATA_SECTION const_section |
657 | ||
ae46c4e0 RH |
658 | #undef TARGET_ASM_SELECT_SECTION |
659 | #define TARGET_ASM_SELECT_SECTION machopic_select_section | |
b64a1b53 RH |
660 | #undef TARGET_ASM_SELECT_RTX_SECTION |
661 | #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section | |
ee890fe2 | 662 | |
28df0b5a SS |
663 | #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ |
664 | do { \ | |
665 | if (FILE) { \ | |
ab82a49f | 666 | if (MACHOPIC_INDIRECT) \ |
28df0b5a | 667 | fprintf (FILE, "\t.lazy_reference "); \ |
ee890fe2 | 668 | else \ |
28df0b5a SS |
669 | fprintf (FILE, "\t.reference "); \ |
670 | assemble_name (FILE, NAME); \ | |
671 | fprintf (FILE, "\n"); \ | |
ee890fe2 SS |
672 | } \ |
673 | } while (0) | |
674 | ||
f60b945b SS |
675 | #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \ |
676 | do { \ | |
677 | if (FILE) { \ | |
678 | fprintf (FILE, "\t"); \ | |
679 | assemble_name (FILE, NAME); \ | |
680 | fprintf (FILE, "=0\n"); \ | |
5eb99654 | 681 | (*targetm.asm_out.globalize_label) (FILE, NAME); \ |
ee890fe2 SS |
682 | } \ |
683 | } while (0) | |
684 | ||
5eb99654 KG |
685 | /* Globalizing directive for a label. */ |
686 | #define GLOBAL_ASM_OP ".globl " | |
687 | #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label | |
ee890fe2 SS |
688 | |
689 | #undef ASM_GENERATE_INTERNAL_LABEL | |
690 | #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ | |
91dc3130 | 691 | sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM)) |
ee890fe2 | 692 | |
ee890fe2 SS |
693 | /* Since we have a separate readonly data section, define this so that |
694 | jump tables end up in text rather than data. */ | |
695 | ||
696 | #ifndef JUMP_TABLES_IN_TEXT_SECTION | |
697 | #define JUMP_TABLES_IN_TEXT_SECTION 1 | |
698 | #endif | |
699 | ||
700 | /* Symbolic names for various things we might know about a symbol. */ | |
701 | ||
702 | enum machopic_addr_class { | |
703 | MACHOPIC_UNDEFINED, | |
704 | MACHOPIC_DEFINED_DATA, | |
705 | MACHOPIC_UNDEFINED_DATA, | |
706 | MACHOPIC_DEFINED_FUNCTION, | |
707 | MACHOPIC_UNDEFINED_FUNCTION | |
708 | }; | |
709 | ||
710 | /* Macros defining the various PIC cases. */ | |
711 | ||
ab82a49f AP |
712 | #define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC) |
713 | #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) | |
714 | #define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P) | |
715 | #define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P) | |
ee890fe2 | 716 | |
b069de3b | 717 | #undef TARGET_ENCODE_SECTION_INFO |
fb49053f | 718 | #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info |
b069de3b | 719 | #undef TARGET_STRIP_NAME_ENCODING |
772c5265 | 720 | #define TARGET_STRIP_NAME_ENCODING darwin_strip_name_encoding |
df56a27f | 721 | |
ee890fe2 SS |
722 | #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \ |
723 | do { \ | |
83182544 | 724 | const char *const stub_ = (STUB); \ |
ee890fe2 SS |
725 | char *buffer_ = (BUF); \ |
726 | strcpy (buffer_, stub_); \ | |
727 | if (stub_[0] == '"') \ | |
728 | { \ | |
729 | strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \ | |
730 | } \ | |
731 | else \ | |
732 | { \ | |
733 | strcpy (buffer_ + (STUB_LENGTH), "_binder"); \ | |
734 | } \ | |
735 | } while (0) | |
736 | ||
737 | #define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
738 | do { \ | |
83182544 | 739 | const char *const symbol_ = (SYMBOL); \ |
ee890fe2 SS |
740 | char *buffer_ = (BUF); \ |
741 | if (name_needs_quotes (symbol_) && symbol_[0] != '"') \ | |
742 | { \ | |
743 | sprintf (buffer_, "\"%s\"", symbol_); \ | |
744 | } \ | |
745 | else \ | |
746 | { \ | |
747 | strcpy (buffer_, symbol_); \ | |
748 | } \ | |
749 | } while (0) | |
750 | ||
751 | /* Given a symbol name string, create the lazy pointer version | |
752 | of the symbol name. */ | |
753 | ||
754 | #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
755 | do { \ | |
772c5265 | 756 | const char *symbol_ = darwin_strip_name_encoding (SYMBOL); \ |
ee890fe2 SS |
757 | char *buffer_ = (BUF); \ |
758 | if (symbol_[0] == '"') \ | |
759 | { \ | |
772c5265 | 760 | strcpy (buffer_, "\"L"); \ |
ee890fe2 SS |
761 | strcpy (buffer_ + 2, symbol_ + 1); \ |
762 | strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \ | |
763 | } \ | |
764 | else if (name_needs_quotes (symbol_)) \ | |
765 | { \ | |
766 | strcpy (buffer_, "\"L"); \ | |
767 | strcpy (buffer_ + 2, symbol_); \ | |
768 | strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \ | |
769 | } \ | |
770 | else \ | |
771 | { \ | |
772 | strcpy (buffer_, "L"); \ | |
773 | strcpy (buffer_ + 1, symbol_); \ | |
774 | strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \ | |
775 | } \ | |
776 | } while (0) | |
777 | ||
07c9d2eb | 778 | #define TARGET_ASM_EXCEPTION_SECTION darwin_exception_section |
abe72dd8 | 779 | |
07c9d2eb SS |
780 | #define TARGET_ASM_EH_FRAME_SECTION darwin_eh_frame_section |
781 | ||
b069de3b | 782 | #undef ASM_PREFERRED_EH_DATA_FORMAT |
abe72dd8 | 783 | #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ |
7606e68f SS |
784 | (((CODE) == 2 && (GLOBAL) == 1) \ |
785 | ? (DW_EH_PE_pcrel | DW_EH_PE_indirect) : \ | |
786 | ((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr) | |
787 | ||
788 | #define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \ | |
789 | darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2) | |
790 | ||
791 | #define TARGET_TERMINATE_DW2_EH_FRAME_INFO false | |
abe72dd8 | 792 | |
c58b209a NB |
793 | #define DARWIN_REGISTER_TARGET_PRAGMAS() \ |
794 | do { \ | |
795 | c_register_pragma (0, "mark", darwin_pragma_ignore); \ | |
796 | c_register_pragma (0, "options", darwin_pragma_options); \ | |
797 | c_register_pragma (0, "segment", darwin_pragma_ignore); \ | |
798 | c_register_pragma (0, "unused", darwin_pragma_unused); \ | |
0168a849 | 799 | } while (0) |
2aa9948d SS |
800 | |
801 | #undef ASM_APP_ON | |
802 | #define ASM_APP_ON "" | |
803 | #undef ASM_APP_OFF | |
804 | #define ASM_APP_OFF "" |