Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/m68k/netbsd-elf.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | 77e2b8dfacca |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 /* Definitions of target machine for GNU compiler, |
2 for m68k (including m68010) NetBSD platforms using the | |
3 ELF object format. | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
4 Copyright (C) 2002, 2003, 2004, 2006, 2007, 2009, 2010 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
5 Free Software Foundation, Inc. |
0 | 6 Contributed by Wasabi Systems. Inc. |
7 | |
8 This file is derived from <m68k/m68kv4.h>, <m68k/m68kelf.h>, | |
9 and <m68k/linux.h>. | |
10 | |
11 This file is part of GCC. | |
12 | |
13 GCC is free software; you can redistribute it and/or modify | |
14 it under the terms of the GNU General Public License as published by | |
15 the Free Software Foundation; either version 3, or (at your option) | |
16 any later version. | |
17 | |
18 GCC is distributed in the hope that it will be useful, | |
19 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 GNU General Public License for more details. | |
22 | |
23 You should have received a copy of the GNU General Public License | |
24 along with GCC; see the file COPYING3. If not see | |
25 <http://www.gnu.org/licenses/>. */ | |
26 | |
27 #define TARGET_OS_CPP_BUILTINS() \ | |
28 do \ | |
29 { \ | |
30 NETBSD_OS_CPP_BUILTINS_ELF(); \ | |
31 builtin_define ("__m68k__"); \ | |
32 builtin_define ("__SVR4_ABI__"); \ | |
33 builtin_define ("__motorola__"); \ | |
34 if (TARGET_HARD_FLOAT) \ | |
35 builtin_define ("__HAVE_FPU__"); \ | |
36 } \ | |
37 while (0) | |
38 | |
39 /* Don't try using XFmode on the 68010. */ | |
40 #undef LONG_DOUBLE_TYPE_SIZE | |
41 #define LONG_DOUBLE_TYPE_SIZE (TARGET_68020 ? 80 : 64) | |
42 | |
43 #undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE | |
44 #ifdef __mc68010__ | |
45 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 | |
46 #else | |
47 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 80 | |
48 #endif | |
49 | |
50 #undef SUBTARGET_EXTRA_SPECS | |
51 #define SUBTARGET_EXTRA_SPECS \ | |
52 { "netbsd_entry_point", NETBSD_ENTRY_POINT }, | |
53 | |
54 | |
55 #undef TARGET_VERSION | |
56 #define TARGET_VERSION \ | |
57 fprintf (stderr, \ | |
58 TARGET_68010 \ | |
59 ? " (NetBSD/68010 ELF)" \ | |
60 : " (NetBSD/m68k ELF)"); | |
61 | |
62 | |
63 /* Provide a CPP_SPEC appropriate for NetBSD m68k targets. Currently we | |
64 deal with the GCC option '-posix', as well as an indication as to | |
65 whether or not use of the FPU is allowed. */ | |
66 | |
67 #undef CPP_SPEC | |
68 #define CPP_SPEC NETBSD_CPP_SPEC | |
69 | |
70 | |
71 /* Provide an ASM_SPEC appropriate for NetBSD m68k ELF targets. We need | |
72 to pass PIC code generation options. */ | |
73 | |
74 #undef ASM_SPEC | |
75 #define ASM_SPEC "%(asm_cpu_spec) %{fpic|fpie:-k} %{fPIC|fPIE:-k -K}" | |
76 | |
77 /* Provide a LINK_SPEC appropriate for a NetBSD/m68k ELF target. */ | |
78 | |
79 #undef LINK_SPEC | |
80 #define LINK_SPEC NETBSD_LINK_SPEC_ELF | |
81 | |
82 #define NETBSD_ENTRY_POINT "_start" | |
83 | |
84 /* Output assembler code to FILE to increment profiler label # LABELNO | |
85 for profiling a function only. */ | |
86 | |
87 #undef FUNCTION_PROFILER | |
88 #define FUNCTION_PROFILER(FILE, LABELNO) \ | |
89 do \ | |
90 { \ | |
91 asm_fprintf (FILE, "\tlea (%LLP%d,%Rpc),%Ra1\n", (LABELNO)); \ | |
92 if (flag_pic) \ | |
93 fprintf (FILE, "\tbsr.l __mcount@PLTPC\n"); \ | |
94 else \ | |
95 fprintf (FILE, "\tjbsr __mcount\n"); \ | |
96 } \ | |
97 while (0) | |
98 | |
99 | |
100 /* Make gcc agree with <machine/ansi.h> */ | |
101 | |
102 #undef SIZE_TYPE | |
103 #define SIZE_TYPE "unsigned int" | |
104 | |
105 #undef PTRDIFF_TYPE | |
106 #define PTRDIFF_TYPE "int" | |
107 | |
108 | |
109 /* XXX | |
110 Here is a bunch of stuff lifted from m68kelf.h. We don't use that | |
111 file directly, because it has a lot of baggage we don't want. */ | |
112 | |
113 | |
114 /* The prefix for register names. Note that REGISTER_NAMES | |
115 is supposed to include this prefix. Also note that this is NOT an | |
116 fprintf format string, it is a literal string. */ | |
117 | |
118 #undef REGISTER_PREFIX | |
119 #define REGISTER_PREFIX "%" | |
120 | |
121 | |
122 /* The prefix for local (compiler generated) lables. | |
123 These labels will not appear in the symbol table. */ | |
124 | |
125 #undef LOCAL_LABEL_PREFIX | |
126 #define LOCAL_LABEL_PREFIX "." | |
127 | |
128 | |
129 /* The prefix to add to user-visible assembler symbols. */ | |
130 | |
131 #undef USER_LABEL_PREFIX | |
132 #define USER_LABEL_PREFIX "" | |
133 | |
134 | |
135 #undef ASM_COMMENT_START | |
136 #define ASM_COMMENT_START "|" | |
137 | |
138 | |
139 /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to | |
140 keep switch tables in the text section. */ | |
141 | |
142 #undef JUMP_TABLES_IN_TEXT_SECTION | |
143 #define JUMP_TABLES_IN_TEXT_SECTION 1 | |
144 | |
145 | |
146 /* Use the default action for outputting the case label. */ | |
147 #undef ASM_OUTPUT_CASE_LABEL | |
148 #define ASM_RETURN_CASE_JUMP \ | |
149 do { \ | |
150 if (TARGET_COLDFIRE) \ | |
151 { \ | |
152 if (ADDRESS_REG_P (operands[0])) \ | |
153 return "jmp %%pc@(2,%0:l)"; \ | |
154 else \ | |
155 return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \ | |
156 } \ | |
157 else \ | |
158 return "jmp %%pc@(2,%0:w)"; \ | |
159 } while (0) | |
160 | |
161 | |
162 /* This is how to output an assembler line that says to advance the | |
163 location counter to a multiple of 2**LOG bytes. */ | |
164 | |
165 #undef ASM_OUTPUT_ALIGN | |
166 #define ASM_OUTPUT_ALIGN(FILE,LOG) \ | |
167 do \ | |
168 { \ | |
169 if ((LOG) > 0) \ | |
170 fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ | |
171 } \ | |
172 while (0) | |
173 | |
174 | |
175 /* If defined, a C expression whose value is a string containing the | |
176 assembler operation to identify the following data as uninitialized global | |
177 data. */ | |
178 | |
179 #define BSS_SECTION_ASM_OP ".section\t.bss" | |
180 | |
181 | |
182 /* Like `ASM_OUTPUT_BSS' except takes the required alignment as a | |
183 separate, explicit argument. If you define this macro, it is used | |
184 in place of `ASM_OUTPUT_BSS', and gives you more flexibility in | |
185 handling the required alignment of the variable. The alignment is | |
186 specified as the number of bits. | |
187 | |
188 Try to use function `asm_output_aligned_bss' defined in file | |
189 `varasm.c' when defining this macro. */ | |
190 | |
191 #undef ASM_OUTPUT_ALIGNED_BSS | |
192 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ | |
193 asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) | |
194 | |
195 | |
196 #undef ASM_OUTPUT_COMMON | |
197 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ | |
198 ( fputs (".comm ", (FILE)), \ | |
199 assemble_name ((FILE), (NAME)), \ | |
200 fprintf ((FILE), ",%u\n", (int)(SIZE))) | |
201 | |
202 #undef ASM_OUTPUT_LOCAL | |
203 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ | |
204 ( fputs (".lcomm ", (FILE)), \ | |
205 assemble_name ((FILE), (NAME)), \ | |
206 fprintf ((FILE), ",%u\n", (int)(SIZE))) | |
207 | |
208 | |
209 /* XXX | |
210 This is the end of the chunk lifted from m68kelf.h */ | |
211 | |
212 | |
213 /* XXX | |
214 The following chunk is more or less lifted from m68kv4.h. | |
215 We'd like to just #include that file, but it has not yet | |
216 been converted to the new include style. | |
217 | |
218 Should there be a m68kv4-abi.h ?? */ | |
219 | |
220 | |
221 /* Register in which address to store a structure value is passed to a | |
222 function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ | |
223 | |
224 #undef M68K_STRUCT_VALUE_REGNUM | |
225 #define M68K_STRUCT_VALUE_REGNUM A0_REG | |
226 | |
227 | |
228 /* Register in which static-chain is passed to a function. The | |
229 default isn m68k.h is a0, but that is already the struct value | |
230 regnum. Make it a1 instead. */ | |
231 | |
232 #undef STATIC_CHAIN_REGNUM | |
233 #define STATIC_CHAIN_REGNUM A1_REG | |
234 #undef M68K_STATIC_CHAIN_REG_NAME | |
235 #define M68K_STATIC_CHAIN_REG_NAME REGISTER_PREFIX "a1" | |
236 | |
237 | |
238 /* Now to renumber registers for dbx and gdb. | |
239 We use the Sun-3 convention, which is: | |
240 floating point registers have numbers 18 to 25, not | |
241 16 to 23 as they do in the compiler. */ | |
242 | |
243 #undef DBX_REGISTER_NUMBER | |
244 #define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2) | |
245 | |
246 | |
247 /* 1 if N is a possible register number for a function value. For | |
248 m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral, | |
249 pointer, or floating types, respectively. Reject fp0 if not using | |
250 a 68881 coprocessor. */ | |
251 | |
252 #undef FUNCTION_VALUE_REGNO_P | |
253 #define FUNCTION_VALUE_REGNO_P(N) \ | |
254 ((N) == D0_REG || (N) == A0_REG || (TARGET_68881 && (N) == FP0_REG)) | |
255 | |
256 | |
257 /* Define this to be true when FUNCTION_VALUE_REGNO_P is true for | |
258 more than one register. */ | |
259 | |
260 #undef NEEDS_UNTYPED_CALL | |
261 #define NEEDS_UNTYPED_CALL 1 | |
262 | |
263 | |
264 /* Define how to generate (in the callee) the output value of a | |
265 function and how to find (in the caller) the value returned by a | |
266 function. VALTYPE is the data type of the value (as a tree). If | |
267 the precise function being called is known, FUNC is its | |
268 FUNCTION_DECL; otherwise, FUNC is 0. For m68k/SVR4 generate the | |
269 result in d0, a0, or fp0 as appropriate. */ | |
270 | |
271 #undef FUNCTION_VALUE | |
272 #define FUNCTION_VALUE(VALTYPE, FUNC) \ | |
273 m68k_function_value (VALTYPE, FUNC) | |
274 | |
275 | |
276 /* Define how to find the value returned by a library function | |
277 assuming the value has mode MODE. | |
278 For m68k/SVR4 look for integer values in d0, pointer values in d0 | |
279 (returned in both d0 and a0), and floating values in fp0. */ | |
280 | |
281 #undef LIBCALL_VALUE | |
282 #define LIBCALL_VALUE(MODE) \ | |
283 m68k_libcall_value (MODE) | |
284 | |
285 | |
286 /* Boundary (in *bits*) on which stack pointer should be aligned. | |
287 The m68k/SVR4 convention is to keep the stack pointer longword aligned. */ | |
288 | |
289 #undef STACK_BOUNDARY | |
290 #define STACK_BOUNDARY 32 | |
291 | |
292 | |
293 /* Alignment of field after `int : 0' in a structure. | |
294 For m68k/SVR4, this is the next longword boundary. */ | |
295 | |
296 #undef EMPTY_FIELD_BOUNDARY | |
297 #define EMPTY_FIELD_BOUNDARY 32 | |
298 | |
299 | |
300 /* No data type wants to be aligned rounder than this. | |
301 For m68k/SVR4, some types (doubles for example) are aligned on 8 byte | |
302 boundaries */ | |
303 | |
304 #undef BIGGEST_ALIGNMENT | |
305 #define BIGGEST_ALIGNMENT 64 | |
306 | |
307 | |
308 /* The svr4 ABI for the m68k says that records and unions are returned | |
309 in memory. */ | |
310 | |
311 #undef DEFAULT_PCC_STRUCT_RETURN | |
312 #define DEFAULT_PCC_STRUCT_RETURN 1 | |
313 | |
314 /* XXX | |
315 This is the end of the chunk lifted from m68kv4.h */ |