]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/sol2.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / sol2.h
CommitLineData
8433a25e
RO
1/* Operating system specific defines to be used when targeting GCC for any
2 Solaris 2 system.
aeee4812 3 Copyright (C) 2002-2023 Free Software Foundation, Inc.
8433a25e 4
814499a4 5This file is part of GCC.
8433a25e 6
814499a4 7GCC is free software; you can redistribute it and/or modify
8433a25e 8it under the terms of the GNU General Public License as published by
2f83c7d6 9the Free Software Foundation; either version 3, or (at your option)
8433a25e
RO
10any later version.
11
814499a4 12GCC is distributed in the hope that it will be useful,
8433a25e
RO
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
2f83c7d6
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
8433a25e 20
2ca48caa
RO
21/* We are compiling for Solaris 2 now. */
22#define TARGET_SOLARIS 1
23
2cf03b11
RO
24/* wchar_t is called differently in <wchar.h> for 32 and 64-bit
25 compilations. This is called for by SCD 2.4.1, p. 6-83, Figure 6-65
26 (32-bit) and p. 6P-10, Figure 6.38 (64-bit). */
27
8433a25e 28#undef WCHAR_TYPE
2cf03b11 29#define WCHAR_TYPE (TARGET_64BIT ? "int" : "long int")
8433a25e
RO
30
31#undef WCHAR_TYPE_SIZE
2cf03b11
RO
32#define WCHAR_TYPE_SIZE 32
33
34/* Same for wint_t. See SCD 2.4.1, p. 6-83, Figure 6-66 (32-bit). There's
35 no corresponding 64-bit definition, but this is what Solaris 8
36 <iso/wchar_iso.h> uses. */
8433a25e 37
2cf03b11
RO
38#undef WINT_TYPE
39#define WINT_TYPE (TARGET_64BIT ? "int" : "long int")
8433a25e 40
2cf03b11
RO
41#undef WINT_TYPE_SIZE
42#define WINT_TYPE_SIZE 32
8433a25e 43
207bf79d
JM
44#define SIG_ATOMIC_TYPE "int"
45
46/* ??? This definition of int8_t follows the system header but does
47 not conform to C99. Likewise int_fast8_t, int_least8_t. */
48#define INT8_TYPE "char"
49#define INT16_TYPE "short int"
50#define INT32_TYPE "int"
51#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
52#define UINT8_TYPE "unsigned char"
53#define UINT16_TYPE "short unsigned int"
54#define UINT32_TYPE "unsigned int"
55#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
56
57#define INT_LEAST8_TYPE "char"
58#define INT_LEAST16_TYPE "short int"
59#define INT_LEAST32_TYPE "int"
60#define INT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
61#define UINT_LEAST8_TYPE "unsigned char"
62#define UINT_LEAST16_TYPE "short unsigned int"
63#define UINT_LEAST32_TYPE "unsigned int"
64#define UINT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
65
66#define INT_FAST8_TYPE "char"
67#define INT_FAST16_TYPE "int"
68#define INT_FAST32_TYPE "int"
69#define INT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
70#define UINT_FAST8_TYPE "unsigned char"
71#define UINT_FAST16_TYPE "unsigned int"
72#define UINT_FAST32_TYPE "unsigned int"
73#define UINT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
74
75#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int")
76#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int")
77
8433a25e
RO
78#undef CPP_SUBTARGET_SPEC
79#define CPP_SUBTARGET_SPEC "\
7ecfa34f 80%{pthreads|pthread:-D_REENTRANT -D_PTHREADS}"
8433a25e
RO
81
82/* Names to predefine in the preprocessor for this target machine. */
6508bdd5 83#define TARGET_SUB_OS_CPP_BUILTINS()
8433a25e 84#define TARGET_OS_CPP_BUILTINS() \
acd8b8dc
RO
85 do { \
86 builtin_define_std ("unix"); \
87 builtin_define_std ("sun"); \
88 builtin_define ("__svr4__"); \
89 builtin_define ("__SVR4"); \
90 builtin_assert ("system=unix"); \
91 builtin_assert ("system=svr4"); \
92 /* For C++ we need to add some additional macro \
93 definitions required by the C++ standard \
94 library. */ \
95 if (c_dialect_cxx ()) \
96 { \
97 switch (cxx_dialect) \
8433a25e 98 { \
acd8b8dc
RO
99 case cxx98: \
100 case cxx11: \
101 case cxx14: \
102 /* C++11 and C++14 are based on C99. \
103 libstdc++ makes use of C99 features \
104 even for C++98. */ \
babc4728 105 builtin_define ("__STDC_VERSION__=199901L");\
acd8b8dc
RO
106 break; \
107 \
108 default: \
109 /* C++17 is based on C11. */ \
110 builtin_define ("__STDC_VERSION__=201112L");\
111 break; \
8433a25e 112 } \
acd8b8dc
RO
113 builtin_define ("_XOPEN_SOURCE=600"); \
114 builtin_define ("_LARGEFILE_SOURCE=1"); \
115 builtin_define ("_LARGEFILE64_SOURCE=1"); \
a634048e 116 builtin_define ("_FILE_OFFSET_BITS=64"); \
acd8b8dc
RO
117 builtin_define ("__EXTENSIONS__"); \
118 } \
119 TARGET_SUB_OS_CPP_BUILTINS(); \
120 } while (0)
8433a25e 121
fe551ce4
RO
122#define SUBTARGET_OVERRIDE_OPTIONS \
123 do { \
124 solaris_override_options (); \
125 } while (0)
126
2cf03b11
RO
127#if DEFAULT_ARCH32_P
128#define MULTILIB_DEFAULTS { "m32" }
129#else
130#define MULTILIB_DEFAULTS { "m64" }
131#endif
132
133#if DEFAULT_ARCH32_P
134#define DEF_ARCH32_SPEC(__str) "%{!m64:" __str "}"
135#define DEF_ARCH64_SPEC(__str) "%{m64:" __str "}"
136#else
137#define DEF_ARCH32_SPEC(__str) "%{m32:" __str "}"
138#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}"
139#endif
fe551ce4 140
aaabfd71
RO
141/* Solaris needs -fasynchronous-unwind-tables to generate unwind info. */
142#define ASAN_CC1_SPEC "%{%:sanitize(address):-fasynchronous-unwind-tables}"
143
fcf7471a
RO
144/* It's safe to pass -s always, even if -g is not used. Those options are
145 handled by both Sun as and GNU as. */
146#define ASM_SPEC_BASE \
147"%{v:-V} %{Qy:} %{!Qn:-Qy} %{Ym,*} -s %(asm_cpu)"
148
428b3812 149#define ASM_PIC_SPEC " %{" FPIE_OR_FPIC_SPEC ":-K PIC}"
8433a25e 150
2cf03b11
RO
151#undef ASM_CPU_DEFAULT_SPEC
152#define ASM_CPU_DEFAULT_SPEC \
153(DEFAULT_ARCH32_P ? "\
154%{m64:" ASM_CPU64_DEFAULT_SPEC "} \
155%{!m64:" ASM_CPU32_DEFAULT_SPEC "} \
156" : "\
157%{m32:" ASM_CPU32_DEFAULT_SPEC "} \
158%{!m32:" ASM_CPU64_DEFAULT_SPEC "} \
159")
160
7ecfa34f
RO
161#undef LIB_SPEC
162#define LIB_SPEC \
163 "%{!symbolic:\
9e34e53f 164 %{pthreads|pthread:-lpthread} \
7ecfa34f
RO
165 %{p|pg:-ldl} -lc}"
166
72b7f7ea
JM
167#ifndef CROSS_DIRECTORY_STRUCTURE
168#undef MD_EXEC_PREFIX
169#define MD_EXEC_PREFIX "/usr/ccs/bin/"
72b7f7ea
JM
170#endif
171
e5ef217c
RO
172/* Enable constructor priorities if the configured linker supports it. */
173#undef SUPPORTS_INIT_PRIORITY
174#define SUPPORTS_INIT_PRIORITY HAVE_INITFINI_ARRAY_SUPPORT
175
c969e34e
RO
176/* Solaris libc and libm implement multiple behaviours for various
177 interfaces that have changed over the years in different versions of the
178 C standard. The behaviour is controlled by linking corresponding
179 values-*.o objects. Each of these objects contain alternate definitions
180 of one or more variables that the libraries use to select which
181 conflicting behaviour they should exhibit. There are two sets of these
182 objects, values-X*.o and values-xpg*.o.
183
184 The values-X[ac].o objects set the variable _lib_version. The Studio C
185 compilers use values-Xc.o with either -Xc or (since Studio 12.6)
186 -pedantic to select strictly conformant ISO C behaviour, otherwise
f58d41ff
RO
187 values-Xa.o. Since -pedantic is a diagnostic option only in GCC, we
188 need to specifiy the -std=c* options and -std=iso9899:199409. We
189 traditionally include -ansi, which affects C and C++, and also -std=c++*
190 for consistency.
c969e34e
RO
191
192 The values-xpg[46].o objects define either or both __xpg[46] variables,
193 selecting XPG4 mode (__xpg4) and conforming C99/SUSv3 behavior (__xpg6).
194
195 Since GCC 5, gcc defaults to -std=gnu11 or higher, so we link
196 values-xpg6.o to get C99 semantics. Besides, most of the runtime
197 libraries always require C99 semantics.
198
199 Since only one instance of _lib_version and __xpg[46] takes effekt (the
200 first in ld.so.1's search path), we only link the values-*.o files into
201 executable programs. */
7ecfa34f 202#undef STARTFILE_ARCH_SPEC
c969e34e
RO
203#define STARTFILE_ARCH_SPEC \
204 "%{!shared:%{!symbolic: \
f58d41ff 205 %{ansi|std=c*|std=iso9899\\:199409:values-Xc.o%s; :values-Xa.o%s} \
c969e34e 206 %{std=c90|std=gnu90:values-xpg4.o%s; :values-xpg6.o%s}}}"
8433a25e 207
df2a1cc4 208#if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS)
7345b714
L
209#define STARTFILE_CRTBEGIN_SPEC "%{static:crtbegin.o%s; \
210 shared|" PIE_SPEC ":crtbeginS.o%s; \
211 :crtbegin.o%s}"
df2a1cc4
RO
212#else
213#define STARTFILE_CRTBEGIN_SPEC "crtbegin.o%s"
214#endif
215
ad103b01 216#if ENABLE_VTABLE_VERIFY
e5ef217c
RO
217#if SUPPORTS_INIT_PRIORITY
218#define STARTFILE_VTV_SPEC \
219 "%{fvtable-verify=none:%s; \
220 fvtable-verify=preinit:vtv_start_preinit.o%s; \
221 fvtable-verify=std:vtv_start.o%s}"
e5ef217c
RO
222#define ENDFILE_VTV_SPEC \
223 "%{fvtable-verify=none:%s; \
224 fvtable-verify=preinit:vtv_end_preinit.o%s; \
225 fvtable-verify=std:vtv_end.o%s}"
ad103b01 226#else /* !SUPPORTS_INIT_PRIORITY */
e5ef217c 227#define STARTFILE_VTV_SPEC \
ad103b01
RO
228 "%{fvtable-verify=*: \
229 %e-fvtable-verify=%* is not supported in this configuration}"
e5ef217c 230#define ENDFILE_VTV_SPEC ""
ad103b01
RO
231#endif /* !SUPPORTS_INIT_PRIORITY */
232#else /* !ENABLE_VTABLE_VERIFY */
233#define STARTFILE_VTV_SPEC ""
234#define ENDFILE_VTV_SPEC ""
235#endif /* !ENABLE_VTABLE_VERIFY */
e5ef217c 236
aaabfd71
RO
237/* Link -lasan early on the command line. For -static-libasan, don't link
238 it for -shared link, the executable should be compiled with -static-libasan
239 in that case, and for executable link with --{,no-}whole-archive around
240 it to force everything into the executable. */
241
242#ifndef USE_GNU_LD
243#define LD_WHOLE_ARCHIVE_OPTION "-z allextract"
244#define LD_NO_WHOLE_ARCHIVE_OPTION "-z defaultextract"
245#else
246#define LD_WHOLE_ARCHIVE_OPTION "--whole-archive"
247#define LD_NO_WHOLE_ARCHIVE_OPTION "--no-whole-archive"
248#endif
249
250/* Allow rejecting -fsanitize=address, e.g. for specific multilibs. */
251#ifndef ASAN_REJECT_SPEC
252#define ASAN_REJECT_SPEC ""
253#endif
254
255#define LIBASAN_EARLY_SPEC ASAN_REJECT_SPEC \
256 " %{!shared:libasan_preinit%O%s} \
257 %{static-libasan:%{!shared: -Bstatic "\
258 LD_WHOLE_ARCHIVE_OPTION " -lasan " LD_NO_WHOLE_ARCHIVE_OPTION \
259 "-Bdynamic}}%{!static-libasan:-lasan}"
260
261/* Error out on -fsanitize=thread|leak. */
262#define LIBTSAN_EARLY_SPEC "\
8d345a96 263 %e-fsanitize=thread is not supported in this configuration"
aaabfd71 264#define LIBLSAN_EARLY_SPEC "\
8d345a96 265 %e-fsanitize=leak is not supported in this configuration"
aaabfd71 266
8433a25e
RO
267/* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */
268#undef STARTFILE_SPEC
2d110442 269#ifdef HAVE_SOLARIS_CRTS
f021f1d3
RO
270/* Since Solaris 11.4, the OS delivers crt1.o, crti.o, and crtn.o, with a hook
271 for compiler-dependent stuff like profile handling. */
2d110442
RO
272#define STARTFILE_SPEC "%{!shared:%{!symbolic: \
273 crt1.o%s \
274 %{p:%e-p is not supported; \
275 pg:crtpg.o%s gmon.o%s; \
276 :crtp.o%s}}} \
e5ef217c
RO
277 crti.o%s %(startfile_arch) %(startfile_crtbegin) \
278 %(startfile_vtv)"
2d110442
RO
279#else
280#define STARTFILE_SPEC "%{!shared:%{!symbolic: \
281 %{p:mcrt1.o%s; \
282 pg:gcrt1.o%s gmon.o%s; \
283 :crt1.o%s}}} \
e5ef217c
RO
284 crti.o%s %(startfile_arch) %(startfile_crtbegin) \
285 %(startfile_vtv)"
df2a1cc4
RO
286#endif
287
288#if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS)
7345b714
L
289#define ENDFILE_CRTEND_SPEC "%{static:crtend.o%s; \
290 shared|" PIE_SPEC ":crtendS.o%s; \
291 :crtend.o%s}"
df2a1cc4
RO
292#else
293#define ENDFILE_CRTEND_SPEC "crtend.o%s"
2d110442 294#endif
8433a25e 295
7ecfa34f
RO
296#undef ENDFILE_SPEC
297#define ENDFILE_SPEC \
298 "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
e5ef217c 299 %(endfile_arch) %(endfile_vtv) %(endfile_crtend) crtn.o%s"
8433a25e 300
61aaea23
MM
301#undef LINK_ARCH32_SPEC_BASE
302#define LINK_ARCH32_SPEC_BASE \
8433a25e
RO
303 "%{G:-G} \
304 %{YP,*} \
305 %{R*} \
2cf03b11
RO
306 %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp%R/lib:%R/usr/lib} \
307 %{!p:%{!pg:-Y P,%R/lib:%R/usr/lib}}}"
8433a25e 308
61aaea23
MM
309#undef LINK_ARCH32_SPEC
310#define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE
311
2cf03b11
RO
312/* This should be the same as LINK_ARCH32_SPEC_BASE, except with
313 ARCH64_SUBDIR appended to the paths. */
314#undef LINK_ARCH64_SPEC_BASE
315#define LINK_ARCH64_SPEC_BASE \
316 "%{G:-G} \
317 %{YP,*} \
318 %{R*} \
319 %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/" ARCH64_SUBDIR ":%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "} \
320 %{!p:%{!pg:-Y P,%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "}}}"
321
322#undef LINK_ARCH64_SPEC
323#ifndef USE_GLD
324/* FIXME: Used to be SPARC-only. Not SPARC-specfic but for the model name! */
325#define LINK_ARCH64_SPEC \
326 "%{mcmodel=medlow:-M /usr/lib/ld/" ARCH64_SUBDIR "/map.below4G} " \
327 LINK_ARCH64_SPEC_BASE
328#else
329#define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE
330#endif
331
332#ifdef USE_GLD
333#if DEFAULT_ARCH32_P
334#define ARCH_DEFAULT_EMULATION ARCH32_EMULATION
335#else
336#define ARCH_DEFAULT_EMULATION ARCH64_EMULATION
337#endif
338#define TARGET_LD_EMULATION "%{m32:-m " ARCH32_EMULATION "}" \
339 "%{m64:-m " ARCH64_EMULATION "}" \
340 "%{!m32:%{!m64:-m " ARCH_DEFAULT_EMULATION "}} "
341#else
342#define TARGET_LD_EMULATION ""
343#endif
344
8433a25e 345#undef LINK_ARCH_SPEC
2cf03b11
RO
346#if DISABLE_MULTILIB
347#if DEFAULT_ARCH32_P
348#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \
349%{m32:%(link_arch32)} \
350%{m64:%edoes not support multilib} \
351%{!m32:%{!m64:%(link_arch_default)}} \
352"
353#else
354#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \
355%{m32:%edoes not support multilib} \
356%{m64:%(link_arch64)} \
357%{!m32:%{!m64:%(link_arch_default)}} \
358"
359#endif
360#else
361#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \
362%{m32:%(link_arch32)} \
363%{m64:%(link_arch64)} \
364%{!m32:%{!m64:%(link_arch_default)}}"
365#endif
366
367#define LINK_ARCH_DEFAULT_SPEC \
368(DEFAULT_ARCH32_P ? LINK_ARCH32_SPEC : LINK_ARCH64_SPEC)
369
370#undef SUBTARGET_EXTRA_SPECS
371#define SUBTARGET_EXTRA_SPECS \
df2a1cc4
RO
372 { "startfile_arch", STARTFILE_ARCH_SPEC }, \
373 { "startfile_crtbegin", STARTFILE_CRTBEGIN_SPEC }, \
e5ef217c 374 { "startfile_vtv", STARTFILE_VTV_SPEC }, \
df2a1cc4
RO
375 { "link_arch32", LINK_ARCH32_SPEC }, \
376 { "link_arch64", LINK_ARCH64_SPEC }, \
377 { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
378 { "link_arch", LINK_ARCH_SPEC }, \
379 { "endfile_arch", ENDFILE_ARCH_SPEC }, \
e5ef217c
RO
380 { "endfile_crtend", ENDFILE_CRTEND_SPEC }, \
381 { "endfile_vtv", ENDFILE_VTV_SPEC }, \
2cf03b11 382 SUBTARGET_CPU_EXTRA_SPECS
8433a25e 383
7ecfa34f
RO
384#ifndef USE_GLD
385/* With Sun ld, -rdynamic is a no-op. */
386#define RDYNAMIC_SPEC ""
387#else
388/* GNU ld needs --export-dynamic to implement -rdynamic. */
389#define RDYNAMIC_SPEC "--export-dynamic"
390#endif
391
8dc877eb
RO
392#ifndef USE_GLD
393/* Prefer native form with Solaris ld. */
394#define SYSROOT_SPEC "-z sysroot=%R"
395#endif
396
c0fff1d0 397#if !defined(USE_GLD) && defined(ENABLE_SHARED_LIBGCC)
91da0481
RO
398/* With Sun ld, use mapfile to enforce direct binding to libgcc_s unwinder. */
399#define LINK_LIBGCC_MAPFILE_SPEC \
400 "%{shared|shared-libgcc:-M %slibgcc-unwind.map}"
401#else
402/* GNU ld doesn't support direct binding. */
403#define LINK_LIBGCC_MAPFILE_SPEC ""
404#endif
405
3c698bf0
RO
406/* Clear hardware capabilities, either explicitly or with OpenMP:
407 #pragma openmp declare simd creates clones for SSE2, AVX, and AVX2. */
408#ifdef HAVE_LD_CLEARCAP
409#define LINK_CLEARCAP_SPEC " %{mclear-hwcap|fopenmp*:-M %sclearcap.map}"
410#else
411#define LINK_CLEARCAP_SPEC ""
412#endif
413
8433a25e
RO
414#undef LINK_SPEC
415#define LINK_SPEC \
416 "%{h*} %{v:-V} \
fcf52686 417 %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \
8433a25e 418 %{static:-dn -Bstatic} \
3c698bf0
RO
419 %{shared:-G -dy %{!mimpure-text:-z text}} " \
420 LINK_LIBGCC_MAPFILE_SPEC LINK_CLEARCAP_SPEC " \
8433a25e
RO
421 %{symbolic:-Bsymbolic -G -dy -z text} \
422 %(link_arch) \
423 %{Qy:} %{!Qn:-Qy}"
424
e927b6ad
RO
425/* Use --as-needed/-z ignore -lgcc_s for eh support. */
426#ifdef HAVE_LD_AS_NEEDED
427#define USE_LD_AS_NEEDED 1
428#endif
429
7ecfa34f
RO
430#ifdef USE_GLD
431/* Solaris 11 build 135+ implements dl_iterate_phdr. GNU ld needs
432 --eh-frame-hdr to create the required .eh_frame_hdr sections. */
433#if defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR)
8c6562e1 434#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
7ecfa34f
RO
435#endif /* HAVE_LD_EH_FRAME && TARGET_DL_ITERATE_PHDR */
436#endif
6e70657a 437
df2a1cc4
RO
438#if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS)
439#ifdef USE_GLD
440/* Assert -z text by default to match Solaris ld. */
441#define LD_PIE_SPEC "-pie %{!mimpure-text:-z text}"
442#else
443/* Solaris ld needs -z type=pie instead of -pie. */
444#define LD_PIE_SPEC "-z type=pie %{mimpure-text:-z textoff}"
445#endif
446#else
447/* Error out if some part of PIE support is missing. */
448#define LINK_PIE_SPEC \
449 "%{no-pie:} %{pie:%e-pie is not supported in this configuration} "
450#endif
451
e53b6e56 452/* collect2.cc can only parse GNU nm -n output. Solaris nm needs -png to
3e794bfe
RO
453 produce the same format. */
454#define NM_FLAGS "-png"
7ecfa34f 455\f
8433a25e 456#define STDC_0_IN_SYSTEM_HEADERS 1
a2bec818 457
07a43492 458/* Support Solaris-specific format checking for cmn_err. */
a2bec818
DJ
459#define TARGET_N_FORMAT_TYPES 1
460#define TARGET_FORMAT_TYPES solaris_format_types
07a43492
DJ
461
462/* #pragma init and #pragma fini are implemented on top of init and
463 fini attributes. */
464#define SOLARIS_ATTRIBUTE_TABLE \
4849deb1
JJ
465 { "init", 0, 0, true, false, false, false, NULL, NULL }, \
466 { "fini", 0, 0, true, false, false, false, NULL, NULL }
07a43492 467
7ecfa34f 468/* Solaris-specific #pragmas are implemented on top of attributes. Hook in
e53b6e56 469 the bits from config/sol2.cc. */
7ecfa34f
RO
470#define SUBTARGET_INSERT_ATTRIBUTES solaris_insert_attributes
471#define SUBTARGET_ATTRIBUTE_TABLE SOLARIS_ATTRIBUTE_TABLE
472
473/* Allow macro expansion in #pragma pack. */
474#define HANDLE_PRAGMA_PACK_WITH_EXPANSION
475
5b880ea6
RO
476#define TARGET_CXX_DECL_MANGLING_CONTEXT solaris_cxx_decl_mangling_context
477
2ca48caa 478/* Solaris/x86 as and gas support unquoted section names. */
2cf03b11 479#ifndef SECTION_NAME_FORMAT
2ca48caa 480#define SECTION_NAME_FORMAT "%s"
2cf03b11 481#endif
a0c21029 482
07a43492
DJ
483/* This is how to declare the size of a function. For Solaris, we output
484 any .init or .fini entries here. */
485#undef ASM_DECLARE_FUNCTION_SIZE
486#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
487 do \
488 { \
489 if (!flag_inhibit_size_directive) \
490 ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \
491 solaris_output_init_fini (FILE, DECL); \
492 } \
493 while (0)
494
f0c01ffd
RO
495#ifndef USE_GAS
496#undef TARGET_ASM_ASSEMBLE_VISIBILITY
497#define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility
b8f9bca0
JM
498
499#define AS_NEEDS_DASH_FOR_PIPED_INPUT
500
f0c01ffd 501#endif
7ecfa34f
RO
502/* Solaris has an implementation of __enable_execute_stack. */
503#define HAVE_ENABLE_EXECUTE_STACK
504
505/* Static stack checking is supported by means of probes. */
506#define STACK_CHECK_STATIC_BUILTIN 1
9c0c4ec7
JM
507
508#define TARGET_POSIX_IO
7ecfa34f 509
2cf03b11
RO
510/* Solaris 10 has the float and long double forms of math functions.
511 We redefine this hook so the version from elfos.h header won't be used. */
d33d9e47 512#undef TARGET_LIBC_HAS_FUNCTION
2cf03b11 513#define TARGET_LIBC_HAS_FUNCTION default_libc_has_function
d33d9e47 514
7ecfa34f
RO
515extern GTY(()) tree solaris_pending_aligns;
516extern GTY(()) tree solaris_pending_inits;
517extern GTY(()) tree solaris_pending_finis;