1 /* Definitions for MIPS running Linux-based GNU systems with ELF format.
2 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 #define WCHAR_TYPE "int"
25 #undef WCHAR_TYPE_SIZE
26 #define WCHAR_TYPE_SIZE 32
28 /* If defined, a C expression whose value is a string containing the
29 assembler operation to identify the following data as
30 uninitialized global data. If not defined, and neither
31 `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
32 uninitialized global data will be output in the data section if
33 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
35 #define BSS_SECTION_ASM_OP "\t.section\t.bss"
37 #define SBSS_SECTION_ASM_OP "\t.section .sbss"
39 /* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
40 separate, explicit argument. If you define this macro, it is used
41 in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
42 handling the required alignment of the variable. The alignment is
43 specified as the number of bits.
45 Try to use function `asm_output_aligned_bss' defined in file
46 `varasm.c' when defining this macro. */
47 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
49 if (SIZE > 0 && (long)(SIZE) <= mips_section_threshold) \
50 named_section (0, ".sbss", 0); \
53 ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT)); \
54 last_assemble_variable_decl = DECL; \
55 ASM_DECLARE_OBJECT_NAME (FILE, NAME, DECL); \
56 ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \
59 /* These macros generate the special .type and .size directives which
60 are used to set the corresponding fields of the linker symbol table
61 entries in an ELF object file under SVR4. These macros also output
62 the starting labels for the relevant functions/objects. */
64 /* Write the extra assembler code needed to declare an object properly. */
66 #undef ASM_DECLARE_OBJECT_NAME
67 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
70 ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \
71 size_directive_output = 0; \
72 if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
74 size_directive_output = 1; \
75 size = int_size_in_bytes (TREE_TYPE (DECL)); \
76 ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size); \
78 mips_declare_object (FILE, NAME, "", ":\n", 0); \
82 #if TARGET_ENDIAN_DEFAULT == 0
83 #define TARGET_VERSION fprintf (stderr, " (MIPSel GNU/Linux with ELF)");
85 #define TARGET_VERSION fprintf (stderr, " (MIPS GNU/Linux with ELF)");
89 #undef MD_STARTFILE_PREFIX
91 /* Required to keep collect2.c happy */
92 #undef OBJECT_FORMAT_COFF
94 /* If we don't set MASK_ABICALLS, we can't default to PIC. */
96 #define TARGET_DEFAULT (MASK_ABICALLS|MASK_GAS)
98 #define TARGET_OS_CPP_BUILTINS() \
100 builtin_define ("__gnu_linux__"); \
101 builtin_define ("__PIC__"); \
102 builtin_define ("__pic__"); \
103 builtin_define_std ("unix"); \
104 builtin_define_std ("linux"); \
105 builtin_assert ("system=linux"); \
106 /* The GNU C++ standard library requires this. */ \
107 if (c_dialect_cxx ()) \
108 builtin_define ("_GNU_SOURCE"); \
110 if (mips_abi == ABI_N32) \
112 builtin_define ("_ABIN32=2"); \
113 builtin_define ("_MIPS_SIM=_ABIN32"); \
114 builtin_define ("_MIPS_SZLONG=32"); \
115 builtin_define ("_MIPS_SZPTR=32"); \
117 else if (mips_abi == ABI_64) \
119 builtin_define ("_ABI64=3"); \
120 builtin_define ("_MIPS_SIM=_ABI64"); \
121 builtin_define ("_MIPS_SZLONG=64"); \
122 builtin_define ("_MIPS_SZPTR=64"); \
126 builtin_define ("_MIPS_SIM=_MIPS_SIM_ABI32"); \
127 builtin_define ("_MIPS_SZLONG=32"); \
128 builtin_define ("_MIPS_SZPTR=32"); \
130 if (TARGET_FLOAT64) \
131 builtin_define ("_MIPS_FPSET=32"); \
133 builtin_define ("_MIPS_FPSET=16"); \
136 builtin_define ("_MIPS_SZINT=64"); \
138 builtin_define ("_MIPS_SZINT=32"); \
141 #undef SUBTARGET_CPP_SPEC
142 #define SUBTARGET_CPP_SPEC "\
143 %{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} \
144 %{fPIC|fPIE|fpic|fpie:-D__PIC__ -D__pic__} \
145 %{pthread:-D_REENTRANT}"
148 /* -G is incompatible with -KPIC which is the default, so only allow objects
149 in the small data section if the user explicitly asks for it. */
150 #undef MIPS_DEFAULT_GVALUE
151 #define MIPS_DEFAULT_GVALUE 0
153 /* Borrowed from sparc/linux.h */
161 %{rdynamic:-export-dynamic} \
162 %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
165 #undef SUBTARGET_ASM_SPEC
166 #define SUBTARGET_ASM_SPEC "\
168 %{!fno-PIC:%{!fno-pic:-KPIC}} \
169 %{fno-PIC:-non_shared} %{fno-pic:-non_shared}"
171 #undef SUBTARGET_ASM_DEBUGGING_SPEC
172 #define SUBTARGET_ASM_DEBUGGING_SPEC "-g0"
174 /* The MIPS assembler has different syntax for .set. We set it to
175 .dummy to trap any errors. */
177 #define SET_ASM_OP "\t.dummy\t"
179 #undef ASM_OUTPUT_DEF
180 #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
182 fputc ( '\t', FILE); \
183 assemble_name (FILE, LABEL1); \
184 fputs ( " = ", FILE); \
185 assemble_name (FILE, LABEL2); \
186 fputc ( '\n', FILE); \
189 #undef ASM_DECLARE_FUNCTION_NAME
190 #define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
192 if (!flag_inhibit_size_directive) \
194 fputs ("\t.ent\t", STREAM); \
195 assemble_name (STREAM, NAME); \
196 putc ('\n', STREAM); \
198 ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, NAME, "function"); \
199 assemble_name (STREAM, NAME); \
200 fputs (":\n", STREAM); \
203 #undef ASM_DECLARE_FUNCTION_SIZE
204 #define ASM_DECLARE_FUNCTION_SIZE(STREAM, NAME, DECL) \
206 if (!flag_inhibit_size_directive) \
208 fputs ("\t.end\t", STREAM); \
209 assemble_name (STREAM, NAME); \
210 putc ('\n', STREAM); \
214 /* Tell function_prologue in mips.c that we have already output the .ent/.end
216 #define FUNCTION_NAME_ALREADY_DECLARED
218 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
220 ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\
223 /* The glibc _mcount stub will save $v0 for us. Don't mess with saving
224 it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the
225 presence of $gp-relative calls. */
226 #undef ASM_OUTPUT_REG_PUSH
227 #undef ASM_OUTPUT_REG_POP
229 /* The current Linux binutils uses MIPS_STABS_ELF and doesn't support
231 #undef SDB_DEBUGGING_INFO
236 %{!static:-rpath-link %R/lib:%R/usr/lib} \
237 %{!shared: %{pthread:-lpthread} \
238 %{profile:-lc_p} %{!profile: -lc}}"