]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/sparc/linux64.h
re PR libstdc++/47776 (New libstc++ test failures)
[thirdparty/gcc.git] / gcc / config / sparc / linux64.h
CommitLineData
956d6950 1/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
66647d44 2 Copyright 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
dabadc52 3 2009, 2010, 2011 Free Software Foundation, Inc.
bfe87013
DE
4 Contributed by David S. Miller (davem@caip.rutgers.edu)
5
de0a398e 6This file is part of GCC.
bfe87013 7
de0a398e 8GCC is free software; you can redistribute it and/or modify
bfe87013 9it under the terms of the GNU General Public License as published by
2f83c7d6 10the Free Software Foundation; either version 3, or (at your option)
bfe87013
DE
11any later version.
12
de0a398e 13GCC is distributed in the hope that it will be useful,
bfe87013
DE
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
2f83c7d6
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
bfe87013 21
5f7ca34b
DM
22#define TARGET_OS_CPP_BUILTINS() \
23 do \
24 { \
25 LINUX_TARGET_OS_CPP_BUILTINS(); \
26 if (TARGET_ARCH64) \
27 builtin_define ("_LONGLONG"); \
28 if (TARGET_ARCH32 \
29 && TARGET_LONG_DOUBLE_128) \
30 builtin_define ("__LONG_DOUBLE_128__"); \
31 } \
9b8466f4
NB
32 while (0)
33
f2c0cb15
JJ
34#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
35 || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
4c837a1e 36 || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3 \
9eeaed6e
DM
37 || TARGET_CPU_DEFAULT == TARGET_CPU_niagara \
38 || TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
345a6161
DM
39/* A 64 bit v9 compiler with stack-bias,
40 in a Medium/Low code model environment. */
41
42#undef TARGET_DEFAULT
43#define TARGET_DEFAULT \
44 (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ \
33074e5f 45 + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
345a6161
DM
46#endif
47
5f7ca34b
DM
48/* This must be v9a not just v9 because by default we enable
49 -mvis. */
50#undef ASM_CPU64_DEFAULT_SPEC
51#define ASM_CPU64_DEFAULT_SPEC "-Av9a"
bfe87013 52
956d6950
JL
53/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
54 the GNU/Linux magical crtend.o file (see crtstuff.c) which
bfe87013
DE
55 provides part of the support for getting C++ file-scope static
56 object constructed before entering `main', followed by a normal
956d6950 57 GNU/Linux "finalizer" file, `crtn.o'. */
bfe87013 58
5f7ca34b 59#undef ENDFILE_SPEC
5bbcd587 60#define ENDFILE_SPEC \
24a4dd31 61 "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\
5bbcd587 62 %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
345a6161
DM
63
64#undef TARGET_VERSION
65#define TARGET_VERSION fprintf (stderr, " (sparc64 GNU/Linux with ELF)");
a0a301fc
DE
66
67/* The default code model. */
68#undef SPARC_DEFAULT_CMODEL
be3f1ff5 69#define SPARC_DEFAULT_CMODEL CM_MEDLOW
bfe87013 70
bfe87013 71#undef WCHAR_TYPE
247cfc5c
JJ
72#define WCHAR_TYPE "int"
73
bfe87013 74#undef WCHAR_TYPE_SIZE
247cfc5c
JJ
75#define WCHAR_TYPE_SIZE 32
76
ba31d94e 77/* Define for support of TFmode long double.
56149abc 78 SPARC ABI says that long double is 4 words. */
a0a301fc 79#undef LONG_DOUBLE_TYPE_SIZE
4710d3eb
JJ
80#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
81
4710d3eb
JJ
82/* Define this to set long double type size to use in libgcc2.c, which can
83 not depend on target_flags. */
84#if defined(__arch64__) || defined(__LONG_DOUBLE_128__)
85#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
86#else
87#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
88#endif
345a6161 89
a0a301fc
DE
90#undef CPP_SUBTARGET_SPEC
91#define CPP_SUBTARGET_SPEC "\
bfe87013 92%{posix:-D_POSIX_SOURCE} \
afc96791 93%{pthread:-D_REENTRANT} \
bfe87013 94"
afc96791 95
956d6950 96/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
bfe87013
DE
97 for the special GCC options -static and -shared, which allow us to
98 link things in one of these three modes by applying the appropriate
83c2a9ef 99 combinations of options at link-time.
bfe87013
DE
100
101 When the -shared link option is used a final link is not being
102 done. */
103
7bd85ce0
JM
104#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
105#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
7bd85ce0 106
345a6161
DM
107#ifdef SPARC_BI_ARCH
108
109#undef SUBTARGET_EXTRA_SPECS
110#define SUBTARGET_EXTRA_SPECS \
111 { "link_arch32", LINK_ARCH32_SPEC }, \
112 { "link_arch64", LINK_ARCH64_SPEC }, \
113 { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
114 { "link_arch", LINK_ARCH_SPEC },
7bd85ce0 115
c71cfaaf 116#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \
345a6161 117 %{!shared: \
dabadc52
JM
118 %{!static: \
119 %{rdynamic:-export-dynamic} \
120 -dynamic-linker " LINUX_DYNAMIC_LINKER32 "} \
121 %{static:-static}} \
345a6161
DM
122"
123
c71cfaaf 124#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
345a6161 125 %{!shared: \
dabadc52
JM
126 %{!static: \
127 %{rdynamic:-export-dynamic} \
128 -dynamic-linker " LINUX_DYNAMIC_LINKER64 "} \
129 %{static:-static}} \
345a6161
DM
130"
131
132#define LINK_ARCH_SPEC "\
133%{m32:%(link_arch32)} \
134%{m64:%(link_arch64)} \
135%{!m32:%{!m64:%(link_arch_default)}} \
136"
137
138#define LINK_ARCH_DEFAULT_SPEC \
139(DEFAULT_ARCH32_P ? LINK_ARCH32_SPEC : LINK_ARCH64_SPEC)
140
bfe87013 141#undef LINK_SPEC
345a6161
DM
142#define LINK_SPEC "\
143%(link_arch) \
144%{mlittle-endian:-EL} \
e95b1e6a 145%{!mno-relax:%{!r:-relax}} \
345a6161
DM
146"
147
148#undef CC1_SPEC
149#if DEFAULT_ARCH32_P
5f7ca34b 150#define CC1_SPEC "%{profile:-p} \
d6964c30 151%{m32:%{m64:%emay not use both -m32 and -m64}} \
4710d3eb 152%{m64:-mptr64 -mstack-bias -mlong-double-128 \
3a7b4385 153 %{!mcpu*:-mcpu=ultrasparc} \
247cfc5c 154 %{!mno-vis:%{!mcpu=v9:-mvis}}} \
345a6161
DM
155"
156#else
5f7ca34b 157#define CC1_SPEC "%{profile:-p} \
d6964c30 158%{m32:%{m64:%emay not use both -m32 and -m64}} \
4710d3eb 159%{m32:-mptr32 -mno-stack-bias %{!mlong-double-128:-mlong-double-64} \
3a7b4385 160 %{!mcpu*:-mcpu=cypress}} \
9ce13279 161%{!m32:%{!mcpu*:-mcpu=ultrasparc}} \
247cfc5c 162%{!mno-vis:%{!m32:%{!mcpu=v9:-mvis}}} \
345a6161
DM
163"
164#endif
165
942e0f44
JJ
166/* Support for a compile-time default CPU, et cetera. The rules are:
167 --with-cpu is ignored if -mcpu is specified.
168 --with-tune is ignored if -mtune is specified.
169 --with-float is ignored if -mhard-float, -msoft-float, -mfpu, or -mno-fpu
170 are specified.
171 In the SPARC_BI_ARCH compiler we cannot pass %{!mcpu=*:-mcpu=%(VALUE)}
172 here, otherwise say -mcpu=v7 would be passed even when -m64.
173 CC1_SPEC above takes care of this instead. */
174#undef OPTION_DEFAULT_SPECS
175#if DEFAULT_ARCH32_P
176#define OPTION_DEFAULT_SPECS \
177 {"cpu", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
178 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
179 {"float", "%{!msoft-float:%{!mhard-float:%{!fpu:%{!no-fpu:-m%(VALUE)-float}}}}" }
180#else
181#define OPTION_DEFAULT_SPECS \
182 {"cpu", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
183 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
184 {"float", "%{!msoft-float:%{!mhard-float:%{!fpu:%{!no-fpu:-m%(VALUE)-float}}}}" }
185#endif
186
345a6161
DM
187#if DEFAULT_ARCH32_P
188#define MULTILIB_DEFAULTS { "m32" }
189#else
190#define MULTILIB_DEFAULTS { "m64" }
191#endif
192
193#else /* !SPARC_BI_ARCH */
194
195#undef LINK_SPEC
c71cfaaf 196#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
bfe87013 197 %{!shared: \
dabadc52
JM
198 %{!static: \
199 %{rdynamic:-export-dynamic} \
200 -dynamic-linker " LINUX_DYNAMIC_LINKER64 "} \
201 %{static:-static}} \
bfe87013 202%{mlittle-endian:-EL} \
e95b1e6a 203%{!mno-relax:%{!r:-relax}} \
bfe87013
DE
204"
205
345a6161
DM
206#endif /* !SPARC_BI_ARCH */
207
12eb1a9c 208/* It's safe to pass -s always, even if -g is not used. */
bfe87013
DE
209#undef ASM_SPEC
210#define ASM_SPEC "\
1141be7e 211-s \
40ea67af
EB
212%{fpic|fPIC|fpie|fPIE:-K PIC} \
213%{!.c:%{findirect-dispatch:-K PIC}} \
bfe87013 214%{mlittle-endian:-EL} \
e95b1e6a 215%(asm_cpu) %(asm_arch) %(asm_relax)"
bfe87013 216
bfe87013
DE
217#undef ASM_OUTPUT_ALIGNED_LOCAL
218#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
219do { \
220 fputs ("\t.local\t", (FILE)); \
221 assemble_name ((FILE), (NAME)); \
222 putc ('\n', (FILE)); \
223 ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
224} while (0)
225
226#undef COMMON_ASM_OP
471b6f1b 227#define COMMON_ASM_OP "\t.common\t"
bfe87013 228
59f96879
RH
229#undef LOCAL_LABEL_PREFIX
230#define LOCAL_LABEL_PREFIX "."
231
bfe87013
DE
232/* This is how to store into the string LABEL
233 the symbol_ref name of an internal numbered label where
234 PREFIX is the class of label and NUM is the number within the class.
235 This is suitable for output with `assemble_name'. */
236
237#undef ASM_GENERATE_INTERNAL_LABEL
238#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
e59f7d3d 239 sprintf (LABEL, "*.L%s%ld", PREFIX, (long)(NUM))
bfe87013 240
bfe87013
DE
241/* DWARF bits. */
242
243/* Follow Irix 6 and not the Dwarf2 draft in using 64-bit offsets.
d6a7951f 244 Obviously the Dwarf2 folks haven't tried to actually build systems
bfe87013
DE
245 with their spec. On a 64-bit system, only 64-bit relocs become
246 RELATIVE relocations. */
247
248/* #define DWARF_OFFSET_SIZE PTR_SIZE */
275b60d6 249
45dcc026
JJ
250#undef DITF_CONVERSION_LIBFUNCS
251#define DITF_CONVERSION_LIBFUNCS 1
f7e0e539 252\f
5751a10b
JJ
253#ifdef HAVE_AS_TLS
254#undef TARGET_SUN_TLS
255#undef TARGET_GNU_TLS
256#define TARGET_SUN_TLS 0
257#define TARGET_GNU_TLS 1
258#endif
259\f
7a31a340
DM
260/* We use GNU ld so undefine this so that attribute((init_priority)) works. */
261#undef CTORS_SECTION_ASM_OP
262#undef DTORS_SECTION_ASM_OP
db430d26 263
260c8ba3
EB
264/* Static stack checking is supported by means of probes. */
265#define STACK_CHECK_STATIC_BUILTIN 1
266
8662eb14 267#define MD_UNWIND_SUPPORT "config/sparc/linux-unwind.h"
548a6c4f
EB
268
269/* Linux currently uses RMO in uniprocessor mode, which is equivalent to
270 TMO, and TMO in multiprocessor mode. But they reserve the right to
271 change their minds. */
272#undef SPARC_RELAXED_ORDERING
273#define SPARC_RELAXED_ORDERING true
5e77eb53
EB
274
275#undef NEED_INDICATE_EXEC_STACK
276#define NEED_INDICATE_EXEC_STACK 1
8ec11fe9
JJ
277
278#ifdef TARGET_LIBC_PROVIDES_SSP
279/* sparc glibc provides __stack_chk_guard in [%g7 + 0x14],
280 sparc64 glibc provides it at [%g7 + 0x28]. */
281#define TARGET_THREAD_SSP_OFFSET (TARGET_ARCH64 ? 0x28 : 0x14)
282#endif
7269aee7
AH
283
284/* Define if long doubles should be mangled as 'g'. */
285#define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
cc44abe6
DM
286
287/* We use glibc _mcount for profiling. */
b61eacd6 288#undef NO_PROFILE_COUNTERS
cc44abe6 289#define NO_PROFILE_COUNTERS 1