]>
Commit | Line | Data |
---|---|---|
512b62fb | 1 | /* Definitions for Intel x86 running BeOS |
39ed301b | 2 | Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
512b62fb JM |
3 | |
4 | This file is part of GNU CC. | |
5 | ||
6 | GNU CC is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 2, or (at your option) | |
9 | any later version. | |
10 | ||
11 | GNU CC is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GNU CC; see the file COPYING. If not, write to | |
18 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
19 | Boston, MA 02111-1307, USA. */ | |
20 | ||
512b62fb | 21 | |
512b62fb JM |
22 | #define TARGET_VERSION fprintf (stderr, " (i386 BeOS/ELF)"); |
23 | ||
24 | /* Change debugging to Dwarf2. */ | |
25 | #undef PREFERRED_DEBUGGING_TYPE | |
26 | #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG | |
27 | ||
28 | /* The SVR4 ABI for the i386 says that records and unions are returned | |
29 | in memory. */ | |
30 | #undef DEFAULT_PCC_STRUCT_RETURN | |
31 | #define DEFAULT_PCC_STRUCT_RETURN 1 | |
32 | ||
33 | #undef ASM_COMMENT_START | |
34 | #define ASM_COMMENT_START " #" | |
35 | ||
512b62fb | 36 | #undef DBX_REGISTER_NUMBER |
0f7fa3d0 JH |
37 | #define DBX_REGISTER_NUMBER(n) \ |
38 | (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) | |
512b62fb JM |
39 | |
40 | /* Output assembler code to FILE to increment profiler label # LABELNO | |
41 | for profiling a function entry. */ | |
42 | ||
a5fa1ecd JH |
43 | #undef MCOUNT_NAME |
44 | #define MCOUNT_NAME "mcount" | |
512b62fb JM |
45 | |
46 | #undef SIZE_TYPE | |
47 | #define SIZE_TYPE "long unsigned int" | |
48 | ||
49 | #undef PTRDIFF_TYPE | |
50 | #define PTRDIFF_TYPE "long int" | |
51 | ||
52 | #undef WCHAR_TYPE | |
53 | #define WCHAR_TYPE "short unsigned int" | |
54 | ||
512b62fb JM |
55 | #undef WCHAR_TYPE_SIZE |
56 | #define WCHAR_TYPE_SIZE 16 | |
512b62fb | 57 | |
f23a084d NB |
58 | #define TARGET_OS_CPP_BUILTINS() \ |
59 | do \ | |
60 | { \ | |
61 | builtin_define ("__ELF__"); \ | |
62 | builtin_define ("__BEOS__"); \ | |
63 | builtin_define ("__INTEL__"); \ | |
64 | builtin_define ("_X86_"); \ | |
65 | builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ | |
66 | builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ | |
67 | builtin_define ("__declspec(x)=__attribute__((x))"); \ | |
68 | builtin_assert ("system=beos"); \ | |
69 | if (flag_pic) \ | |
70 | { \ | |
71 | builtin_define ("__PIC__"); \ | |
72 | builtin_define ("__pic__"); \ | |
73 | } \ | |
74 | } \ | |
75 | while (0) | |
76 | ||
512b62fb JM |
77 | /* BeOS uses lots of multichars, so don't warn about them unless the |
78 | user explicitly asks for the warnings with -Wmultichar. Note that | |
892a2d68 | 79 | CC1_SPEC is used for both cc1 and cc1plus. */ |
512b62fb JM |
80 | |
81 | #undef CC1_SPEC | |
82 | #define CC1_SPEC "%{!no-fpic:%{!fPIC:-fpic}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}" | |
83 | ||
84 | #undef CC1PLUS_SPEC | |
85 | #define CC1PLUS_SPEC "%{!Wctor-dtor-privacy:-Wno-ctor-dtor-privacy}" | |
86 | ||
87 | /* Provide a LINK_SPEC appropriate for BeOS. Here we provide support | |
88 | for the special GCC options -static and -shared, which allow us to | |
89 | link things in one of these three modes by applying the appropriate | |
892a2d68 | 90 | combinations of options at link-time. */ |
512b62fb | 91 | |
892a2d68 | 92 | /* If ELF is the default format, we should not use /lib/elf. */ |
512b62fb JM |
93 | |
94 | #undef LINK_SPEC | |
95 | #define LINK_SPEC "%{!o*:-o %b} -m elf_i386_be -shared -Bsymbolic %{nostart:-e 0}" | |
96 | ||
97 | /* Provide start and end file specs appropriate to glibc. */ | |
98 | ||
99 | /* LIB_SPEC for BeOS */ | |
100 | #undef LIB_SPEC | |
101 | #define LIB_SPEC "-lnet -lroot" | |
102 | ||
103 | /* gcc runtime lib is built into libroot.so on BeOS */ | |
104 | /* ??? This is gonna be lovely when the next release of gcc has | |
105 | some new symbol in, so that links start failing. */ | |
106 | #undef LIBGCC_SPEC | |
107 | #define LIBGCC_SPEC "" | |
108 | ||
109 | #undef STARTFILE_SPEC | |
a7a4fd17 | 110 | #define STARTFILE_SPEC "crti.o%s crtbegin.o%s %{!nostart:start_dyn.o%s} init_term_dyn.o%s %{p:i386-mcount.o%s}" |
512b62fb JM |
111 | |
112 | #undef ENDFILE_SPEC | |
113 | #define ENDFILE_SPEC "crtend.o%s crtn.o%s" | |
114 | ||
512b62fb JM |
115 | /* A C statement (sans semicolon) to output to the stdio stream |
116 | FILE the assembler definition of uninitialized global DECL named | |
117 | NAME whose size is SIZE bytes and alignment is ALIGN bytes. | |
118 | Try to use asm_output_aligned_bss to implement this macro. */ | |
119 | ||
120 | #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ | |
121 | asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) | |
122 | ||
123 | /* A C statement to output to the stdio stream FILE an assembler | |
124 | command to advance the location counter to a multiple of 1<<LOG | |
125 | bytes if it is within MAX_SKIP bytes. | |
126 | ||
127 | This is used to align code labels according to Intel recommendations. */ | |
128 | ||
129 | #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN | |
130 | #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ | |
131 | if ((LOG)!=0) \ | |
132 | if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ | |
133 | else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)) | |
134 | #endif | |
135 | ||
512b62fb JM |
136 | /* For native compiler, use standard BeOS include file search paths |
137 | rooted in /boot/develop/headers. For a cross compiler, don't | |
138 | expect the host to use the BeOS directory scheme, and instead look | |
139 | for the BeOS include files relative to TOOL_INCLUDE_DIR. Yes, we | |
140 | use ANSI string concatenation here (FIXME) */ | |
141 | ||
142 | #ifndef CROSS_COMPILE | |
143 | #undef INCLUDE_DEFAULTS | |
144 | #define INCLUDE_DEFAULTS \ | |
145 | { \ | |
146 | { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\ | |
147 | { GCC_INCLUDE_DIR, "GCC", 0, 0 },\ | |
148 | { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \ | |
149 | { "/boot/develop/headers/be/add-ons/graphics", 0, 0, 0 },\ | |
150 | { "/boot/develop/headers/be/devel", 0, 0, 0 },\ | |
151 | { "/boot/develop/headers/be/translation", 0, 0, 0 },\ | |
152 | { "/boot/develop/headers/be/mail", 0, 0, 0 },\ | |
153 | { "/boot/develop/headers/gnu", 0, 0, 0 },\ | |
154 | { "/boot/develop/headers/be/drivers", 0, 0, 0 },\ | |
155 | { "/boot/develop/headers/be/opengl", 0, 0, 0 },\ | |
156 | { "/boot/develop/headers/be/game", 0, 0, 0 },\ | |
157 | { "/boot/develop/headers/be/support", 0, 0, 0 },\ | |
158 | { "/boot/develop/headers/be/storage", 0, 0, 0 },\ | |
159 | { "/boot/develop/headers/be/kernel", 0, 0, 0 },\ | |
160 | { "/boot/develop/headers/be/net", 0, 0, 0 },\ | |
161 | { "/boot/develop/headers/be/midi", 0, 0, 0 },\ | |
a7a4fd17 | 162 | { "/boot/develop/headers/be/midi2", 0, 0, 0 },\ |
512b62fb JM |
163 | { "/boot/develop/headers/be/media", 0, 0, 0 },\ |
164 | { "/boot/develop/headers/be/interface", 0, 0, 0 },\ | |
165 | { "/boot/develop/headers/be/device", 0, 0, 0 },\ | |
166 | { "/boot/develop/headers/be/app", 0, 0, 0 },\ | |
512b62fb | 167 | { "/boot/develop/headers/be/precompiled", 0, 0, 0 },\ |
a7a4fd17 FF |
168 | { "/boot/develop/headers/be/add-ons/input_server", 0, 0, 0 },\ |
169 | { "/boot/develop/headers/be/add-ons/net_server", 0, 0, 0 },\ | |
170 | { "/boot/develop/headers/be/add-ons/screen_saver", 0, 0, 0 },\ | |
171 | { "/boot/develop/headers/be/add-ons/tracker", 0, 0, 0 },\ | |
172 | { "/boot/develop/headers/be/be_apps/Deskbar", 0, 0, 0 },\ | |
173 | { "/boot/develop/headers/be/be_apps/NetPositive", 0, 0, 0 },\ | |
174 | { "/boot/develop/headers/be/be_apps/Tracker", 0, 0, 0 },\ | |
175 | { "/boot/develop/headers/be/drivers/tty", 0, 0, 0 },\ | |
176 | { "/boot/develop/headers/be/net/netinet", 0, 0, 0 },\ | |
177 | { "/boot/develop/headers/be/storage", 0, 0, 0 },\ | |
512b62fb | 178 | { "/boot/develop/headers/be", 0, 0, 0 },\ |
a7a4fd17 FF |
179 | { "/boot/develop/headers/cpp", 0, 0, 0 },\ |
180 | { "/boot/develop/headers/posix", 0, 0, 0 },\ | |
512b62fb JM |
181 | { "/boot/develop/headers", 0, 0, 0 }, \ |
182 | { 0, 0, 0, 0 } \ | |
a5a9cb26 | 183 | } |
512b62fb JM |
184 | #else /* CROSS_COMPILE */ |
185 | #undef INCLUDE_DEFAULTS | |
186 | #define INCLUDE_DEFAULTS \ | |
187 | { \ | |
188 | { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\ | |
189 | { GCC_INCLUDE_DIR, "GCC", 0, 0 },\ | |
190 | { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \ | |
191 | { CROSS_INCLUDE_DIR "/be/add-ons/graphics", 0, 0, 0 },\ | |
192 | { CROSS_INCLUDE_DIR "/be/devel", 0, 0, 0 },\ | |
193 | { CROSS_INCLUDE_DIR "/be/translation", 0, 0, 0 },\ | |
194 | { CROSS_INCLUDE_DIR "/be/mail", 0, 0, 0 },\ | |
195 | { CROSS_INCLUDE_DIR "/gnu", 0, 0, 0 },\ | |
196 | { CROSS_INCLUDE_DIR "/be/drivers", 0, 0, 0 },\ | |
197 | { CROSS_INCLUDE_DIR "/be/opengl", 0, 0, 0 },\ | |
198 | { CROSS_INCLUDE_DIR "/be/game", 0, 0, 0 },\ | |
199 | { CROSS_INCLUDE_DIR "/be/support", 0, 0, 0 },\ | |
200 | { CROSS_INCLUDE_DIR "/be/storage", 0, 0, 0 },\ | |
201 | { CROSS_INCLUDE_DIR "/be/kernel", 0, 0, 0 },\ | |
202 | { CROSS_INCLUDE_DIR "/be/net", 0, 0, 0 },\ | |
203 | { CROSS_INCLUDE_DIR "/be/midi", 0, 0, 0 },\ | |
a7a4fd17 | 204 | { CROSS_INCLUDE_DIR "/be/midi2", 0, 0, 0 },\ |
512b62fb JM |
205 | { CROSS_INCLUDE_DIR "/be/media", 0, 0, 0 },\ |
206 | { CROSS_INCLUDE_DIR "/be/interface", 0, 0, 0 },\ | |
207 | { CROSS_INCLUDE_DIR "/be/device", 0, 0, 0 },\ | |
208 | { CROSS_INCLUDE_DIR "/be/app", 0, 0, 0 },\ | |
512b62fb | 209 | { CROSS_INCLUDE_DIR "/be/precompiled", 0, 0, 0 },\ |
a7a4fd17 FF |
210 | { CROSS_INCLUDE_DIR "/be/add-ons/input_server", 0, 0, 0 },\ |
211 | { CROSS_INCLUDE_DIR "/be/add-ons/net_server", 0, 0, 0 },\ | |
212 | { CROSS_INCLUDE_DIR "/be/add-ons/screen_saver", 0, 0, 0 },\ | |
213 | { CROSS_INCLUDE_DIR "/be/add-ons/tracker", 0, 0, 0 },\ | |
214 | { CROSS_INCLUDE_DIR "/be/be_apps/Deskbar", 0, 0, 0 },\ | |
215 | { CROSS_INCLUDE_DIR "/be/be_apps/NetPositive", 0, 0, 0 },\ | |
216 | { CROSS_INCLUDE_DIR "/be/be_apps/Tracker", 0, 0, 0 },\ | |
217 | { CROSS_INCLUDE_DIR "/be/drivers/tty", 0, 0, 0 },\ | |
218 | { CROSS_INCLUDE_DIR "/be/net/netinet", 0, 0, 0 },\ | |
219 | { CROSS_INCLUDE_DIR "/be/storage", 0, 0, 0 },\ | |
512b62fb | 220 | { CROSS_INCLUDE_DIR "/be", 0, 0, 0 },\ |
a7a4fd17 FF |
221 | { CROSS_INCLUDE_DIR "/cpp", 0, 0, 0 },\ |
222 | { CROSS_INCLUDE_DIR "/posix", 0, 0, 0 },\ | |
512b62fb JM |
223 | { CROSS_INCLUDE_DIR , 0, 0, 0 }, \ |
224 | { 0, 0, 0, 0 } \ | |
a5a9cb26 | 225 | } |
512b62fb JM |
226 | #endif |
227 | ||
228 | /* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will | |
229 | cause nasty problems if we override it. */ | |
230 | #define LIBRARY_PATH_ENV "BELIBRARIES" | |
231 | ||
232 | /* BeOS doesn't have a separate math library. */ | |
233 | #define MATH_LIBRARY "" | |
234 | ||
235 | /* BeOS headers are C++-aware (and often use C++). */ | |
236 | #define NO_IMPLICIT_EXTERN_C | |
237 | ||
238 | /* Define this macro if in some cases global symbols from one translation | |
239 | unit may not be bound to undefined symbols in another translation unit | |
240 | without user intervention. For instance, under Microsoft Windows | |
241 | symbols must be explicitly imported from shared libraries (DLLs). */ | |
242 | #define MULTIPLE_SYMBOL_SPACES |