]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/sparc/linux64.h
Rename is_open_array_type to is_slice_type.
[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 { \
107fd1c1 25 GNU_USER_TARGET_OS_CPP_BUILTINS(); \
5f7ca34b
DM
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
034e3eb0
EB
34/* On Linux, the combination sparc64-* --with-cpu=v8 is supported and
35 selects a 32-bit compiler. */
36#if defined(TARGET_64BIT_DEFAULT) && TARGET_CPU_DEFAULT >= TARGET_CPU_v9
345a6161
DM
37#undef TARGET_DEFAULT
38#define TARGET_DEFAULT \
4f4f4f54
DM
39 (MASK_V9 + MASK_PTR64 + MASK_64BIT + MASK_STACK_BIAS + \
40 MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
345a6161
DM
41#endif
42
5f7ca34b
DM
43/* This must be v9a not just v9 because by default we enable
44 -mvis. */
45#undef ASM_CPU64_DEFAULT_SPEC
46#define ASM_CPU64_DEFAULT_SPEC "-Av9a"
bfe87013 47
956d6950
JL
48/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
49 the GNU/Linux magical crtend.o file (see crtstuff.c) which
bfe87013
DE
50 provides part of the support for getting C++ file-scope static
51 object constructed before entering `main', followed by a normal
956d6950 52 GNU/Linux "finalizer" file, `crtn.o'. */
bfe87013 53
5f7ca34b 54#undef ENDFILE_SPEC
5bbcd587 55#define ENDFILE_SPEC \
24a4dd31 56 "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\
0691dde9 57 %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
345a6161 58
a0a301fc
DE
59/* The default code model. */
60#undef SPARC_DEFAULT_CMODEL
be3f1ff5 61#define SPARC_DEFAULT_CMODEL CM_MEDLOW
bfe87013 62
bfe87013 63#undef WCHAR_TYPE
247cfc5c
JJ
64#define WCHAR_TYPE "int"
65
bfe87013 66#undef WCHAR_TYPE_SIZE
247cfc5c
JJ
67#define WCHAR_TYPE_SIZE 32
68
ba31d94e 69/* Define for support of TFmode long double.
56149abc 70 SPARC ABI says that long double is 4 words. */
a0a301fc 71#undef LONG_DOUBLE_TYPE_SIZE
4710d3eb
JJ
72#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
73
4710d3eb
JJ
74/* Define this to set long double type size to use in libgcc2.c, which can
75 not depend on target_flags. */
76#if defined(__arch64__) || defined(__LONG_DOUBLE_128__)
77#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
78#else
79#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
80#endif
345a6161 81
a0a301fc
DE
82#undef CPP_SUBTARGET_SPEC
83#define CPP_SUBTARGET_SPEC "\
bfe87013 84%{posix:-D_POSIX_SOURCE} \
afc96791 85%{pthread:-D_REENTRANT} \
bfe87013 86"
afc96791 87
956d6950 88/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
bfe87013
DE
89 for the special GCC options -static and -shared, which allow us to
90 link things in one of these three modes by applying the appropriate
83c2a9ef 91 combinations of options at link-time.
bfe87013
DE
92
93 When the -shared link option is used a final link is not being
94 done. */
95
7bd85ce0
JM
96#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
97#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
7bd85ce0 98
345a6161
DM
99#ifdef SPARC_BI_ARCH
100
101#undef SUBTARGET_EXTRA_SPECS
102#define SUBTARGET_EXTRA_SPECS \
103 { "link_arch32", LINK_ARCH32_SPEC }, \
104 { "link_arch64", LINK_ARCH64_SPEC }, \
105 { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
106 { "link_arch", LINK_ARCH_SPEC },
7bd85ce0 107
c71cfaaf 108#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \
345a6161 109 %{!shared: \
dabadc52
JM
110 %{!static: \
111 %{rdynamic:-export-dynamic} \
107fd1c1 112 -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "} \
dabadc52 113 %{static:-static}} \
345a6161
DM
114"
115
c71cfaaf 116#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
345a6161 117 %{!shared: \
dabadc52
JM
118 %{!static: \
119 %{rdynamic:-export-dynamic} \
107fd1c1 120 -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "} \
dabadc52 121 %{static:-static}} \
345a6161
DM
122"
123
124#define LINK_ARCH_SPEC "\
125%{m32:%(link_arch32)} \
126%{m64:%(link_arch64)} \
127%{!m32:%{!m64:%(link_arch_default)}} \
128"
129
130#define LINK_ARCH_DEFAULT_SPEC \
131(DEFAULT_ARCH32_P ? LINK_ARCH32_SPEC : LINK_ARCH64_SPEC)
132
bfe87013 133#undef LINK_SPEC
345a6161
DM
134#define LINK_SPEC "\
135%(link_arch) \
136%{mlittle-endian:-EL} \
e95b1e6a 137%{!mno-relax:%{!r:-relax}} \
345a6161
DM
138"
139
0913b2d6
DM
140/* -mcpu=native handling only makes sense with compiler running on
141 a SPARC chip. */
a0bd60d1 142#if defined(__sparc__) && defined(__linux__)
0913b2d6
DM
143extern const char *host_detect_local_cpu (int argc, const char **argv);
144# define EXTRA_SPEC_FUNCTIONS \
145 { "local_cpu_detect", host_detect_local_cpu },
146
147# define MCPU_MTUNE_NATIVE_SPECS \
148 " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}" \
149 " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
150#else
151# define MCPU_MTUNE_NATIVE_SPECS ""
152#endif
153
154#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
155
345a6161
DM
156#undef CC1_SPEC
157#if DEFAULT_ARCH32_P
5f7ca34b 158#define CC1_SPEC "%{profile:-p} \
d6964c30 159%{m32:%{m64:%emay not use both -m32 and -m64}} \
4710d3eb 160%{m64:-mptr64 -mstack-bias -mlong-double-128 \
3a7b4385 161 %{!mcpu*:-mcpu=ultrasparc} \
247cfc5c 162 %{!mno-vis:%{!mcpu=v9:-mvis}}} \
345a6161
DM
163"
164#else
5f7ca34b 165#define CC1_SPEC "%{profile:-p} \
d6964c30 166%{m32:%{m64:%emay not use both -m32 and -m64}} \
4710d3eb 167%{m32:-mptr32 -mno-stack-bias %{!mlong-double-128:-mlong-double-64} \
3a7b4385 168 %{!mcpu*:-mcpu=cypress}} \
9ce13279 169%{!m32:%{!mcpu*:-mcpu=ultrasparc}} \
247cfc5c 170%{!mno-vis:%{!m32:%{!mcpu=v9:-mvis}}} \
345a6161
DM
171"
172#endif
173
942e0f44
JJ
174/* Support for a compile-time default CPU, et cetera. The rules are:
175 --with-cpu is ignored if -mcpu is specified.
176 --with-tune is ignored if -mtune is specified.
177 --with-float is ignored if -mhard-float, -msoft-float, -mfpu, or -mno-fpu
178 are specified.
179 In the SPARC_BI_ARCH compiler we cannot pass %{!mcpu=*:-mcpu=%(VALUE)}
180 here, otherwise say -mcpu=v7 would be passed even when -m64.
181 CC1_SPEC above takes care of this instead. */
182#undef OPTION_DEFAULT_SPECS
183#if DEFAULT_ARCH32_P
184#define OPTION_DEFAULT_SPECS \
185 {"cpu", "%{!m64:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
186 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
c6869789 187 {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" }
942e0f44
JJ
188#else
189#define OPTION_DEFAULT_SPECS \
190 {"cpu", "%{!m32:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
191 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
c6869789 192 {"float", "%{!msoft-float:%{!mhard-float:%{!mfpu:%{!mno-fpu:-m%(VALUE)-float}}}}" }
942e0f44
JJ
193#endif
194
345a6161
DM
195#if DEFAULT_ARCH32_P
196#define MULTILIB_DEFAULTS { "m32" }
197#else
198#define MULTILIB_DEFAULTS { "m64" }
199#endif
200
201#else /* !SPARC_BI_ARCH */
202
203#undef LINK_SPEC
c71cfaaf 204#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
bfe87013 205 %{!shared: \
dabadc52
JM
206 %{!static: \
207 %{rdynamic:-export-dynamic} \
107fd1c1 208 -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "} \
dabadc52 209 %{static:-static}} \
bfe87013 210%{mlittle-endian:-EL} \
e95b1e6a 211%{!mno-relax:%{!r:-relax}} \
bfe87013
DE
212"
213
345a6161
DM
214#endif /* !SPARC_BI_ARCH */
215
12eb1a9c 216/* It's safe to pass -s always, even if -g is not used. */
bfe87013
DE
217#undef ASM_SPEC
218#define ASM_SPEC "\
1141be7e 219-s \
40ea67af
EB
220%{fpic|fPIC|fpie|fPIE:-K PIC} \
221%{!.c:%{findirect-dispatch:-K PIC}} \
bfe87013 222%{mlittle-endian:-EL} \
e95b1e6a 223%(asm_cpu) %(asm_arch) %(asm_relax)"
bfe87013 224
bfe87013
DE
225#undef ASM_OUTPUT_ALIGNED_LOCAL
226#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
227do { \
228 fputs ("\t.local\t", (FILE)); \
229 assemble_name ((FILE), (NAME)); \
230 putc ('\n', (FILE)); \
231 ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
232} while (0)
233
234#undef COMMON_ASM_OP
471b6f1b 235#define COMMON_ASM_OP "\t.common\t"
bfe87013 236
59f96879
RH
237#undef LOCAL_LABEL_PREFIX
238#define LOCAL_LABEL_PREFIX "."
239
bfe87013
DE
240/* This is how to store into the string LABEL
241 the symbol_ref name of an internal numbered label where
242 PREFIX is the class of label and NUM is the number within the class.
243 This is suitable for output with `assemble_name'. */
244
245#undef ASM_GENERATE_INTERNAL_LABEL
246#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
e59f7d3d 247 sprintf (LABEL, "*.L%s%ld", PREFIX, (long)(NUM))
bfe87013 248
bfe87013
DE
249/* DWARF bits. */
250
251/* Follow Irix 6 and not the Dwarf2 draft in using 64-bit offsets.
d6a7951f 252 Obviously the Dwarf2 folks haven't tried to actually build systems
bfe87013
DE
253 with their spec. On a 64-bit system, only 64-bit relocs become
254 RELATIVE relocations. */
255
256/* #define DWARF_OFFSET_SIZE PTR_SIZE */
275b60d6 257
45dcc026
JJ
258#undef DITF_CONVERSION_LIBFUNCS
259#define DITF_CONVERSION_LIBFUNCS 1
f7e0e539 260\f
5751a10b
JJ
261#ifdef HAVE_AS_TLS
262#undef TARGET_SUN_TLS
263#undef TARGET_GNU_TLS
264#define TARGET_SUN_TLS 0
265#define TARGET_GNU_TLS 1
266#endif
267\f
7a31a340
DM
268/* We use GNU ld so undefine this so that attribute((init_priority)) works. */
269#undef CTORS_SECTION_ASM_OP
270#undef DTORS_SECTION_ASM_OP
db430d26 271
260c8ba3
EB
272/* Static stack checking is supported by means of probes. */
273#define STACK_CHECK_STATIC_BUILTIN 1
274
548a6c4f
EB
275/* Linux currently uses RMO in uniprocessor mode, which is equivalent to
276 TMO, and TMO in multiprocessor mode. But they reserve the right to
277 change their minds. */
278#undef SPARC_RELAXED_ORDERING
279#define SPARC_RELAXED_ORDERING true
5e77eb53
EB
280
281#undef NEED_INDICATE_EXEC_STACK
282#define NEED_INDICATE_EXEC_STACK 1
8ec11fe9
JJ
283
284#ifdef TARGET_LIBC_PROVIDES_SSP
285/* sparc glibc provides __stack_chk_guard in [%g7 + 0x14],
286 sparc64 glibc provides it at [%g7 + 0x28]. */
287#define TARGET_THREAD_SSP_OFFSET (TARGET_ARCH64 ? 0x28 : 0x14)
288#endif
7269aee7
AH
289
290/* Define if long doubles should be mangled as 'g'. */
291#define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
cc44abe6
DM
292
293/* We use glibc _mcount for profiling. */
b61eacd6 294#undef NO_PROFILE_COUNTERS
cc44abe6 295#define NO_PROFILE_COUNTERS 1