]>
Commit | Line | Data |
---|---|---|
c5c76735 JL |
1 | /* Get common system includes and various definitions and declarations based |
2 | on autoconf macros. | |
0a18ddf9 | 3 | Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
aca69483 | 4 | |
1322177d | 5 | This file is part of GCC. |
1b0c6de6 | 6 | |
1322177d LB |
7 | GCC is free software; you can redistribute it and/or modify it under |
8 | the terms of the GNU General Public License as published by the Free | |
9 | Software Foundation; either version 2, or (at your option) any later | |
10 | version. | |
1b0c6de6 | 11 | |
1322177d LB |
12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
1b0c6de6 JL |
16 | |
17 | You should have received a copy of the GNU General Public License | |
1322177d LB |
18 | along with GCC; see the file COPYING. If not, write to the Free |
19 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
20 | 02111-1307, USA. */ | |
aca69483 | 21 | |
c5c76735 | 22 | |
88657302 RH |
23 | #ifndef GCC_SYSTEM_H |
24 | #define GCC_SYSTEM_H | |
aca69483 | 25 | |
2a0621b9 | 26 | /* We must include stdarg.h before stdio.h. */ |
789f983a | 27 | #include <stdarg.h> |
789f983a | 28 | |
6f81b1ad RH |
29 | #ifndef va_copy |
30 | # ifdef __va_copy | |
31 | # define va_copy(d,s) __va_copy((d),(s)) | |
32 | # else | |
33 | # define va_copy(d,s) ((d) = (s)) | |
34 | # endif | |
35 | #endif | |
36 | ||
d6edb99e ZW |
37 | #ifdef HAVE_STDDEF_H |
38 | # include <stddef.h> | |
39 | #endif | |
40 | ||
aca69483 | 41 | #include <stdio.h> |
51db713f KG |
42 | |
43 | /* Define a generic NULL if one hasn't already been defined. */ | |
44 | #ifndef NULL | |
45 | #define NULL 0 | |
46 | #endif | |
47 | ||
54953b66 | 48 | /* The compiler is not a multi-threaded application and therefore we |
3b681e9d ZW |
49 | do not have to use the locking functions. In fact, using the locking |
50 | functions can cause the compiler to be significantly slower under | |
51 | I/O bound conditions (such as -g -O0 on very large source files). | |
9c30c0e7 | 52 | |
3b681e9d | 53 | HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio |
f31e826b KG |
54 | code is multi-thread safe by default. If it is set to 0, then do |
55 | not worry about using the _unlocked functions. | |
0d569849 | 56 | |
3b681e9d ZW |
57 | fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are |
58 | extensions and need to be prototyped by hand (since we do not | |
59 | define _GNU_SOURCE). */ | |
9c30c0e7 | 60 | |
3b681e9d ZW |
61 | #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED |
62 | ||
63 | # ifdef HAVE_PUTC_UNLOCKED | |
64 | # undef putc | |
65 | # define putc(C, Stream) putc_unlocked (C, Stream) | |
66 | # endif | |
67 | # ifdef HAVE_FPUTC_UNLOCKED | |
68 | # undef fputc | |
69 | # define fputc(C, Stream) fputc_unlocked (C, Stream) | |
70 | # endif | |
71 | ||
72 | # ifdef HAVE_FPUTS_UNLOCKED | |
73 | # undef fputs | |
74 | # define fputs(String, Stream) fputs_unlocked (String, Stream) | |
75 | # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED | |
2a0621b9 | 76 | extern int fputs_unlocked (const char *, FILE *); |
3b681e9d ZW |
77 | # endif |
78 | # endif | |
79 | # ifdef HAVE_FWRITE_UNLOCKED | |
80 | # undef fwrite | |
81 | # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) | |
82 | # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED | |
2a0621b9 | 83 | extern int fwrite_unlocked (const void *, size_t, size_t, FILE *); |
3b681e9d | 84 | # endif |
9c30c0e7 | 85 | # endif |
3b681e9d ZW |
86 | # ifdef HAVE_FPRINTF_UNLOCKED |
87 | # undef fprintf | |
88 | /* We can't use a function-like macro here because we don't know if | |
89 | we have varargs macros. */ | |
90 | # define fprintf fprintf_unlocked | |
91 | # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED | |
2a0621b9 | 92 | extern int fprintf_unlocked (FILE *, const char *, ...); |
3b681e9d ZW |
93 | # endif |
94 | # endif | |
95 | ||
54953b66 UD |
96 | #endif |
97 | ||
0d569849 | 98 | /* ??? Glibc's fwrite/fread_unlocked macros cause |
1c99d804 RH |
99 | "warning: signed and unsigned type in conditional expression". */ |
100 | #undef fread_unlocked | |
101 | #undef fwrite_unlocked | |
102 | ||
f6bbde28 ZW |
103 | /* There are an extraordinary number of issues with <ctype.h>. |
104 | The last straw is that it varies with the locale. Use libiberty's | |
105 | replacement instead. */ | |
106 | #include <safe-ctype.h> | |
aca69483 | 107 | |
aca69483 | 108 | #include <sys/types.h> |
c5c76735 | 109 | |
aca69483 KG |
110 | #include <errno.h> |
111 | ||
6c889b67 | 112 | #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO |
aca69483 KG |
113 | extern int errno; |
114 | #endif | |
115 | ||
87608693 KG |
116 | /* Some of glibc's string inlines cause warnings. Plus we'd rather |
117 | rely on (and therefore test) GCC's string builtins. */ | |
118 | #define __NO_STRING_INLINES | |
119 | ||
ccc7d11a | 120 | #ifdef STRING_WITH_STRINGS |
aca69483 | 121 | # include <string.h> |
ccc7d11a | 122 | # include <strings.h> |
aca69483 | 123 | #else |
ccc7d11a KG |
124 | # ifdef HAVE_STRING_H |
125 | # include <string.h> | |
126 | # else | |
127 | # ifdef HAVE_STRINGS_H | |
128 | # include <strings.h> | |
129 | # endif | |
aca69483 KG |
130 | # endif |
131 | #endif | |
132 | ||
133 | #ifdef HAVE_STDLIB_H | |
134 | # include <stdlib.h> | |
135 | #endif | |
136 | ||
eaf4e618 ZW |
137 | /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and |
138 | FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, | |
139 | or 0 and 1 if those macros are not defined. */ | |
140 | #ifndef SUCCESS_EXIT_CODE | |
141 | # ifdef EXIT_SUCCESS | |
142 | # define SUCCESS_EXIT_CODE EXIT_SUCCESS | |
143 | # else | |
144 | # define SUCCESS_EXIT_CODE 0 | |
145 | # endif | |
146 | #endif | |
147 | ||
148 | #ifndef FATAL_EXIT_CODE | |
149 | # ifdef EXIT_FAILURE | |
150 | # define FATAL_EXIT_CODE EXIT_FAILURE | |
151 | # else | |
152 | # define FATAL_EXIT_CODE 1 | |
153 | # endif | |
154 | #endif | |
155 | ||
aca69483 KG |
156 | #ifdef HAVE_UNISTD_H |
157 | # include <unistd.h> | |
158 | #endif | |
159 | ||
160 | #ifdef HAVE_SYS_PARAM_H | |
161 | # include <sys/param.h> | |
23d1aac4 | 162 | /* We use this identifier later and it appears in some vendor param.h's. */ |
655781b7 | 163 | # undef PREFETCH |
aca69483 KG |
164 | #endif |
165 | ||
166 | #if HAVE_LIMITS_H | |
167 | # include <limits.h> | |
168 | #endif | |
169 | ||
75e93faa ZW |
170 | /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ |
171 | #include "hwint.h" | |
f80d6fd7 | 172 | |
5297e085 KG |
173 | /* A macro to determine whether a VALUE lies inclusively within a |
174 | certain range without evaluating the VALUE more than once. This | |
175 | macro won't warn if the VALUE is unsigned and the LOWER bound is | |
176 | zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER | |
177 | bound *is* evaluated twice, and LOWER must not be greater than | |
178 | UPPER. However the bounds themselves can be either positive or | |
179 | negative. */ | |
180 | #define IN_RANGE(VALUE, LOWER, UPPER) \ | |
cf403648 | 181 | ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER))) |
5297e085 | 182 | |
f12bc141 ZW |
183 | /* Infrastructure for defining missing _MAX and _MIN macros. Note that |
184 | macros defined with these cannot be used in #if. */ | |
185 | ||
186 | /* The extra casts work around common compiler bugs. */ | |
187 | #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) | |
188 | /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. | |
189 | It is necessary at least when t == time_t. */ | |
190 | #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ | |
191 | ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) | |
192 | #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) | |
193 | ||
194 | /* Use that infrastructure to provide a few constants. */ | |
195 | #ifndef UCHAR_MAX | |
196 | # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) | |
197 | #endif | |
198 | ||
aca69483 KG |
199 | #ifdef TIME_WITH_SYS_TIME |
200 | # include <sys/time.h> | |
201 | # include <time.h> | |
202 | #else | |
203 | # if HAVE_SYS_TIME_H | |
e572c0c6 | 204 | # include <sys/time.h> |
aca69483 | 205 | # else |
e572c0c6 KG |
206 | # ifdef HAVE_TIME_H |
207 | # include <time.h> | |
208 | # endif | |
209 | # endif | |
aca69483 KG |
210 | #endif |
211 | ||
212 | #ifdef HAVE_FCNTL_H | |
213 | # include <fcntl.h> | |
214 | #else | |
e572c0c6 KG |
215 | # ifdef HAVE_SYS_FILE_H |
216 | # include <sys/file.h> | |
217 | # endif | |
aca69483 KG |
218 | #endif |
219 | ||
220 | #ifndef SEEK_SET | |
221 | # define SEEK_SET 0 | |
222 | # define SEEK_CUR 1 | |
223 | # define SEEK_END 2 | |
224 | #endif | |
225 | #ifndef F_OK | |
226 | # define F_OK 0 | |
227 | # define X_OK 1 | |
228 | # define W_OK 2 | |
229 | # define R_OK 4 | |
230 | #endif | |
e572c0c6 KG |
231 | #ifndef O_RDONLY |
232 | # define O_RDONLY 0 | |
233 | #endif | |
234 | #ifndef O_WRONLY | |
235 | # define O_WRONLY 1 | |
236 | #endif | |
aca69483 | 237 | |
36b8337d KG |
238 | /* Some systems define these in, e.g., param.h. We undefine these names |
239 | here to avoid the warnings. We prefer to use our definitions since we | |
240 | know they are correct. */ | |
241 | ||
242 | #undef MIN | |
243 | #undef MAX | |
244 | #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) | |
245 | #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) | |
246 | ||
13799af3 MM |
247 | /* Returns the least number N such that N * Y >= X. */ |
248 | #define CEIL(x,y) (((x) + (y) - 1) / (y)) | |
249 | ||
e9831ca0 KG |
250 | #ifdef HAVE_SYS_WAIT_H |
251 | #include <sys/wait.h> | |
252 | #endif | |
253 | ||
254 | #ifndef WIFSIGNALED | |
255 | #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f) | |
256 | #endif | |
257 | #ifndef WTERMSIG | |
258 | #define WTERMSIG(S) ((S) & 0x7f) | |
259 | #endif | |
260 | #ifndef WIFEXITED | |
261 | #define WIFEXITED(S) (((S) & 0xff) == 0) | |
262 | #endif | |
263 | #ifndef WEXITSTATUS | |
264 | #define WEXITSTATUS(S) (((S) & 0xff00) >> 8) | |
265 | #endif | |
8fa213ac PDM |
266 | #ifndef WSTOPSIG |
267 | #define WSTOPSIG WEXITSTATUS | |
268 | #endif | |
15dda4d3 KG |
269 | #ifndef WCOREDUMP |
270 | #define WCOREDUMP(S) ((S) & WCOREFLG) | |
271 | #endif | |
272 | #ifndef WCOREFLG | |
273 | #define WCOREFLG 0200 | |
274 | #endif | |
e9831ca0 | 275 | |
f31e826b KG |
276 | /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they |
277 | are defined to 0 then we must provide the relevant declaration | |
278 | here. These checks will be in the undefined state while configure | |
279 | is running so be careful to test "defined (HAVE_DECL_*)". */ | |
aca69483 | 280 | |
f31e826b | 281 | #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF |
2a0621b9 | 282 | extern double atof (const char *); |
8f81384f KG |
283 | #endif |
284 | ||
f31e826b | 285 | #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL |
2a0621b9 | 286 | extern long atol (const char *); |
8f81384f KG |
287 | #endif |
288 | ||
f31e826b | 289 | #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE |
2a0621b9 | 290 | extern void free (void *); |
aca69483 KG |
291 | #endif |
292 | ||
f31e826b | 293 | #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD |
2a0621b9 | 294 | extern char *getcwd (char *, size_t); |
6cd5dccd KG |
295 | #endif |
296 | ||
f31e826b | 297 | #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV |
2a0621b9 | 298 | extern char *getenv (const char *); |
79e11844 KG |
299 | #endif |
300 | ||
ebb13e7e | 301 | #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT |
2a0621b9 | 302 | extern int getopt (int, char * const *, const char *); |
ebb13e7e RK |
303 | #endif |
304 | ||
f31e826b | 305 | #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD |
2a0621b9 | 306 | extern char *getwd (char *); |
6cd5dccd KG |
307 | #endif |
308 | ||
f31e826b | 309 | #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK |
2a0621b9 | 310 | extern void *sbrk (int); |
8f81384f KG |
311 | #endif |
312 | ||
f31e826b | 313 | #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR |
2a0621b9 | 314 | extern char *strstr (const char *, const char *); |
d3d5cc97 JL |
315 | #endif |
316 | ||
c5c76735 JL |
317 | #ifdef HAVE_MALLOC_H |
318 | #include <malloc.h> | |
319 | #endif | |
320 | ||
f31e826b | 321 | #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC |
2a0621b9 | 322 | extern void *malloc (size_t); |
c5c76735 JL |
323 | #endif |
324 | ||
f31e826b | 325 | #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC |
2a0621b9 | 326 | extern void *calloc (size_t, size_t); |
c5c76735 JL |
327 | #endif |
328 | ||
f31e826b | 329 | #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC |
2a0621b9 | 330 | extern void *realloc (void *, size_t); |
c5c76735 JL |
331 | #endif |
332 | ||
759af044 | 333 | /* If the system doesn't provide strsignal, we get it defined in |
2ba84f36 | 334 | libiberty but no declaration is supplied. */ |
0a18ddf9 AS |
335 | #if !defined (HAVE_STRSIGNAL) \ |
336 | || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL) | |
759af044 | 337 | # ifndef strsignal |
2a0621b9 | 338 | extern const char *strsignal (int); |
007e8d2a | 339 | # endif |
759af044 | 340 | #endif |
007e8d2a | 341 | |
d2cabf16 | 342 | #ifdef HAVE_GETRLIMIT |
f31e826b | 343 | # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT |
d2cabf16 | 344 | # ifndef getrlimit |
d4d4ae5f | 345 | struct rlimit; |
2a0621b9 | 346 | extern int getrlimit (int, struct rlimit *); |
d2cabf16 KG |
347 | # endif |
348 | # endif | |
349 | #endif | |
350 | ||
351 | #ifdef HAVE_SETRLIMIT | |
f31e826b | 352 | # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT |
d2cabf16 | 353 | # ifndef setrlimit |
d4d4ae5f | 354 | struct rlimit; |
2a0621b9 | 355 | extern int setrlimit (int, const struct rlimit *); |
d2cabf16 KG |
356 | # endif |
357 | # endif | |
358 | #endif | |
359 | ||
f31e826b | 360 | #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT |
2a0621b9 | 361 | extern void abort (void); |
2a611d21 | 362 | #endif |
d4ba0ead | 363 | |
61d0346d | 364 | /* 1 if we have C99 designated initializers. */ |
18922061 | 365 | #if !defined(HAVE_DESIGNATED_INITIALIZERS) |
61d0346d NB |
366 | #define HAVE_DESIGNATED_INITIALIZERS \ |
367 | ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) | |
18922061 | 368 | #endif |
61d0346d | 369 | |
d6edb99e ZW |
370 | /* 1 if we have _Bool. */ |
371 | #ifndef HAVE__BOOL | |
372 | # define HAVE__BOOL \ | |
373 | ((GCC_VERSION >= 3000) || (__STDC_VERSION__ >= 199901L)) | |
374 | #endif | |
375 | ||
376 | ||
a05e22b8 RH |
377 | #if HAVE_SYS_STAT_H |
378 | # include <sys/stat.h> | |
379 | #endif | |
9855b854 MN |
380 | |
381 | /* Test if something is a normal file. */ | |
382 | #ifndef S_ISREG | |
383 | #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) | |
384 | #endif | |
385 | ||
386 | /* Test if something is a directory. */ | |
387 | #ifndef S_ISDIR | |
388 | #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) | |
389 | #endif | |
390 | ||
6458033d ZW |
391 | /* Test if something is a character special file. */ |
392 | #ifndef S_ISCHR | |
393 | #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) | |
394 | #endif | |
395 | ||
be3dad6f PDM |
396 | /* Test if something is a block special file. */ |
397 | #ifndef S_ISBLK | |
398 | #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) | |
399 | #endif | |
400 | ||
6458033d ZW |
401 | /* Test if something is a socket. */ |
402 | #ifndef S_ISSOCK | |
403 | # ifdef S_IFSOCK | |
404 | # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) | |
405 | # else | |
406 | # define S_ISSOCK(m) 0 | |
407 | # endif | |
408 | #endif | |
409 | ||
410 | /* Test if something is a FIFO. */ | |
411 | #ifndef S_ISFIFO | |
412 | # ifdef S_IFIFO | |
413 | # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) | |
414 | # else | |
415 | # define S_ISFIFO(m) 0 | |
416 | # endif | |
417 | #endif | |
418 | ||
419 | /* Approximate O_NONBLOCK. */ | |
420 | #ifndef O_NONBLOCK | |
421 | #define O_NONBLOCK O_NDELAY | |
422 | #endif | |
423 | ||
424 | /* Approximate O_NOCTTY. */ | |
425 | #ifndef O_NOCTTY | |
426 | #define O_NOCTTY 0 | |
427 | #endif | |
428 | ||
f3692274 ME |
429 | /* Define well known filenos if the system does not define them. */ |
430 | #ifndef STDIN_FILENO | |
431 | # define STDIN_FILENO 0 | |
432 | #endif | |
433 | #ifndef STDOUT_FILENO | |
434 | # define STDOUT_FILENO 1 | |
435 | #endif | |
924d8a7c | 436 | #ifndef STDERR_FILENO |
f3692274 ME |
437 | # define STDERR_FILENO 2 |
438 | #endif | |
439 | ||
2ba84f36 | 440 | /* Some systems have mkdir that takes a single argument. */ |
75923b2f MK |
441 | #ifdef MKDIR_TAKES_ONE_ARG |
442 | # define mkdir(a,b) mkdir(a) | |
443 | #endif | |
444 | ||
1eb14644 KG |
445 | /* Provide a way to print an address via printf. */ |
446 | #ifndef HOST_PTR_PRINTF | |
447 | # ifdef HAVE_PRINTF_PTR | |
448 | # define HOST_PTR_PRINTF "%p" | |
449 | # else | |
450 | # define HOST_PTR_PRINTF \ | |
451 | (sizeof (int) == sizeof (char *) ? "%x" \ | |
452 | : sizeof (long) == sizeof (char *) ? "%lx" : "%llx") | |
453 | # endif | |
454 | #endif /* ! HOST_PTR_PRINTF */ | |
455 | ||
d5b6516d MK |
456 | /* By default, colon separates directories in a path. */ |
457 | #ifndef PATH_SEPARATOR | |
458 | #define PATH_SEPARATOR ':' | |
459 | #endif | |
460 | ||
461 | #ifndef DIR_SEPARATOR | |
462 | #define DIR_SEPARATOR '/' | |
463 | #endif | |
464 | ||
465 | /* Define IS_DIR_SEPARATOR. */ | |
466 | #ifndef DIR_SEPARATOR_2 | |
c5c0b3d9 | 467 | # define IS_DIR_SEPARATOR(CH) ((CH) == DIR_SEPARATOR) |
d5b6516d | 468 | #else /* DIR_SEPARATOR_2 */ |
c5c0b3d9 RK |
469 | # define IS_DIR_SEPARATOR(CH) \ |
470 | (((CH) == DIR_SEPARATOR) || ((CH) == DIR_SEPARATOR_2)) | |
d5b6516d MK |
471 | #endif /* DIR_SEPARATOR_2 */ |
472 | ||
c5c0b3d9 RK |
473 | /* Say how to test for an absolute pathname. On Unix systems, this is if |
474 | it starts with a leading slash or a '$', the latter meaning the value of | |
14b493d6 | 475 | an environment variable is to be used. On machine with DOS-based |
c5c0b3d9 RK |
476 | file systems, it is also absolute if it starts with a drive identifier. */ |
477 | #ifdef HAVE_DOS_BASED_FILE_SYSTEM | |
478 | #define IS_ABSOLUTE_PATHNAME(STR) \ | |
479 | (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$' \ | |
480 | || ((STR)[0] != '\0' && (STR)[1] == ':' && IS_DIR_SEPARATOR ((STR)[2]))) | |
481 | #else | |
482 | #define IS_ABSOLUTE_PATHNAME(STR) \ | |
483 | (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$') | |
484 | #endif | |
485 | ||
2ba84f36 | 486 | /* Get libiberty declarations. */ |
2778b98d KG |
487 | #include "libiberty.h" |
488 | ||
49009afd JL |
489 | /* Provide a default for the HOST_BIT_BUCKET. |
490 | This suffices for POSIX-like hosts. */ | |
491 | ||
492 | #ifndef HOST_BIT_BUCKET | |
493 | #define HOST_BIT_BUCKET "/dev/null" | |
494 | #endif | |
495 | ||
de94b46c KG |
496 | /* Be conservative and only use enum bitfields with GCC. Likewise for |
497 | char bitfields. | |
9612ab65 | 498 | FIXME: provide a complete autoconf test for buggy enum bitfields. */ |
c149cc37 | 499 | |
9612ab65 | 500 | #if (GCC_VERSION > 2000) |
c149cc37 | 501 | #define ENUM_BITFIELD(TYPE) enum TYPE |
de94b46c | 502 | #define CHAR_BITFIELD unsigned char |
c149cc37 RL |
503 | #else |
504 | #define ENUM_BITFIELD(TYPE) unsigned int | |
de94b46c | 505 | #define CHAR_BITFIELD unsigned int |
c149cc37 RL |
506 | #endif |
507 | ||
e0125cf3 | 508 | #ifndef offsetof |
cf403648 | 509 | #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) |
e0125cf3 | 510 | #endif |
c149cc37 | 511 | |
fbfc1192 ZW |
512 | /* Various error reporting routines want to use __FUNCTION__. */ |
513 | #if (GCC_VERSION < 2007) | |
791ef777 | 514 | #ifndef __FUNCTION__ |
fbfc1192 | 515 | #define __FUNCTION__ "?" |
791ef777 | 516 | #endif /* ! __FUNCTION__ */ |
fbfc1192 ZW |
517 | #endif |
518 | ||
2c3fcba6 ZW |
519 | /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that |
520 | the most likely value of A is B. This feature was added at some point | |
521 | between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ | |
522 | #if (GCC_VERSION < 3000) | |
523 | #define __builtin_expect(a, b) (a) | |
524 | #endif | |
525 | ||
d6edb99e | 526 | /* Provide some sort of boolean type. We use stdbool.h if it's |
2f78c311 ZW |
527 | available. This must be after all inclusion of system headers, |
528 | as some of them will mess us up. */ | |
d6edb99e ZW |
529 | #undef bool |
530 | #undef true | |
531 | #undef false | |
532 | #undef TRUE | |
533 | #undef FALSE | |
534 | ||
535 | #ifdef HAVE_STDBOOL_H | |
536 | # include <stdbool.h> | |
537 | #else | |
538 | # if !HAVE__BOOL | |
539 | typedef char _Bool; | |
540 | # endif | |
541 | # define bool _Bool | |
542 | # define true 1 | |
543 | # define false 0 | |
544 | #endif | |
545 | ||
546 | #define TRUE true | |
547 | #define FALSE false | |
548 | ||
f4ce9d90 KG |
549 | /* As the last action in this file, we poison the identifiers that |
550 | shouldn't be used. Note, luckily gcc-3.0's token-based integrated | |
551 | preprocessor won't trip on poisoned identifiers that arrive from | |
552 | the expansion of macros. E.g. #define strrchr rindex, won't error | |
553 | if rindex is poisoned after this directive is issued and later on | |
554 | strrchr is called. | |
555 | ||
556 | Note: We define bypass macros for the few cases where we really | |
557 | want to use the libc memory allocation routines. Otherwise we | |
558 | insist you use the "x" versions from libiberty. */ | |
559 | ||
560 | #define really_call_malloc malloc | |
561 | #define really_call_calloc calloc | |
562 | #define really_call_realloc realloc | |
563 | ||
4977bab6 ZW |
564 | #if defined(FLEX_SCANNER) || defined(YYBISON) |
565 | /* Flex and bison use malloc and realloc. Yuk. Note that this means | |
32dd366d | 566 | really_call_* cannot be used in a .l or .y file. */ |
4977bab6 ZW |
567 | #define malloc xmalloc |
568 | #define realloc xrealloc | |
569 | #endif | |
570 | ||
f4ce9d90 KG |
571 | #if (GCC_VERSION >= 3000) |
572 | ||
77b84559 KG |
573 | /* Note autoconf checks for prototype declarations and includes |
574 | system.h while doing so. Only poison these tokens if actually | |
575 | compiling gcc, so that the autoconf declaration tests for malloc | |
576 | etc don't spuriously fail. */ | |
577 | #ifdef IN_GCC | |
8a0e5115 KG |
578 | #undef calloc |
579 | #undef strdup | |
e2500fed GK |
580 | #pragma GCC poison calloc strdup |
581 | ||
4977bab6 | 582 | #if !defined(FLEX_SCANNER) && !defined(YYBISON) |
e2500fed GK |
583 | #undef malloc |
584 | #undef realloc | |
585 | #pragma GCC poison malloc realloc | |
586 | #endif | |
41441dc7 NB |
587 | |
588 | /* Old target macros that have moved to the target hooks structure. */ | |
589 | #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ | |
590 | FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ | |
591 | FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ | |
592 | DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ | |
593 | VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ | |
594 | SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ | |
595 | MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ | |
aa6ad1a6 | 596 | MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ |
44a147ad | 597 | ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \ |
fb49053f | 598 | WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \ |
3961e8fe | 599 | ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \ |
dcefdf67 | 600 | ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \ |
1bc7c5b6 | 601 | ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END |
aa6ad1a6 | 602 | |
e2500fed | 603 | /* Other obsolete target macros, or macros that used to be in target |
006946e4 JM |
604 | headers and were not used, and may be obsolete or may never have |
605 | been used. */ | |
c08f71aa | 606 | #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES \ |
ed722f66 JM |
607 | ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT \ |
608 | DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ | |
16c484c7 | 609 | OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ |
006946e4 | 610 | LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ |
c99d986a | 611 | STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ |
f458d1d5 | 612 | SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ |
a11eba95 | 613 | TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \ |
fc881338 RH |
614 | NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \ |
615 | BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \ | |
616 | FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \ | |
c0667597 | 617 | MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP \ |
e5bcbd89 | 618 | ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL ASM_OUTPUT_INTERNAL_LABEL \ |
80eaf415 | 619 | OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE \ |
f691dc3b AJ |
620 | ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT \ |
621 | DBX_LBRAC_FIRST DBX_OUTPUT_ENUM DBX_OUTPUT_SOURCE_FILENAME \ | |
622 | DBX_WORKING_DIRECTORY INSN_CACHE_DEPTH INSN_CACHE_SIZE \ | |
5145a02e AJ |
623 | INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT \ |
624 | EXIT_BODY | |
aa6ad1a6 | 625 | |
e2500fed GK |
626 | /* Hooks that are no longer used. */ |
627 | #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ | |
628 | LANG_HOOKS_MARK_TREE | |
629 | ||
b0c231bb KG |
630 | /* Libiberty macros that are no longer used in GCC. */ |
631 | #undef ANSI_PROTOTYPES | |
632 | #undef PTR_CONST | |
633 | #undef LONG_DOUBLE | |
634 | #undef VPARAMS | |
635 | #undef VA_OPEN | |
636 | #undef VA_FIXEDARG | |
637 | #undef VA_CLOSE | |
638 | #undef VA_START | |
639 | #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ | |
640 | VA_FIXEDARG VA_CLOSE VA_START | |
77b84559 | 641 | #endif /* IN_GCC */ |
f4ce9d90 | 642 | |
8e944909 KG |
643 | /* Note: not all uses of the `index' token (e.g. variable names and |
644 | structure members) have been eliminated. */ | |
645 | #undef bcopy | |
8a0e5115 KG |
646 | #undef bzero |
647 | #undef bcmp | |
648 | #undef rindex | |
8e944909 | 649 | #pragma GCC poison bcopy bzero bcmp rindex |
f4ce9d90 KG |
650 | |
651 | #endif /* GCC >= 3.0 */ | |
652 | ||
88657302 | 653 | #endif /* ! GCC_SYSTEM_H */ |