Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/darwin.h @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
rev | line source |
---|---|
0 | 1 /* Target definitions for Darwin (Mac OS X) systems. |
2 Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003, 2004, | |
3 2005, 2006, 2007, 2008, 2009 | |
4 Free Software Foundation, Inc. | |
5 Contributed by Apple Computer Inc. | |
6 | |
7 This file is part of GCC. | |
8 | |
9 GCC is free software; you can redistribute it and/or modify | |
10 it under the terms of the GNU General Public License as published by | |
11 the Free Software Foundation; either version 3, or (at your option) | |
12 any later version. | |
13 | |
14 GCC is distributed in the hope that it will be useful, | |
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 Under Section 7 of GPL version 3, you are granted additional | |
20 permissions described in the GCC Runtime Library Exception, version | |
21 3.1, as published by the Free Software Foundation. | |
22 | |
23 You should have received a copy of the GNU General Public License and | |
24 a copy of the GCC Runtime Library Exception along with this program; | |
25 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
26 <http://www.gnu.org/licenses/>. */ | |
27 | |
28 #ifndef CONFIG_DARWIN_H | |
29 #define CONFIG_DARWIN_H | |
30 | |
31 /* The definitions in this file are common to all processor types | |
32 running Darwin, which is the kernel for Mac OS X. Darwin is | |
33 basically a BSD user layer laid over a Mach kernel, then evolved | |
34 for many years (at NeXT) in parallel with other Unix systems. So | |
35 while the runtime is a somewhat idiosyncratic Mach-based thing, | |
36 other definitions look like they would for a BSD variant. */ | |
37 | |
38 /* Although NeXT ran on many different architectures, as of Jan 2001 | |
39 the only supported Darwin targets are PowerPC and x86. */ | |
40 | |
41 /* One of Darwin's NeXT legacies is the Mach-O format, which is partly | |
42 like a.out and partly like COFF, with additional features like | |
43 multi-architecture binary support. */ | |
44 | |
45 #define OBJECT_FORMAT_MACHO | |
46 | |
47 /* Don't assume anything about the header files. */ | |
48 #define NO_IMPLICIT_EXTERN_C | |
49 | |
50 /* Suppress g++ attempt to link in the math library automatically. */ | |
51 #define MATH_LIBRARY "" | |
52 | |
53 /* We have atexit. */ | |
54 | |
55 #define HAVE_ATEXIT | |
56 | |
57 /* Define an empty body for the function do_global_dtors() in libgcc2.c. */ | |
58 | |
59 #define DO_GLOBAL_DTORS_BODY | |
60 | |
61 /* The string value for __SIZE_TYPE__. */ | |
62 | |
63 #ifndef SIZE_TYPE | |
64 #define SIZE_TYPE "long unsigned int" | |
65 #endif | |
66 | |
67 /* Type used for ptrdiff_t, as a string used in a declaration. */ | |
68 | |
69 #undef PTRDIFF_TYPE | |
70 #define PTRDIFF_TYPE "int" | |
71 | |
72 /* wchar_t is int. */ | |
73 | |
74 #undef WCHAR_TYPE | |
75 #define WCHAR_TYPE "int" | |
76 #undef WCHAR_TYPE_SIZE | |
77 #define WCHAR_TYPE_SIZE 32 | |
78 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
79 #define INT8_TYPE "signed char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
80 #define INT16_TYPE "short int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
81 #define INT32_TYPE "int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
82 #define INT64_TYPE "long long int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
83 #define UINT8_TYPE "unsigned char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
84 #define UINT16_TYPE "short unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
85 #define UINT32_TYPE "unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
86 #define UINT64_TYPE "long long unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
87 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
88 #define INT_LEAST8_TYPE "signed char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
89 #define INT_LEAST16_TYPE "short int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
90 #define INT_LEAST32_TYPE "int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 #define INT_LEAST64_TYPE "long long int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 #define UINT_LEAST8_TYPE "unsigned char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
93 #define UINT_LEAST16_TYPE "short unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
94 #define UINT_LEAST32_TYPE "unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
95 #define UINT_LEAST64_TYPE "long long unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
96 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
97 #define INT_FAST8_TYPE "signed char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
98 #define INT_FAST16_TYPE "short int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
99 #define INT_FAST32_TYPE "int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
100 #define INT_FAST64_TYPE "long long int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
101 #define UINT_FAST8_TYPE "unsigned char" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
102 #define UINT_FAST16_TYPE "short unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
103 #define UINT_FAST32_TYPE "unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
104 #define UINT_FAST64_TYPE "long long unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
105 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
106 #define INTPTR_TYPE "long int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 #define UINTPTR_TYPE "long unsigned int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
108 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
109 #define SIG_ATOMIC_TYPE "int" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
110 |
0 | 111 /* Default to using the NeXT-style runtime, since that's what is |
112 pre-installed on Darwin systems. */ | |
113 | |
114 #define NEXT_OBJC_RUNTIME | |
115 | |
116 /* Don't default to pcc-struct-return, because gcc is the only compiler, and | |
117 we want to retain compatibility with older gcc versions. */ | |
118 | |
119 #undef DEFAULT_PCC_STRUCT_RETURN | |
120 #define DEFAULT_PCC_STRUCT_RETURN 0 | |
121 | |
122 /* True if pragma ms_struct is in effect. */ | |
123 extern GTY(()) int darwin_ms_struct; | |
124 | |
125 /* This table intercepts weirdo options whose names would interfere | |
126 with normal driver conventions, and either translates them into | |
127 standardly-named options, or adds a 'Z' so that they can get to | |
128 specs processing without interference. | |
129 | |
130 Do not expand a linker option to "-Xlinker -<option>", since that | |
131 forfeits the ability to control via spec strings later. However, | |
132 as a special exception, do this translation with -filelist, because | |
133 otherwise the driver will think there are no input files and quit. | |
134 (The alternative would be to hack the driver to recognize -filelist | |
135 specially, but it's simpler to use the translation table.) | |
136 | |
137 Note that an option name with a prefix that matches another option | |
138 name, that also takes an argument, needs to be modified so the | |
139 prefix is different, otherwise a '*' after the shorter option will | |
140 match with the longer one. | |
141 | |
142 The SUBTARGET_OPTION_TRANSLATE_TABLE macro, which _must_ be defined | |
143 in gcc/config/{i386,rs6000}/darwin.h, should contain any additional | |
144 command-line option translations specific to the particular target | |
145 architecture. */ | |
146 | |
147 #define TARGET_OPTION_TRANSLATE_TABLE \ | |
148 { "-all_load", "-Zall_load" }, \ | |
149 { "-allowable_client", "-Zallowable_client" }, \ | |
150 { "-arch_errors_fatal", "-Zarch_errors_fatal" }, \ | |
151 { "-bind_at_load", "-Zbind_at_load" }, \ | |
152 { "-bundle", "-Zbundle" }, \ | |
153 { "-bundle_loader", "-Zbundle_loader" }, \ | |
154 { "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \ | |
155 { "-dead_strip", "-Zdead_strip" }, \ | |
156 { "-no_dead_strip_inits_and_terms", "-Zno_dead_strip_inits_and_terms" }, \ | |
157 { "-dependency-file", "-MF" }, \ | |
158 { "-dylib_file", "-Zdylib_file" }, \ | |
159 { "-dynamic", "-Zdynamic" }, \ | |
160 { "-dynamiclib", "-Zdynamiclib" }, \ | |
161 { "-exported_symbols_list", "-Zexported_symbols_list" }, \ | |
162 { "-gfull", "-g -fno-eliminate-unused-debug-symbols" }, \ | |
163 { "-gused", "-g -feliminate-unused-debug-symbols" }, \ | |
164 { "-segaddr", "-Zsegaddr" }, \ | |
165 { "-segs_read_only_addr", "-Zsegs_read_only_addr" }, \ | |
166 { "-segs_read_write_addr", "-Zsegs_read_write_addr" }, \ | |
167 { "-seg_addr_table", "-Zseg_addr_table" }, \ | |
168 { "-seg_addr_table_filename", "-Zfn_seg_addr_table_filename" }, \ | |
169 { "-umbrella", "-Zumbrella" }, \ | |
170 { "-fapple-kext", "-fapple-kext -static -Wa,-static" }, \ | |
171 { "-filelist", "-Xlinker -filelist -Xlinker" }, \ | |
172 { "-findirect-virtual-calls", "-fapple-kext" }, \ | |
173 { "-flat_namespace", "-Zflat_namespace" }, \ | |
174 { "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \ | |
175 { "-force_flat_namespace", "-Zforce_flat_namespace" }, \ | |
176 { "-framework", "-Xlinker -framework -Xlinker" }, \ | |
177 { "-fterminated-vtables", "-fapple-kext" }, \ | |
178 { "-image_base", "-Zimage_base" }, \ | |
179 { "-init", "-Zinit" }, \ | |
180 { "-install_name", "-Zinstall_name" }, \ | |
181 { "-mkernel", "-mkernel -static -Wa,-static" }, \ | |
182 { "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \ | |
183 { "-multiply_defined", "-Zmultiply_defined" }, \ | |
184 { "-multi_module", "-Zmulti_module" }, \ | |
185 { "-static", "-static -Wa,-static" }, \ | |
186 { "-shared", "-Zdynamiclib" }, \ | |
187 { "-single_module", "-Zsingle_module" }, \ | |
188 { "-unexported_symbols_list", "-Zunexported_symbols_list" }, \ | |
189 SUBTARGET_OPTION_TRANSLATE_TABLE | |
190 | |
191 #define SUBSUBTARGET_OVERRIDE_OPTIONS \ | |
192 do { \ | |
193 darwin_override_options (); \ | |
194 } while (0) | |
195 | |
196 /* These compiler options take n arguments. */ | |
197 | |
198 #undef WORD_SWITCH_TAKES_ARG | |
199 #define WORD_SWITCH_TAKES_ARG(STR) \ | |
200 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 : \ | |
201 !strcmp (STR, "Zallowable_client") ? 1 : \ | |
202 !strcmp (STR, "arch") ? 1 : \ | |
203 !strcmp (STR, "arch_only") ? 1 : \ | |
204 !strcmp (STR, "Zbundle_loader") ? 1 : \ | |
205 !strcmp (STR, "client_name") ? 1 : \ | |
206 !strcmp (STR, "compatibility_version") ? 1 : \ | |
207 !strcmp (STR, "current_version") ? 1 : \ | |
208 !strcmp (STR, "Zdylib_file") ? 1 : \ | |
209 !strcmp (STR, "Zexported_symbols_list") ? 1 : \ | |
210 !strcmp (STR, "Zimage_base") ? 1 : \ | |
211 !strcmp (STR, "Zinit") ? 1 : \ | |
212 !strcmp (STR, "Zinstall_name") ? 1 : \ | |
213 !strcmp (STR, "Zmultiplydefinedunused") ? 1 : \ | |
214 !strcmp (STR, "Zmultiply_defined") ? 1 : \ | |
215 !strcmp (STR, "precomp-trustfile") ? 1 : \ | |
216 !strcmp (STR, "read_only_relocs") ? 1 : \ | |
217 !strcmp (STR, "sectcreate") ? 3 : \ | |
218 !strcmp (STR, "sectorder") ? 3 : \ | |
219 !strcmp (STR, "Zsegaddr") ? 2 : \ | |
220 !strcmp (STR, "Zsegs_read_only_addr") ? 1 : \ | |
221 !strcmp (STR, "Zsegs_read_write_addr") ? 1 : \ | |
222 !strcmp (STR, "Zseg_addr_table") ? 1 : \ | |
223 !strcmp (STR, "Zfn_seg_addr_table_filename") ? 1 :\ | |
224 !strcmp (STR, "seg1addr") ? 1 : \ | |
225 !strcmp (STR, "segprot") ? 3 : \ | |
226 !strcmp (STR, "sub_library") ? 1 : \ | |
227 !strcmp (STR, "sub_umbrella") ? 1 : \ | |
228 !strcmp (STR, "Zumbrella") ? 1 : \ | |
229 !strcmp (STR, "undefined") ? 1 : \ | |
230 !strcmp (STR, "Zunexported_symbols_list") ? 1 : \ | |
231 !strcmp (STR, "Zweak_reference_mismatches") ? 1 : \ | |
232 !strcmp (STR, "pagezero_size") ? 1 : \ | |
233 !strcmp (STR, "segs_read_only_addr") ? 1 : \ | |
234 !strcmp (STR, "segs_read_write_addr") ? 1 : \ | |
235 !strcmp (STR, "sectalign") ? 3 : \ | |
236 !strcmp (STR, "sectobjectsymbols") ? 2 : \ | |
237 !strcmp (STR, "segcreate") ? 3 : \ | |
238 !strcmp (STR, "dylinker_install_name") ? 1 : \ | |
239 0) | |
240 | |
241 #define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do { \ | |
242 if (flag_mkernel || flag_apple_kext) \ | |
243 { \ | |
244 if (flag_use_cxa_atexit == 2) \ | |
245 flag_use_cxa_atexit = 0; \ | |
246 /* kexts should always be built without the coalesced sections \ | |
247 because the kernel loader doesn't grok such sections. */ \ | |
248 flag_weak = 0; \ | |
249 /* No RTTI in kexts. */ \ | |
250 flag_rtti = 0; \ | |
251 } \ | |
252 } while (0) | |
253 | |
254 /* Machine dependent cpp options. Don't add more options here, add | |
255 them to darwin_cpp_builtins in darwin-c.c. */ | |
256 | |
257 #undef CPP_SPEC | |
258 #define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" \ | |
259 " %{pthread:-D_REENTRANT}" | |
260 | |
261 /* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus | |
262 precomp, libtool, and fat build additions. Also we | |
263 don't specify a second %G after %L because libSystem is | |
264 self-contained and doesn't need to link against libgcc.a. */ | |
265 /* In general, random Darwin linker flags should go into LINK_SPEC | |
266 instead of LINK_COMMAND_SPEC. The command spec is better for | |
267 specifying the handling of options understood by generic Unix | |
268 linkers, and for positional arguments like libraries. */ | |
269 #define LINK_COMMAND_SPEC "\ | |
270 %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ | |
271 %(linker) %l %X %{d} %{s} %{t} %{Z} %{u*} \ | |
272 %{A} %{e*} %{m} %{r} %{x} \ | |
273 %{o*}%{!o:-o a.out} \ | |
274 %{!A:%{!nostdlib:%{!nostartfiles:%S}}} \ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
275 %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate|coverage:-lgcov} \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
276 %{fopenmp|ftree-parallelize-loops=*: \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
277 %{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
278 %{!nostdlib:%{!nodefaultlibs: %(link_ssp) %G %L }} \ |
0 | 279 %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}\n\ |
280 %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ | |
281 %{.c|.cc|.C|.cpp|.cp|.c++|.cxx|.CPP|.m|.mm: \ | |
282 %{gdwarf-2:%{!gstabs*:%{!g0: dsymutil %{o*:%*}%{!o:a.out}}}}}}}}}}}}" | |
283 | |
284 #ifdef TARGET_SYSTEM_ROOT | |
285 #define LINK_SYSROOT_SPEC \ | |
286 "%{isysroot*:-syslibroot %*;:-syslibroot " TARGET_SYSTEM_ROOT "}" | |
287 #else | |
288 #define LINK_SYSROOT_SPEC "%{isysroot*:-syslibroot %*}" | |
289 #endif | |
290 | |
291 /* Please keep the random linker options in alphabetical order (modulo | |
292 'Z' and 'no' prefixes). Note that options taking arguments may appear | |
293 multiple times on a command line with different arguments each time, | |
294 so put a * after their names so all of them get passed. */ | |
295 #define LINK_SPEC \ | |
296 "%{static}%{!static:-dynamic} \ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
297 %{fgnu-runtime: %{static|static-libgcc: \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
298 %:replace-outfile(-lobjc libobjc-gnu.a%s); \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
299 :%:replace-outfile(-lobjc -lobjc-gnu ) } }\ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
300 %{static|static-libgcc|static-libgfortran:%:replace-outfile(-lgfortran libgfortran.a%s)}\ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
301 %{static|static-libgcc|static-libstdc++|static-libgfortran:%:replace-outfile(-lgomp libgomp.a%s)}\ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
302 %{static|static-libgcc|static-libstdc++:%:replace-outfile(-lstdc++ libstdc++.a%s)}\ |
0 | 303 %{!Zdynamiclib: \ |
304 %{Zforce_cpusubtype_ALL:-arch %(darwin_arch) -force_cpusubtype_ALL} \ | |
305 %{!Zforce_cpusubtype_ALL:-arch %(darwin_subarch)} \ | |
306 %{Zbundle:-bundle} \ | |
307 %{Zbundle_loader*:-bundle_loader %*} \ | |
308 %{client_name*} \ | |
309 %{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\ | |
310 } \ | |
311 %{current_version*:%e-current_version only allowed with -dynamiclib} \ | |
312 %{Zforce_flat_namespace:-force_flat_namespace} \ | |
313 %{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \ | |
314 %{keep_private_externs} \ | |
315 %{private_bundle} \ | |
316 } \ | |
317 %{Zdynamiclib: -dylib \ | |
318 %{Zbundle:%e-bundle not allowed with -dynamiclib} \ | |
319 %{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \ | |
320 %{client_name*:%e-client_name not allowed with -dynamiclib} \ | |
321 %{compatibility_version*:-dylib_compatibility_version %*} \ | |
322 %{current_version*:-dylib_current_version %*} \ | |
323 %{Zforce_cpusubtype_ALL:-arch %(darwin_arch)} \ | |
324 %{!Zforce_cpusubtype_ALL: -arch %(darwin_subarch)} \ | |
325 %{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \ | |
326 %{Zinstall_name*:-dylib_install_name %*} \ | |
327 %{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \ | |
328 %{private_bundle:%e-private_bundle not allowed with -dynamiclib} \ | |
329 } \ | |
330 %{Zall_load:-all_load} \ | |
331 %{Zallowable_client*:-allowable_client %*} \ | |
332 %{Zbind_at_load:-bind_at_load} \ | |
333 %{Zarch_errors_fatal:-arch_errors_fatal} \ | |
334 %{Zdead_strip:-dead_strip} \ | |
335 %{Zno_dead_strip_inits_and_terms:-no_dead_strip_inits_and_terms} \ | |
336 %{Zdylib_file*:-dylib_file %*} \ | |
337 %{Zdynamic:-dynamic}\ | |
338 %{Zexported_symbols_list*:-exported_symbols_list %*} \ | |
339 %{Zflat_namespace:-flat_namespace} \ | |
340 %{headerpad_max_install_names*} \ | |
341 %{Zimage_base*:-image_base %*} \ | |
342 %{Zinit*:-init %*} \ | |
343 %{!mmacosx-version-min=*:-macosx_version_min %(darwin_minversion)} \ | |
344 %{mmacosx-version-min=*:-macosx_version_min %*} \ | |
345 %{nomultidefs} \ | |
346 %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \ | |
347 %{Zmultiply_defined*:-multiply_defined %*} \ | |
348 %{!Zmultiply_defined*:%{shared-libgcc: \ | |
349 %:version-compare(< 10.5 mmacosx-version-min= -multiply_defined) \ | |
350 %:version-compare(< 10.5 mmacosx-version-min= suppress)}} \ | |
351 %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \ | |
352 %{fpie:-pie} \ | |
353 %{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \ | |
354 %{read_only_relocs} \ | |
355 %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} \ | |
356 %{Zsegaddr*:-segaddr %*} \ | |
357 %{Zsegs_read_only_addr*:-segs_read_only_addr %*} \ | |
358 %{Zsegs_read_write_addr*:-segs_read_write_addr %*} \ | |
359 %{Zseg_addr_table*: -seg_addr_table %*} \ | |
360 %{Zfn_seg_addr_table_filename*:-seg_addr_table_filename %*} \ | |
361 %{sub_library*} %{sub_umbrella*} \ | |
362 " LINK_SYSROOT_SPEC " \ | |
363 %{twolevel_namespace} %{twolevel_namespace_hints} \ | |
364 %{Zumbrella*: -umbrella %*} \ | |
365 %{undefined*} \ | |
366 %{Zunexported_symbols_list*:-unexported_symbols_list %*} \ | |
367 %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \ | |
368 %{!Zweak_reference_mismatches*:-weak_reference_mismatches non-weak} \ | |
369 %{X} \ | |
370 %{y*} \ | |
371 %{w} \ | |
372 %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \ | |
373 %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \ | |
374 %{whatsloaded} %{dylinker_install_name*} \ | |
375 %{dylinker} %{Mach} " | |
376 | |
377 | |
378 /* Machine dependent libraries. */ | |
379 | |
380 #define LIB_SPEC "%{!static:-lSystem}" | |
381 | |
382 /* Support -mmacosx-version-min by supplying different (stub) libgcc_s.dylib | |
383 libraries to link against, and by not linking against libgcc_s on | |
384 earlier-than-10.3.9. | |
385 | |
386 Note that by default, -lgcc_eh is not linked against! This is | |
387 because in a future version of Darwin the EH frame information may | |
388 be in a new format, or the fallback routine might be changed; if | |
389 you want to explicitly link against the static version of those | |
390 routines, because you know you don't need to unwind through system | |
391 libraries, you need to explicitly say -static-libgcc. | |
392 | |
393 If it is linked against, it has to be before -lgcc, because it may | |
394 need symbols from -lgcc. */ | |
395 #undef REAL_LIBGCC_SPEC | |
396 #define REAL_LIBGCC_SPEC \ | |
397 "%{static-libgcc|static: -lgcc_eh -lgcc; \ | |
398 shared-libgcc|fexceptions|fgnu-runtime: \ | |
399 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ | |
400 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
401 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
402 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ |
0 | 403 -lgcc; \ |
404 :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ | |
405 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
406 %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
407 %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ |
0 | 408 -lgcc}" |
409 | |
410 /* We specify crt0.o as -lcrt0.o so that ld will search the library path. | |
411 | |
412 crt3.o provides __cxa_atexit on systems that don't have it. Since | |
413 it's only used with C++, which requires passing -shared-libgcc, key | |
414 off that to avoid unnecessarily adding a destructor to every | |
415 powerpc program built. */ | |
416 | |
417 #undef STARTFILE_SPEC | |
418 #define STARTFILE_SPEC \ | |
419 "%{Zdynamiclib: %(darwin_dylib1) } \ | |
420 %{!Zdynamiclib:%{Zbundle:%{!static:-lbundle1.o}} \ | |
421 %{!Zbundle:%{pg:%{static:-lgcrt0.o} \ | |
422 %{!static:%{object:-lgcrt0.o} \ | |
423 %{!object:%{preload:-lgcrt0.o} \ | |
424 %{!preload:-lgcrt1.o %(darwin_crt2)}}}} \ | |
425 %{!pg:%{static:-lcrt0.o} \ | |
426 %{!static:%{object:-lcrt0.o} \ | |
427 %{!object:%{preload:-lcrt0.o} \ | |
428 %{!preload: %(darwin_crt1) \ | |
429 %(darwin_crt2)}}}}}} \ | |
430 %{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}" | |
431 | |
432 /* The native Darwin linker doesn't necessarily place files in the order | |
433 that they're specified on the link line. Thus, it is pointless | |
434 to put anything in ENDFILE_SPEC. */ | |
435 /* #define ENDFILE_SPEC "" */ | |
436 | |
437 #define DARWIN_EXTRA_SPECS \ | |
438 { "darwin_crt1", DARWIN_CRT1_SPEC }, \ | |
439 { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \ | |
440 { "darwin_minversion", DARWIN_MINVERSION_SPEC }, | |
441 | |
442 #define DARWIN_DYLIB1_SPEC \ | |
443 "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \ | |
444 %:version-compare(>= 10.5 mmacosx-version-min= -ldylib1.10.5.o)" | |
445 | |
446 #define DARWIN_CRT1_SPEC \ | |
447 "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \ | |
448 %:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)" | |
449 | |
450 /* Default Darwin ASM_SPEC, very simple. */ | |
451 #define ASM_SPEC "-arch %(darwin_arch) \ | |
452 %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL}" | |
453 | |
454 /* We still allow output of STABS. */ | |
455 | |
456 #define DBX_DEBUGGING_INFO 1 | |
457 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
458 #define DWARF2_DEBUGGING_INFO 1 |
0 | 459 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG |
460 | |
461 #define DEBUG_FRAME_SECTION "__DWARF,__debug_frame,regular,debug" | |
462 #define DEBUG_INFO_SECTION "__DWARF,__debug_info,regular,debug" | |
463 #define DEBUG_ABBREV_SECTION "__DWARF,__debug_abbrev,regular,debug" | |
464 #define DEBUG_ARANGES_SECTION "__DWARF,__debug_aranges,regular,debug" | |
465 #define DEBUG_MACINFO_SECTION "__DWARF,__debug_macinfo,regular,debug" | |
466 #define DEBUG_LINE_SECTION "__DWARF,__debug_line,regular,debug" | |
467 #define DEBUG_LOC_SECTION "__DWARF,__debug_loc,regular,debug" | |
468 #define DEBUG_PUBNAMES_SECTION "__DWARF,__debug_pubnames,regular,debug" | |
469 #define DEBUG_PUBTYPES_SECTION "__DWARF,__debug_pubtypes,regular,debug" | |
470 #define DEBUG_STR_SECTION "__DWARF,__debug_str,regular,debug" | |
471 #define DEBUG_RANGES_SECTION "__DWARF,__debug_ranges,regular,debug" | |
472 | |
473 /* When generating stabs debugging, use N_BINCL entries. */ | |
474 | |
475 #define DBX_USE_BINCL | |
476 | |
477 /* There is no limit to the length of stabs strings. */ | |
478 | |
479 #define DBX_CONTIN_LENGTH 0 | |
480 | |
481 /* gdb needs a null N_SO at the end of each file for scattered loading. */ | |
482 | |
483 #define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END | |
484 | |
485 /* GCC's definition of 'one_only' is the same as its definition of 'weak'. */ | |
486 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) | |
487 | |
488 /* Mach-O supports 'weak imports', and 'weak definitions' in coalesced | |
489 sections. machopic_select_section ensures that weak variables go in | |
490 coalesced sections. Weak aliases (or any other kind of aliases) are | |
491 not supported. Weak symbols that aren't visible outside the .s file | |
492 are not supported. */ | |
493 #define ASM_WEAKEN_DECL(FILE, DECL, NAME, ALIAS) \ | |
494 do { \ | |
495 if (ALIAS) \ | |
496 { \ | |
497 warning (0, "alias definitions not supported in Mach-O; ignored"); \ | |
498 break; \ | |
499 } \ | |
500 \ | |
501 if (! DECL_EXTERNAL (DECL) && TREE_PUBLIC (DECL)) \ | |
502 targetm.asm_out.globalize_label (FILE, NAME); \ | |
503 if (DECL_EXTERNAL (DECL)) \ | |
504 fputs ("\t.weak_reference ", FILE); \ | |
505 else if (! lookup_attribute ("weak", DECL_ATTRIBUTES (DECL)) \ | |
506 && lookup_attribute ("weak_import", DECL_ATTRIBUTES (DECL))) \ | |
507 break; \ | |
508 else if (TREE_PUBLIC (DECL)) \ | |
509 fputs ("\t.weak_definition ", FILE); \ | |
510 else \ | |
511 break; \ | |
512 assemble_name (FILE, NAME); \ | |
513 fputc ('\n', FILE); \ | |
514 } while (0) | |
515 | |
516 /* Darwin has the pthread routines in libSystem, which every program | |
517 links to, so there's no need for weak-ness for that. */ | |
518 #define GTHREAD_USE_WEAK 0 | |
519 | |
520 /* The Darwin linker imposes two limitations on common symbols: they | |
521 can't have hidden visibility, and they can't appear in dylibs. As | |
522 a consequence, we should never use common symbols to represent | |
523 vague linkage. */ | |
524 #undef USE_COMMON_FOR_ONE_ONLY | |
525 #define USE_COMMON_FOR_ONE_ONLY 0 | |
526 | |
527 /* The Darwin linker doesn't want coalesced symbols to appear in | |
528 a static archive's table of contents. */ | |
529 #undef TARGET_WEAK_NOT_IN_ARCHIVE_TOC | |
530 #define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 1 | |
531 | |
532 /* On Darwin, we don't (at the time of writing) have linkonce sections | |
533 with names, so it's safe to make the class data not comdat. */ | |
534 #define TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT hook_bool_void_false | |
535 | |
536 /* For efficiency, on Darwin the RTTI information that is always | |
537 emitted in the standard C++ library should not be COMDAT. */ | |
538 #define TARGET_CXX_LIBRARY_RTTI_COMDAT hook_bool_void_false | |
539 | |
540 /* We make exception information linkonce. */ | |
541 #undef TARGET_USES_WEAK_UNWIND_INFO | |
542 #define TARGET_USES_WEAK_UNWIND_INFO 1 | |
543 | |
544 /* We need to use a nonlocal label for the start of an EH frame: the | |
545 Darwin linker requires that a coalesced section start with a label. | |
546 Unfortunately, it also requires that 'debug' sections don't contain | |
547 labels. */ | |
548 #undef FRAME_BEGIN_LABEL | |
549 #define FRAME_BEGIN_LABEL (for_eh ? "EH_frame" : "Lframe") | |
550 | |
551 /* Emit a label for the FDE corresponding to DECL. EMPTY means | |
552 emit a label for an empty FDE. */ | |
553 #define TARGET_ASM_EMIT_UNWIND_LABEL darwin_emit_unwind_label | |
554 | |
555 /* Emit a label to separate the exception table. */ | |
556 #define TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL darwin_emit_except_table_label | |
557 | |
558 /* Our profiling scheme doesn't LP labels and counter words. */ | |
559 | |
560 #define NO_PROFILE_COUNTERS 1 | |
561 | |
562 #undef INIT_SECTION_ASM_OP | |
563 #define INIT_SECTION_ASM_OP | |
564 | |
565 #undef INVOKE__main | |
566 | |
567 #define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor | |
568 #define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor | |
569 | |
570 /* Always prefix with an underscore. */ | |
571 | |
572 #define USER_LABEL_PREFIX "_" | |
573 | |
574 /* A dummy symbol that will be replaced with the function base name. */ | |
575 #define MACHOPIC_FUNCTION_BASE_NAME "<pic base>" | |
576 | |
577 /* Don't output a .file directive. That is only used by the assembler for | |
578 error reporting. */ | |
579 #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE | |
580 #define TARGET_ASM_FILE_START_FILE_DIRECTIVE false | |
581 | |
582 #undef TARGET_ASM_FILE_END | |
583 #define TARGET_ASM_FILE_END darwin_file_end | |
584 | |
585 #define ASM_OUTPUT_SKIP(FILE,SIZE) \ | |
586 fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", SIZE) | |
587 | |
588 /* Give ObjC methods pretty symbol names. */ | |
589 | |
590 #undef OBJC_GEN_METHOD_LABEL | |
591 #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \ | |
592 do { if (CAT_NAME) \ | |
593 sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \ | |
594 (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \ | |
595 else \ | |
596 sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \ | |
597 (CLASS_NAME), (SEL_NAME)); \ | |
598 } while (0) | |
599 | |
600 /* The RTTI data (e.g., __ti4name) is common and public (and static), | |
601 but it does need to be referenced via indirect PIC data pointers. | |
602 The machopic_define_symbol calls are telling the machopic subsystem | |
603 that the name *is* defined in this module, so it doesn't need to | |
604 make them indirect. */ | |
605 | |
606 #undef ASM_DECLARE_OBJECT_NAME | |
607 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ | |
608 do { \ | |
609 const char *xname = NAME; \ | |
610 if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ | |
611 xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
612 if (! DECL_WEAK (DECL) \ | |
613 && ((TREE_STATIC (DECL) \ | |
614 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
615 || DECL_INITIAL (DECL))) \ | |
616 machopic_define_symbol (DECL_RTL (DECL)); \ | |
617 if ((TREE_STATIC (DECL) \ | |
618 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
619 || DECL_INITIAL (DECL)) \ | |
620 (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ | |
621 ASM_OUTPUT_LABEL (FILE, xname); \ | |
622 /* Darwin doesn't support zero-size objects, so give them a \ | |
623 byte. */ \ | |
624 if (tree_low_cst (DECL_SIZE_UNIT (DECL), 1) == 0) \ | |
625 assemble_zeros (1); \ | |
626 } while (0) | |
627 | |
628 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ | |
629 do { \ | |
630 const char *xname = NAME; \ | |
631 if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ | |
632 xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ | |
633 if (! DECL_WEAK (DECL) \ | |
634 && ((TREE_STATIC (DECL) \ | |
635 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
636 || DECL_INITIAL (DECL))) \ | |
637 machopic_define_symbol (DECL_RTL (DECL)); \ | |
638 if ((TREE_STATIC (DECL) \ | |
639 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
640 || DECL_INITIAL (DECL)) \ | |
641 (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ | |
642 ASM_OUTPUT_LABEL (FILE, xname); \ | |
643 } while (0) | |
644 | |
645 #define ASM_DECLARE_CONSTANT_NAME(FILE, NAME, EXP, SIZE) \ | |
646 do { \ | |
647 ASM_OUTPUT_LABEL (FILE, NAME); \ | |
648 /* Darwin doesn't support zero-size objects, so give them a \ | |
649 byte. */ \ | |
650 if ((SIZE) == 0) \ | |
651 assemble_zeros (1); \ | |
652 } while (0) | |
653 | |
654 /* Wrap new method names in quotes so the assembler doesn't gag. | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
655 Make Objective-C internal symbols local and in doing this, we need |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
656 to accommodate the name mangling done by c++ on file scope locals. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
657 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
658 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
659 int darwin_label_is_anonymous_local_objc_name (const char *name); |
0 | 660 |
661 #undef ASM_OUTPUT_LABELREF | |
662 #define ASM_OUTPUT_LABELREF(FILE,NAME) \ | |
663 do { \ | |
664 const char *xname = (NAME); \ | |
665 if (! strcmp (xname, MACHOPIC_FUNCTION_BASE_NAME)) \ | |
666 machopic_output_function_base_name(FILE); \ | |
667 else if (xname[0] == '&' || xname[0] == '*') \ | |
668 { \ | |
669 int len = strlen (xname); \ | |
670 if (len > 6 && !strcmp ("$stub", xname + len - 5)) \ | |
671 machopic_validate_stub_or_non_lazy_ptr (xname); \ | |
672 else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \ | |
673 machopic_validate_stub_or_non_lazy_ptr (xname); \ | |
674 else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \ | |
675 machopic_validate_stub_or_non_lazy_ptr (xname); \ | |
676 else if (len > 15 && !strcmp ("$non_lazy_ptr\"", xname + len - 14)) \ | |
677 machopic_validate_stub_or_non_lazy_ptr (xname); \ | |
678 if (xname[1] != '"' && name_needs_quotes (&xname[1])) \ | |
679 fprintf (FILE, "\"%s\"", &xname[1]); \ | |
680 else \ | |
681 fputs (&xname[1], FILE); \ | |
682 } \ | |
683 else if (xname[0] == '+' || xname[0] == '-') \ | |
684 fprintf (FILE, "\"%s\"", xname); \ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
685 else if (darwin_label_is_anonymous_local_objc_name (xname)) \ |
0 | 686 fprintf (FILE, "L%s", xname); \ |
687 else if (!strncmp (xname, ".objc_class_name_", 17)) \ | |
688 fprintf (FILE, "%s", xname); \ | |
689 else if (xname[0] != '"' && name_needs_quotes (xname)) \ | |
690 fprintf (FILE, "\"%s\"", xname); \ | |
691 else \ | |
692 asm_fprintf (FILE, "%U%s", xname); \ | |
693 } while (0) | |
694 | |
695 /* Output before executable code. */ | |
696 #undef TEXT_SECTION_ASM_OP | |
697 #define TEXT_SECTION_ASM_OP "\t.text" | |
698 | |
699 /* Output before writable data. */ | |
700 | |
701 #undef DATA_SECTION_ASM_OP | |
702 #define DATA_SECTION_ASM_OP "\t.data" | |
703 | |
704 #undef ALIGN_ASM_OP | |
705 #define ALIGN_ASM_OP ".align" | |
706 | |
707 #undef ASM_OUTPUT_ALIGN | |
708 #define ASM_OUTPUT_ALIGN(FILE,LOG) \ | |
709 if ((LOG) != 0) \ | |
710 fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)) | |
711 | |
712 /* Ensure correct alignment of bss data. */ | |
713 | |
714 #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL | |
715 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ | |
716 do { \ | |
717 unsigned HOST_WIDE_INT _new_size = SIZE; \ | |
718 fputs (".lcomm ", (FILE)); \ | |
719 assemble_name ((FILE), (NAME)); \ | |
720 if (_new_size == 0) _new_size = 1; \ | |
721 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", _new_size, \ | |
722 floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ | |
723 if ((DECL) && ((TREE_STATIC (DECL) \ | |
724 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ | |
725 || DECL_INITIAL (DECL))) \ | |
726 { \ | |
727 (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ | |
728 machopic_define_symbol (DECL_RTL (DECL)); \ | |
729 } \ | |
730 } while (0) | |
731 | |
732 /* The maximum alignment which the object file format can support in | |
733 bits. For Mach-O, this is 2^15 bytes. */ | |
734 | |
735 #undef MAX_OFILE_ALIGNMENT | |
736 #define MAX_OFILE_ALIGNMENT (0x8000 * 8) | |
737 | |
738 /* Declare the section variables. */ | |
739 #ifndef USED_FOR_TARGET | |
740 enum darwin_section_enum { | |
741 #define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) NAME, | |
742 #include "darwin-sections.def" | |
743 #undef DEF_SECTION | |
744 NUM_DARWIN_SECTIONS | |
745 }; | |
746 extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS]; | |
747 #endif | |
748 | |
749 #undef TARGET_ASM_SELECT_SECTION | |
750 #define TARGET_ASM_SELECT_SECTION machopic_select_section | |
751 #define USE_SELECT_SECTION_FOR_FUNCTIONS | |
752 | |
753 #undef TARGET_ASM_SELECT_RTX_SECTION | |
754 #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section | |
755 #undef TARGET_ASM_UNIQUE_SECTION | |
756 #define TARGET_ASM_UNIQUE_SECTION darwin_unique_section | |
757 #undef TARGET_ASM_FUNCTION_RODATA_SECTION | |
758 #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section | |
759 #undef TARGET_ASM_RELOC_RW_MASK | |
760 #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask | |
761 | |
762 | |
763 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ | |
764 do { \ | |
765 if (FILE) { \ | |
766 if (MACHOPIC_INDIRECT) \ | |
767 fprintf (FILE, "\t.lazy_reference "); \ | |
768 else \ | |
769 fprintf (FILE, "\t.reference "); \ | |
770 assemble_name (FILE, NAME); \ | |
771 fprintf (FILE, "\n"); \ | |
772 } \ | |
773 } while (0) | |
774 | |
775 #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \ | |
776 do { \ | |
777 if (FILE) { \ | |
778 fprintf (FILE, "\t"); \ | |
779 assemble_name (FILE, NAME); \ | |
780 fprintf (FILE, "=0\n"); \ | |
781 (*targetm.asm_out.globalize_label) (FILE, NAME); \ | |
782 } \ | |
783 } while (0) | |
784 | |
785 /* Globalizing directive for a label. */ | |
786 #define GLOBAL_ASM_OP ".globl " | |
787 #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label | |
788 | |
789 /* Emit an assembler directive to set visibility for a symbol. Used | |
790 to support visibility attribute and Darwin's private extern | |
791 feature. */ | |
792 #undef TARGET_ASM_ASSEMBLE_VISIBILITY | |
793 #define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility | |
794 | |
795 /* Extra attributes for Darwin. */ | |
796 #define SUBTARGET_ATTRIBUTE_TABLE \ | |
797 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \ | |
798 { "apple_kext_compatibility", 0, 0, false, true, false, \ | |
799 darwin_handle_kext_attribute }, \ | |
800 { "weak_import", 0, 0, true, false, false, \ | |
801 darwin_handle_weak_import_attribute } | |
802 | |
803 #undef ASM_GENERATE_INTERNAL_LABEL | |
804 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ | |
805 sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM)) | |
806 | |
807 #undef TARGET_ASM_MARK_DECL_PRESERVED | |
808 #define TARGET_ASM_MARK_DECL_PRESERVED darwin_mark_decl_preserved | |
809 | |
810 /* Set on a symbol with SYMBOL_FLAG_FUNCTION or | |
811 MACHO_SYMBOL_FLAG_VARIABLE to indicate that the function or | |
812 variable has been defined in this translation unit. | |
813 When porting Mach-O to new architectures you need to make | |
814 sure these aren't clobbered by the backend. */ | |
815 | |
816 #define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP) | |
817 #define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1) | |
818 | |
819 /* Set on a symbol to indicate when fix-and-continue style code | |
820 generation is being used and the symbol refers to a static symbol | |
821 that should be rebound from new instances of a translation unit to | |
822 the original instance of the data. */ | |
823 | |
824 #define MACHO_SYMBOL_STATIC ((SYMBOL_FLAG_MACH_DEP) << 2) | |
825 | |
826 /* Symbolic names for various things we might know about a symbol. */ | |
827 | |
828 enum machopic_addr_class { | |
829 MACHOPIC_UNDEFINED, | |
830 MACHOPIC_DEFINED_DATA, | |
831 MACHOPIC_UNDEFINED_DATA, | |
832 MACHOPIC_DEFINED_FUNCTION, | |
833 MACHOPIC_UNDEFINED_FUNCTION | |
834 }; | |
835 | |
836 /* Macros defining the various PIC cases. */ | |
837 | |
838 #define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC) | |
839 #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) | |
840 #define MACHOPIC_JUST_INDIRECT (MACHO_DYNAMIC_NO_PIC_P) | |
841 #define MACHOPIC_PURE (flag_pic && ! MACHO_DYNAMIC_NO_PIC_P) | |
842 | |
843 #undef TARGET_ENCODE_SECTION_INFO | |
844 #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info | |
845 #undef TARGET_STRIP_NAME_ENCODING | |
846 #define TARGET_STRIP_NAME_ENCODING default_strip_name_encoding | |
847 | |
848 #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \ | |
849 do { \ | |
850 const char *const stub_ = (STUB); \ | |
851 char *buffer_ = (BUF); \ | |
852 strcpy (buffer_, stub_); \ | |
853 if (stub_[0] == '"') \ | |
854 { \ | |
855 strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \ | |
856 } \ | |
857 else \ | |
858 { \ | |
859 strcpy (buffer_ + (STUB_LENGTH), "_binder"); \ | |
860 } \ | |
861 } while (0) | |
862 | |
863 #define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
864 do { \ | |
865 const char *const symbol_ = (SYMBOL); \ | |
866 char *buffer_ = (BUF); \ | |
867 if (name_needs_quotes (symbol_) && symbol_[0] != '"') \ | |
868 { \ | |
869 sprintf (buffer_, "\"%s\"", symbol_); \ | |
870 } \ | |
871 else \ | |
872 { \ | |
873 strcpy (buffer_, symbol_); \ | |
874 } \ | |
875 } while (0) | |
876 | |
877 /* Given a symbol name string, create the lazy pointer version | |
878 of the symbol name. */ | |
879 | |
880 #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ | |
881 do { \ | |
882 const char *symbol_ = (SYMBOL); \ | |
883 char *buffer_ = (BUF); \ | |
884 if (symbol_[0] == '"') \ | |
885 { \ | |
886 strcpy (buffer_, "\"L"); \ | |
887 strcpy (buffer_ + 2, symbol_ + 1); \ | |
888 strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \ | |
889 } \ | |
890 else if (name_needs_quotes (symbol_)) \ | |
891 { \ | |
892 strcpy (buffer_, "\"L"); \ | |
893 strcpy (buffer_ + 2, symbol_); \ | |
894 strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \ | |
895 } \ | |
896 else \ | |
897 { \ | |
898 strcpy (buffer_, "L"); \ | |
899 strcpy (buffer_ + 1, symbol_); \ | |
900 strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \ | |
901 } \ | |
902 } while (0) | |
903 | |
904 #define EH_FRAME_SECTION_NAME "__TEXT" | |
905 #define EH_FRAME_SECTION_ATTR ",coalesced,no_toc+strip_static_syms+live_support" | |
906 | |
907 /* Java runtime class list. */ | |
908 #define JCR_SECTION_NAME "__DATA,jcr,regular,no_dead_strip" | |
909 | |
910 #undef ASM_PREFERRED_EH_DATA_FORMAT | |
911 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ | |
912 (((CODE) == 2 && (GLOBAL) == 1) \ | |
913 ? (DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4) : \ | |
914 ((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr) | |
915 | |
916 #define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \ | |
917 darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2) | |
918 | |
919 #define ASM_OUTPUT_DWARF_OFFSET(FILE,SIZE,LABEL,BASE) \ | |
920 darwin_asm_output_dwarf_offset (FILE, SIZE, LABEL, BASE) | |
921 | |
922 #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(ASM_OUT_FILE, ENCODING, SIZE, ADDR, DONE) \ | |
923 if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) { \ | |
924 darwin_non_lazy_pcrel (ASM_OUT_FILE, ADDR); \ | |
925 goto DONE; \ | |
926 } | |
927 | |
928 /* Experimentally, putting jump tables in text is faster on SPEC. | |
929 Also this is needed for correctness for coalesced functions. */ | |
930 | |
931 #ifndef JUMP_TABLES_IN_TEXT_SECTION | |
932 #define JUMP_TABLES_IN_TEXT_SECTION 1 | |
933 #endif | |
934 | |
935 #define TARGET_TERMINATE_DW2_EH_FRAME_INFO false | |
936 | |
937 #define TARGET_ASM_INIT_SECTIONS darwin_init_sections | |
938 #undef TARGET_ASM_NAMED_SECTION | |
939 #define TARGET_ASM_NAMED_SECTION darwin_asm_named_section | |
940 | |
941 /* Handle pragma weak and pragma pack. */ | |
942 #define HANDLE_SYSV_PRAGMA 1 | |
943 | |
944 #define HANDLE_PRAGMA_PACK_PUSH_POP 1 | |
945 | |
946 #define DARWIN_REGISTER_TARGET_PRAGMAS() \ | |
947 do { \ | |
948 if (!flag_preprocess_only) \ | |
949 cpp_register_pragma (parse_in, NULL, "mark", \ | |
950 darwin_pragma_ignore, false); \ | |
951 c_register_pragma (0, "options", darwin_pragma_options); \ | |
952 c_register_pragma (0, "segment", darwin_pragma_ignore); \ | |
953 c_register_pragma (0, "unused", darwin_pragma_unused); \ | |
954 c_register_pragma (0, "ms_struct", darwin_pragma_ms_struct); \ | |
955 } while (0) | |
956 | |
957 #undef ASM_APP_ON | |
958 #define ASM_APP_ON "" | |
959 #undef ASM_APP_OFF | |
960 #define ASM_APP_OFF "" | |
961 | |
962 void darwin_register_frameworks (const char *, const char *, int); | |
963 void darwin_register_objc_includes (const char *, const char *, int); | |
964 #define TARGET_EXTRA_PRE_INCLUDES darwin_register_objc_includes | |
965 #define TARGET_EXTRA_INCLUDES darwin_register_frameworks | |
966 | |
967 void add_framework_path (char *); | |
968 #define TARGET_OPTF add_framework_path | |
969 | |
970 #define TARGET_POSIX_IO | |
971 | |
972 /* All new versions of Darwin have C99 functions. */ | |
973 | |
974 #define TARGET_C99_FUNCTIONS 1 | |
975 | |
976 #define WINT_TYPE "int" | |
977 | |
978 /* Every program on darwin links against libSystem which contains the pthread | |
979 routines, so there's no need to explicitly call out when doing threaded | |
980 work. */ | |
981 | |
982 #undef GOMP_SELF_SPECS | |
983 #define GOMP_SELF_SPECS "" | |
984 | |
985 /* Darwin can't support anchors until we can cope with the adjustments | |
986 to size that ASM_DECLARE_OBJECT_NAME and ASM_DECLARE_CONSTANT_NAME | |
987 when outputting members of an anchor block and the linker can be | |
988 taught to keep them together or we find some other suitable | |
989 code-gen technique. */ | |
990 | |
991 #if 0 | |
992 #define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor | |
993 #else | |
994 #define TARGET_ASM_OUTPUT_ANCHOR NULL | |
995 #endif | |
996 | |
997 /* Attempt to turn on execute permission for the stack. This may be | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
998 used by TARGET_TRAMPOLINE_INIT if the target needs it (that is, |
0 | 999 if the target machine can change execute permissions on a page). |
1000 | |
1001 There is no way to query the execute permission of the stack, so | |
1002 we always issue the mprotect() call. | |
1003 | |
1004 Unfortunately it is not possible to make this namespace-clean. | |
1005 | |
1006 Also note that no errors should be emitted by this code; it is | |
1007 considered dangerous for library calls to send messages to | |
1008 stdout/stderr. */ | |
1009 | |
1010 #define ENABLE_EXECUTE_STACK \ | |
1011 extern void __enable_execute_stack (void *); \ | |
1012 void \ | |
1013 __enable_execute_stack (void *addr) \ | |
1014 { \ | |
1015 extern int mprotect (void *, size_t, int); \ | |
1016 extern int getpagesize (void); \ | |
1017 static int size; \ | |
1018 static long mask; \ | |
1019 \ | |
1020 char *page, *end; \ | |
1021 \ | |
1022 if (size == 0) \ | |
1023 { \ | |
1024 size = getpagesize(); \ | |
1025 mask = ~((long) size - 1); \ | |
1026 } \ | |
1027 \ | |
1028 page = (char *) (((long) addr) & mask); \ | |
1029 end = (char *) ((((long) (addr + (TARGET_64BIT ? 48 : 40))) & mask) + size); \ | |
1030 \ | |
1031 /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \ | |
1032 (void) mprotect (page, end - page, 7); \ | |
1033 } | |
1034 | |
1035 /* For Apple KEXTs, we make the constructors return this to match gcc | |
1036 2.95. */ | |
1037 #define TARGET_CXX_CDTOR_RETURNS_THIS (darwin_kextabi_p) | |
1038 extern int flag_mkernel; | |
1039 extern int flag_apple_kext; | |
1040 #define TARGET_KEXTABI flag_apple_kext | |
1041 | |
1042 #define TARGET_HAS_TARGETCM 1 | |
1043 | |
1044 #ifndef CROSS_DIRECTORY_STRUCTURE | |
1045 extern void darwin_default_min_version (int * argc, char *** argv); | |
1046 #define GCC_DRIVER_HOST_INITIALIZATION \ | |
1047 darwin_default_min_version (&argc, &argv) | |
1048 #endif /* CROSS_DIRECTORY_STRUCTURE */ | |
1049 | |
1050 /* The Apple assembler and linker do not support constructor priorities. */ | |
1051 #undef SUPPORTS_INIT_PRIORITY | |
1052 #define SUPPORTS_INIT_PRIORITY 0 | |
1053 | |
1054 #endif /* CONFIG_DARWIN_H */ |