]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/sparc/linux.h
Fix mv8plus, allow targetting Linux or Solaris from other sparc host.
[thirdparty/gcc.git] / gcc / config / sparc / linux.h
CommitLineData
956d6950 1/* Definitions for SPARC running Linux-based GNU systems with ELF.
2f83c7d6 2 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
dabadc52 3 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
1583720a
DE
4 Contributed by Eddie C. Dost (ecd@skynet.be)
5
de0a398e 6This file is part of GCC.
1583720a 7
de0a398e 8GCC is free software; you can redistribute it and/or modify
1583720a 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)
1583720a
DE
11any later version.
12
de0a398e 13GCC is distributed in the hope that it will be useful,
1583720a
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/>. */
1583720a 21
9b8466f4
NB
22#define TARGET_OS_CPP_BUILTINS() \
23 do \
24 { \
107fd1c1 25 GNU_USER_TARGET_OS_CPP_BUILTINS(); \
fbf2ca7b
JJ
26 if (TARGET_LONG_DOUBLE_128) \
27 builtin_define ("__LONG_DOUBLE_128__"); \
9b8466f4
NB
28 } \
29 while (0)
30
956d6950
JL
31/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
32 the GNU/Linux magical crtend.o file (see crtstuff.c) which
1583720a
DE
33 provides part of the support for getting C++ file-scope static
34 object constructed before entering `main', followed by a normal
956d6950 35 GNU/Linux "finalizer" file, `crtn.o'. */
1583720a
DE
36
37#undef ENDFILE_SPEC
38#define ENDFILE_SPEC \
5f7ca34b 39 "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\
0691dde9 40 %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
1583720a 41
0913b2d6
DM
42/* -mcpu=native handling only makes sense with compiler running on
43 a SPARC chip. */
a0bd60d1 44#if defined(__sparc__) && defined(__linux__)
0913b2d6
DM
45extern const char *host_detect_local_cpu (int argc, const char **argv);
46# define EXTRA_SPEC_FUNCTIONS \
47 { "local_cpu_detect", host_detect_local_cpu },
48
49# define MCPU_MTUNE_NATIVE_SPECS \
50 " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}" \
51 " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
52#else
53# define MCPU_MTUNE_NATIVE_SPECS ""
54#endif
55
56#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
57
80ffc95e 58/* This is for -profile to use -lc_p instead of -lc. */
985c5e5b
RK
59#undef CC1_SPEC
60#define CC1_SPEC "%{profile:-p} \
985c5e5b
RK
61"
62
1583720a
DE
63#undef SIZE_TYPE
64#define SIZE_TYPE "unsigned int"
65
66#undef PTRDIFF_TYPE
67#define PTRDIFF_TYPE "int"
68
69#undef WCHAR_TYPE
247cfc5c 70#define WCHAR_TYPE "int"
1583720a
DE
71
72#undef WCHAR_TYPE_SIZE
247cfc5c
JJ
73#define WCHAR_TYPE_SIZE 32
74
a0a301fc 75#undef CPP_SUBTARGET_SPEC
a0a301fc 76#define CPP_SUBTARGET_SPEC \
fbf2ca7b 77"%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
1583720a 78
956d6950 79/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
1583720a
DE
80 for the special GCC options -static and -shared, which allow us to
81 link things in one of these three modes by applying the appropriate
83c2a9ef 82 combinations of options at link-time.
1583720a
DE
83
84 When the -shared link option is used a final link is not being
85 done. */
86
7bd85ce0 87#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
7bd85ce0 88
1583720a 89#undef LINK_SPEC
985c5e5b 90#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
e95b1e6a 91 %{!mno-relax:%{!r:-relax}} \
985c5e5b 92 %{!shared: \
dabadc52
JM
93 %{!static: \
94 %{rdynamic:-export-dynamic} \
107fd1c1 95 -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
dabadc52 96 %{static:-static}}"
1583720a 97
12eb1a9c 98/* It's safe to pass -s always, even if -g is not used. */
1583720a 99#undef ASM_SPEC
1141be7e 100#define ASM_SPEC "\
1141be7e 101-s \
40ea67af
EB
102%{fpic|fPIC|fpie|fPIE:-K PIC} \
103%{!.c:%{findirect-dispatch:-K PIC}} \
1141be7e 104%(asm_cpu) %(asm_relax)"
1583720a 105
1583720a
DE
106#undef ASM_OUTPUT_ALIGNED_LOCAL
107#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
108do { \
109 fputs ("\t.local\t", (FILE)); \
110 assemble_name ((FILE), (NAME)); \
111 putc ('\n', (FILE)); \
112 ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
113} while (0)
114
115#undef COMMON_ASM_OP
471b6f1b 116#define COMMON_ASM_OP "\t.common\t"
1583720a 117
59f96879
RH
118#undef LOCAL_LABEL_PREFIX
119#define LOCAL_LABEL_PREFIX "."
120
1583720a
DE
121/* This is how to store into the string LABEL
122 the symbol_ref name of an internal numbered label where
123 PREFIX is the class of label and NUM is the number within the class.
124 This is suitable for output with `assemble_name'. */
125
126#undef ASM_GENERATE_INTERNAL_LABEL
127#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
e59f7d3d 128 sprintf (LABEL, "*.L%s%ld", PREFIX, (long)(NUM))
1583720a
DE
129
130\f
ba31d94e 131/* Define for support of TFmode long double.
56149abc 132 SPARC ABI says that long double is 4 words. */
4710d3eb
JJ
133#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
134
4710d3eb
JJ
135/* Define this to set long double type size to use in libgcc2.c, which can
136 not depend on target_flags. */
137#ifdef __LONG_DOUBLE_128__
138#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
139#else
140#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
1583720a 141#endif
275b60d6 142
45dcc026
JJ
143#undef DITF_CONVERSION_LIBFUNCS
144#define DITF_CONVERSION_LIBFUNCS 1
f7e0e539 145\f
5751a10b
JJ
146#ifdef HAVE_AS_TLS
147#undef TARGET_SUN_TLS
148#undef TARGET_GNU_TLS
149#define TARGET_SUN_TLS 0
150#define TARGET_GNU_TLS 1
151#endif
152\f
7a31a340
DM
153/* We use GNU ld so undefine this so that attribute((init_priority)) works. */
154#undef CTORS_SECTION_ASM_OP
155#undef DTORS_SECTION_ASM_OP
db430d26 156
260c8ba3
EB
157/* Static stack checking is supported by means of probes. */
158#define STACK_CHECK_STATIC_BUILTIN 1
159
548a6c4f
EB
160/* Linux currently uses RMO in uniprocessor mode, which is equivalent to
161 TMO, and TMO in multiprocessor mode. But they reserve the right to
162 change their minds. */
163#undef SPARC_RELAXED_ORDERING
164#define SPARC_RELAXED_ORDERING true
5e77eb53
EB
165
166#undef NEED_INDICATE_EXEC_STACK
167#define NEED_INDICATE_EXEC_STACK 1
8ec11fe9
JJ
168
169#ifdef TARGET_LIBC_PROVIDES_SSP
170/* sparc glibc provides __stack_chk_guard in [%g7 + 0x14]. */
171#define TARGET_THREAD_SSP_OFFSET 0x14
172#endif
7269aee7
AH
173
174/* Define if long doubles should be mangled as 'g'. */
175#define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
cc44abe6
DM
176
177/* We use glibc _mcount for profiling. */
b61eacd6 178#undef NO_PROFILE_COUNTERS
cc44abe6 179#define NO_PROFILE_COUNTERS 1