0
|
1 /* Get common system includes and various definitions and declarations based
|
|
2 on autoconf macros.
|
|
3 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
|
|
4 Free Software Foundation, Inc.
|
|
5
|
|
6 This file is part of GCC.
|
|
7
|
|
8 GCC is free software; you can redistribute it and/or modify it under
|
|
9 the terms of the GNU General Public License as published by the Free
|
|
10 Software Foundation; either version 3, or (at your option) any later
|
|
11 version.
|
|
12
|
|
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
16 for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GCC; see the file COPYING3. If not see
|
|
20 <http://www.gnu.org/licenses/>. */
|
|
21
|
|
22
|
|
23 #ifndef GCC_SYSTEM_H
|
|
24 #define GCC_SYSTEM_H
|
|
25
|
|
26 /* We must include stdarg.h before stdio.h. */
|
|
27 #include <stdarg.h>
|
|
28
|
|
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
|
|
37 #ifdef HAVE_STDDEF_H
|
|
38 # include <stddef.h>
|
|
39 #endif
|
|
40
|
|
41 #include <stdio.h>
|
|
42
|
|
43 /* Define a generic NULL if one hasn't already been defined. */
|
|
44 #ifndef NULL
|
|
45 #define NULL 0
|
|
46 #endif
|
|
47
|
|
48 /* Use the unlocked open routines from libiberty. */
|
|
49 #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE)
|
|
50 #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE)
|
|
51 #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM)
|
|
52
|
|
53 /* The compiler is not a multi-threaded application and therefore we
|
|
54 do not have to use the locking functions. In fact, using the locking
|
|
55 functions can cause the compiler to be significantly slower under
|
|
56 I/O bound conditions (such as -g -O0 on very large source files).
|
|
57
|
|
58 HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
|
|
59 code is multi-thread safe by default. If it is set to 0, then do
|
|
60 not worry about using the _unlocked functions.
|
|
61
|
|
62 fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
|
|
63 extensions and need to be prototyped by hand (since we do not
|
|
64 define _GNU_SOURCE). */
|
|
65
|
|
66 #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
|
|
67
|
|
68 # ifdef HAVE_PUTC_UNLOCKED
|
|
69 # undef putc
|
|
70 # define putc(C, Stream) putc_unlocked (C, Stream)
|
|
71 # endif
|
|
72 # ifdef HAVE_PUTCHAR_UNLOCKED
|
|
73 # undef putchar
|
|
74 # define putchar(C) putchar_unlocked (C)
|
|
75 # endif
|
|
76 # ifdef HAVE_GETC_UNLOCKED
|
|
77 # undef getc
|
|
78 # define getc(Stream) getc_unlocked (Stream)
|
|
79 # endif
|
|
80 # ifdef HAVE_GETCHAR_UNLOCKED
|
|
81 # undef getchar
|
|
82 # define getchar() getchar_unlocked ()
|
|
83 # endif
|
|
84 # ifdef HAVE_FPUTC_UNLOCKED
|
|
85 # undef fputc
|
|
86 # define fputc(C, Stream) fputc_unlocked (C, Stream)
|
|
87 # endif
|
|
88
|
|
89 # ifdef HAVE_CLEARERR_UNLOCKED
|
|
90 # undef clearerr
|
|
91 # define clearerr(Stream) clearerr_unlocked (Stream)
|
|
92 # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
|
|
93 extern void clearerr_unlocked (FILE *);
|
|
94 # endif
|
|
95 # endif
|
|
96 # ifdef HAVE_FEOF_UNLOCKED
|
|
97 # undef feof
|
|
98 # define feof(Stream) feof_unlocked (Stream)
|
|
99 # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
|
|
100 extern int feof_unlocked (FILE *);
|
|
101 # endif
|
|
102 # endif
|
|
103 # ifdef HAVE_FILENO_UNLOCKED
|
|
104 # undef fileno
|
|
105 # define fileno(Stream) fileno_unlocked (Stream)
|
|
106 # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
|
|
107 extern int fileno_unlocked (FILE *);
|
|
108 # endif
|
|
109 # endif
|
|
110 # ifdef HAVE_FFLUSH_UNLOCKED
|
|
111 # undef fflush
|
|
112 # define fflush(Stream) fflush_unlocked (Stream)
|
|
113 # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
|
|
114 extern int fflush_unlocked (FILE *);
|
|
115 # endif
|
|
116 # endif
|
|
117 # ifdef HAVE_FGETC_UNLOCKED
|
|
118 # undef fgetc
|
|
119 # define fgetc(Stream) fgetc_unlocked (Stream)
|
|
120 # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
|
|
121 extern int fgetc_unlocked (FILE *);
|
|
122 # endif
|
|
123 # endif
|
|
124 # ifdef HAVE_FGETS_UNLOCKED
|
|
125 # undef fgets
|
|
126 # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
|
|
127 # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
|
|
128 extern char *fgets_unlocked (char *, int, FILE *);
|
|
129 # endif
|
|
130 # endif
|
|
131 # ifdef HAVE_FPUTS_UNLOCKED
|
|
132 # undef fputs
|
|
133 # define fputs(String, Stream) fputs_unlocked (String, Stream)
|
|
134 # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
|
|
135 extern int fputs_unlocked (const char *, FILE *);
|
|
136 # endif
|
|
137 # endif
|
|
138 # ifdef HAVE_FERROR_UNLOCKED
|
|
139 # undef ferror
|
|
140 # define ferror(Stream) ferror_unlocked (Stream)
|
|
141 # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
|
|
142 extern int ferror_unlocked (FILE *);
|
|
143 # endif
|
|
144 # endif
|
|
145 # ifdef HAVE_FREAD_UNLOCKED
|
|
146 # undef fread
|
|
147 # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
|
|
148 # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
|
|
149 extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
|
|
150 # endif
|
|
151 # endif
|
|
152 # ifdef HAVE_FWRITE_UNLOCKED
|
|
153 # undef fwrite
|
|
154 # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
|
|
155 # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
|
|
156 extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
|
|
157 # endif
|
|
158 # endif
|
|
159 # ifdef HAVE_FPRINTF_UNLOCKED
|
|
160 # undef fprintf
|
|
161 /* We can't use a function-like macro here because we don't know if
|
|
162 we have varargs macros. */
|
|
163 # define fprintf fprintf_unlocked
|
|
164 # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
|
|
165 extern int fprintf_unlocked (FILE *, const char *, ...);
|
|
166 # endif
|
|
167 # endif
|
|
168
|
|
169 #endif
|
|
170
|
|
171 /* ??? Glibc's fwrite/fread_unlocked macros cause
|
|
172 "warning: signed and unsigned type in conditional expression". */
|
|
173 #undef fread_unlocked
|
|
174 #undef fwrite_unlocked
|
|
175
|
|
176 /* There are an extraordinary number of issues with <ctype.h>.
|
|
177 The last straw is that it varies with the locale. Use libiberty's
|
|
178 replacement instead. */
|
|
179 #include <safe-ctype.h>
|
|
180
|
|
181 #include <sys/types.h>
|
|
182
|
|
183 #include <errno.h>
|
|
184
|
|
185 #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
|
|
186 extern int errno;
|
|
187 #endif
|
|
188
|
|
189 /* Some of glibc's string inlines cause warnings. Plus we'd rather
|
|
190 rely on (and therefore test) GCC's string builtins. */
|
|
191 #define __NO_STRING_INLINES
|
|
192
|
|
193 #ifdef STRING_WITH_STRINGS
|
|
194 # include <string.h>
|
|
195 # include <strings.h>
|
|
196 #else
|
|
197 # ifdef HAVE_STRING_H
|
|
198 # include <string.h>
|
|
199 # else
|
|
200 # ifdef HAVE_STRINGS_H
|
|
201 # include <strings.h>
|
|
202 # endif
|
|
203 # endif
|
|
204 #endif
|
|
205
|
|
206 #ifdef HAVE_STDLIB_H
|
|
207 # include <stdlib.h>
|
|
208 #endif
|
|
209
|
|
210 /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and
|
|
211 FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively,
|
|
212 or 0 and 1 if those macros are not defined. */
|
|
213 #ifndef SUCCESS_EXIT_CODE
|
|
214 # ifdef EXIT_SUCCESS
|
|
215 # define SUCCESS_EXIT_CODE EXIT_SUCCESS
|
|
216 # else
|
|
217 # define SUCCESS_EXIT_CODE 0
|
|
218 # endif
|
|
219 #endif
|
|
220
|
|
221 #ifndef FATAL_EXIT_CODE
|
|
222 # ifdef EXIT_FAILURE
|
|
223 # define FATAL_EXIT_CODE EXIT_FAILURE
|
|
224 # else
|
|
225 # define FATAL_EXIT_CODE 1
|
|
226 # endif
|
|
227 #endif
|
|
228
|
|
229 #define ICE_EXIT_CODE 4
|
|
230
|
|
231 #ifdef HAVE_UNISTD_H
|
|
232 # include <unistd.h>
|
|
233 #endif
|
|
234
|
|
235 #ifdef HAVE_SYS_PARAM_H
|
|
236 # include <sys/param.h>
|
|
237 /* We use this identifier later and it appears in some vendor param.h's. */
|
|
238 # undef PREFETCH
|
|
239 #endif
|
|
240
|
|
241 #if HAVE_LIMITS_H
|
|
242 # include <limits.h>
|
|
243 #endif
|
|
244
|
|
245 /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */
|
|
246 #include "hwint.h"
|
|
247
|
|
248 /* A macro to determine whether a VALUE lies inclusively within a
|
|
249 certain range without evaluating the VALUE more than once. This
|
|
250 macro won't warn if the VALUE is unsigned and the LOWER bound is
|
|
251 zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER
|
|
252 bound *is* evaluated twice, and LOWER must not be greater than
|
|
253 UPPER. However the bounds themselves can be either positive or
|
|
254 negative. */
|
|
255 #define IN_RANGE(VALUE, LOWER, UPPER) \
|
|
256 ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \
|
|
257 <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER))
|
|
258
|
|
259 /* Infrastructure for defining missing _MAX and _MIN macros. Note that
|
|
260 macros defined with these cannot be used in #if. */
|
|
261
|
|
262 /* The extra casts work around common compiler bugs. */
|
|
263 #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
|
264 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
|
|
265 It is necessary at least when t == time_t. */
|
|
266 #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
|
|
267 ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))
|
|
268 #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
|
|
269
|
|
270 /* Use that infrastructure to provide a few constants. */
|
|
271 #ifndef UCHAR_MAX
|
|
272 # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
|
|
273 #endif
|
|
274
|
|
275 #ifdef TIME_WITH_SYS_TIME
|
|
276 # include <sys/time.h>
|
|
277 # include <time.h>
|
|
278 #else
|
|
279 # if HAVE_SYS_TIME_H
|
|
280 # include <sys/time.h>
|
|
281 # else
|
|
282 # ifdef HAVE_TIME_H
|
|
283 # include <time.h>
|
|
284 # endif
|
|
285 # endif
|
|
286 #endif
|
|
287
|
|
288 #ifdef HAVE_FCNTL_H
|
|
289 # include <fcntl.h>
|
|
290 #else
|
|
291 # ifdef HAVE_SYS_FILE_H
|
|
292 # include <sys/file.h>
|
|
293 # endif
|
|
294 #endif
|
|
295
|
|
296 #ifndef SEEK_SET
|
|
297 # define SEEK_SET 0
|
|
298 # define SEEK_CUR 1
|
|
299 # define SEEK_END 2
|
|
300 #endif
|
|
301 #ifndef F_OK
|
|
302 # define F_OK 0
|
|
303 # define X_OK 1
|
|
304 # define W_OK 2
|
|
305 # define R_OK 4
|
|
306 #endif
|
|
307 #ifndef O_RDONLY
|
|
308 # define O_RDONLY 0
|
|
309 #endif
|
|
310 #ifndef O_WRONLY
|
|
311 # define O_WRONLY 1
|
|
312 #endif
|
|
313
|
|
314 /* Some systems define these in, e.g., param.h. We undefine these names
|
|
315 here to avoid the warnings. We prefer to use our definitions since we
|
|
316 know they are correct. */
|
|
317
|
|
318 #undef MIN
|
|
319 #undef MAX
|
|
320 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
|
|
321 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
|
|
322
|
|
323 /* Returns the least number N such that N * Y >= X. */
|
|
324 #define CEIL(x,y) (((x) + (y) - 1) / (y))
|
|
325
|
|
326 #ifdef HAVE_SYS_WAIT_H
|
|
327 #include <sys/wait.h>
|
|
328 #endif
|
|
329
|
|
330 #ifndef WIFSIGNALED
|
|
331 #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
|
|
332 #endif
|
|
333 #ifndef WTERMSIG
|
|
334 #define WTERMSIG(S) ((S) & 0x7f)
|
|
335 #endif
|
|
336 #ifndef WIFEXITED
|
|
337 #define WIFEXITED(S) (((S) & 0xff) == 0)
|
|
338 #endif
|
|
339 #ifndef WEXITSTATUS
|
|
340 #define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
|
|
341 #endif
|
|
342 #ifndef WSTOPSIG
|
|
343 #define WSTOPSIG WEXITSTATUS
|
|
344 #endif
|
|
345 #ifndef WCOREDUMP
|
|
346 #define WCOREDUMP(S) ((S) & WCOREFLG)
|
|
347 #endif
|
|
348 #ifndef WCOREFLG
|
|
349 #define WCOREFLG 0200
|
|
350 #endif
|
|
351
|
|
352 /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they
|
|
353 are defined to 0 then we must provide the relevant declaration
|
|
354 here. These checks will be in the undefined state while configure
|
|
355 is running so be careful to test "defined (HAVE_DECL_*)". */
|
|
356
|
|
357 #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF
|
|
358 extern double atof (const char *);
|
|
359 #endif
|
|
360
|
|
361 #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL
|
|
362 extern long atol (const char *);
|
|
363 #endif
|
|
364
|
|
365 #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE
|
|
366 extern void free (void *);
|
|
367 #endif
|
|
368
|
|
369 #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD
|
|
370 extern char *getcwd (char *, size_t);
|
|
371 #endif
|
|
372
|
|
373 #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV
|
|
374 extern char *getenv (const char *);
|
|
375 #endif
|
|
376
|
|
377 #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT
|
|
378 extern int getopt (int, char * const *, const char *);
|
|
379 #endif
|
|
380
|
|
381 #if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE
|
|
382 extern int getpagesize (void);
|
|
383 #endif
|
|
384
|
|
385 #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD
|
|
386 extern char *getwd (char *);
|
|
387 #endif
|
|
388
|
|
389 #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK
|
|
390 extern void *sbrk (int);
|
|
391 #endif
|
|
392
|
|
393 #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR
|
|
394 extern char *strstr (const char *, const char *);
|
|
395 #endif
|
|
396
|
|
397 #ifdef HAVE_MALLOC_H
|
|
398 #include <malloc.h>
|
|
399 #endif
|
|
400
|
|
401 #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC
|
|
402 extern void *malloc (size_t);
|
|
403 #endif
|
|
404
|
|
405 #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC
|
|
406 extern void *calloc (size_t, size_t);
|
|
407 #endif
|
|
408
|
|
409 #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC
|
|
410 extern void *realloc (void *, size_t);
|
|
411 #endif
|
|
412
|
|
413 /* If the system doesn't provide strsignal, we get it defined in
|
|
414 libiberty but no declaration is supplied. */
|
|
415 #if !defined (HAVE_STRSIGNAL) \
|
|
416 || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL)
|
|
417 # ifndef strsignal
|
|
418 extern const char *strsignal (int);
|
|
419 # endif
|
|
420 #endif
|
|
421
|
|
422 #ifdef HAVE_GETRLIMIT
|
|
423 # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT
|
|
424 # ifndef getrlimit
|
|
425 struct rlimit;
|
|
426 extern int getrlimit (int, struct rlimit *);
|
|
427 # endif
|
|
428 # endif
|
|
429 #endif
|
|
430
|
|
431 #ifdef HAVE_SETRLIMIT
|
|
432 # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT
|
|
433 # ifndef setrlimit
|
|
434 struct rlimit;
|
|
435 extern int setrlimit (int, const struct rlimit *);
|
|
436 # endif
|
|
437 # endif
|
|
438 #endif
|
|
439
|
|
440 #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
|
|
441 extern void abort (void);
|
|
442 #endif
|
|
443
|
|
444 #if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
|
|
445 extern int snprintf (char *, size_t, const char *, ...);
|
|
446 #endif
|
|
447
|
|
448 #if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
|
|
449 extern int vsnprintf(char *, size_t, const char *, va_list);
|
|
450 #endif
|
|
451
|
|
452 /* 1 if we have C99 designated initializers. */
|
|
453 #if !defined(HAVE_DESIGNATED_INITIALIZERS)
|
|
454 #define HAVE_DESIGNATED_INITIALIZERS \
|
|
455 ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
|
|
456 #endif
|
|
457
|
|
458 #if HAVE_SYS_STAT_H
|
|
459 # include <sys/stat.h>
|
|
460 #endif
|
|
461
|
|
462 /* Test if something is a normal file. */
|
|
463 #ifndef S_ISREG
|
|
464 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
|
465 #endif
|
|
466
|
|
467 /* Test if something is a directory. */
|
|
468 #ifndef S_ISDIR
|
|
469 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
|
470 #endif
|
|
471
|
|
472 /* Test if something is a character special file. */
|
|
473 #ifndef S_ISCHR
|
|
474 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
|
475 #endif
|
|
476
|
|
477 /* Test if something is a block special file. */
|
|
478 #ifndef S_ISBLK
|
|
479 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
|
480 #endif
|
|
481
|
|
482 /* Test if something is a socket. */
|
|
483 #ifndef S_ISSOCK
|
|
484 # ifdef S_IFSOCK
|
|
485 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
|
|
486 # else
|
|
487 # define S_ISSOCK(m) 0
|
|
488 # endif
|
|
489 #endif
|
|
490
|
|
491 /* Test if something is a FIFO. */
|
|
492 #ifndef S_ISFIFO
|
|
493 # ifdef S_IFIFO
|
|
494 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
|
495 # else
|
|
496 # define S_ISFIFO(m) 0
|
|
497 # endif
|
|
498 #endif
|
|
499
|
|
500 /* Define well known filenos if the system does not define them. */
|
|
501 #ifndef STDIN_FILENO
|
|
502 # define STDIN_FILENO 0
|
|
503 #endif
|
|
504 #ifndef STDOUT_FILENO
|
|
505 # define STDOUT_FILENO 1
|
|
506 #endif
|
|
507 #ifndef STDERR_FILENO
|
|
508 # define STDERR_FILENO 2
|
|
509 #endif
|
|
510
|
|
511 /* Some systems have mkdir that takes a single argument. */
|
|
512 #ifdef MKDIR_TAKES_ONE_ARG
|
|
513 # define mkdir(a,b) mkdir(a)
|
|
514 #endif
|
|
515
|
|
516 /* By default, colon separates directories in a path. */
|
|
517 #ifndef PATH_SEPARATOR
|
|
518 #define PATH_SEPARATOR ':'
|
|
519 #endif
|
|
520
|
|
521 /* Filename handling macros. */
|
|
522 #include "filenames.h"
|
|
523
|
|
524 /* These should be phased out in favor of IS_DIR_SEPARATOR, where possible. */
|
|
525 #ifndef DIR_SEPARATOR
|
|
526 # define DIR_SEPARATOR '/'
|
|
527 # ifdef HAVE_DOS_BASED_FILE_SYSTEM
|
|
528 # define DIR_SEPARATOR_2 '\\'
|
|
529 # endif
|
|
530 #endif
|
|
531
|
|
532 /* Get libiberty declarations. */
|
|
533 #include "libiberty.h"
|
|
534
|
|
535 /* Provide a default for the HOST_BIT_BUCKET.
|
|
536 This suffices for POSIX-like hosts. */
|
|
537
|
|
538 #ifndef HOST_BIT_BUCKET
|
|
539 #define HOST_BIT_BUCKET "/dev/null"
|
|
540 #endif
|
|
541
|
|
542 /* Be conservative and only use enum bitfields with GCC.
|
|
543 FIXME: provide a complete autoconf test for buggy enum bitfields. */
|
|
544
|
|
545 #if (GCC_VERSION > 2000)
|
|
546 #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
|
|
547 #else
|
|
548 #define ENUM_BITFIELD(TYPE) unsigned int
|
|
549 #endif
|
|
550
|
|
551 #ifndef offsetof
|
|
552 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
|
|
553 #endif
|
|
554
|
|
555 /* Various error reporting routines want to use __FUNCTION__. */
|
|
556 #if (GCC_VERSION < 2007)
|
|
557 #ifndef __FUNCTION__
|
|
558 #define __FUNCTION__ "?"
|
|
559 #endif /* ! __FUNCTION__ */
|
|
560 #endif
|
|
561
|
|
562 /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
|
|
563 the most likely value of A is B. This feature was added at some point
|
|
564 between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */
|
|
565 #if (GCC_VERSION < 3000)
|
|
566 #define __builtin_expect(a, b) (a)
|
|
567 #endif
|
|
568
|
|
569 /* Redefine abort to report an internal error w/o coredump, and
|
|
570 reporting the location of the error in the source file. */
|
|
571 extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
|
|
572 #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
|
|
573
|
|
574 /* Use gcc_assert(EXPR) to test invariants. */
|
|
575 #if ENABLE_ASSERT_CHECKING
|
|
576 #define gcc_assert(EXPR) \
|
|
577 ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
|
|
578 #else
|
|
579 /* Include EXPR, so that unused variable warnings do not occur. */
|
|
580 #define gcc_assert(EXPR) ((void)(0 && (EXPR)))
|
|
581 #endif
|
|
582
|
|
583 /* Use gcc_unreachable() to mark unreachable locations (like an
|
|
584 unreachable default case of a switch. Do not use gcc_assert(0). */
|
|
585 #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__))
|
|
586
|
|
587 /* Provide a fake boolean type. We make no attempt to use the
|
|
588 C99 _Bool, as it may not be available in the bootstrap compiler,
|
|
589 and even if it is, it is liable to be buggy.
|
|
590 This must be after all inclusion of system headers, as some of
|
|
591 them will mess us up. */
|
|
592
|
|
593 #undef TRUE
|
|
594 #undef FALSE
|
|
595
|
|
596 #ifdef __cplusplus
|
|
597 /* Obsolete. */
|
|
598 # define TRUE true
|
|
599 # define FALSE false
|
|
600 #else /* !__cplusplus */
|
|
601 # undef bool
|
|
602 # undef true
|
|
603 # undef false
|
|
604
|
|
605 # define bool unsigned char
|
|
606 # define true 1
|
|
607 # define false 0
|
|
608
|
|
609 /* Obsolete. */
|
|
610 # define TRUE true
|
|
611 # define FALSE false
|
|
612 #endif /* !__cplusplus */
|
|
613
|
|
614 /* Some compilers do not allow the use of unsigned char in bitfields. */
|
|
615 #define BOOL_BITFIELD unsigned int
|
|
616
|
|
617 /* As the last action in this file, we poison the identifiers that
|
|
618 shouldn't be used. Note, luckily gcc-3.0's token-based integrated
|
|
619 preprocessor won't trip on poisoned identifiers that arrive from
|
|
620 the expansion of macros. E.g. #define strrchr rindex, won't error
|
|
621 if rindex is poisoned after this directive is issued and later on
|
|
622 strrchr is called.
|
|
623
|
|
624 Note: We define bypass macros for the few cases where we really
|
|
625 want to use the libc memory allocation routines. Otherwise we
|
|
626 insist you use the "x" versions from libiberty. */
|
|
627
|
|
628 #define really_call_malloc malloc
|
|
629 #define really_call_calloc calloc
|
|
630 #define really_call_realloc realloc
|
|
631
|
|
632 #if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC)
|
|
633 /* Flex and bison use malloc and realloc. Yuk. Note that this means
|
|
634 really_call_* cannot be used in a .l or .y file. */
|
|
635 #define malloc xmalloc
|
|
636 #define realloc xrealloc
|
|
637 #endif
|
|
638
|
|
639 #if (GCC_VERSION >= 3000)
|
|
640
|
|
641 /* Note autoconf checks for prototype declarations and includes
|
|
642 system.h while doing so. Only poison these tokens if actually
|
|
643 compiling gcc, so that the autoconf declaration tests for malloc
|
|
644 etc don't spuriously fail. */
|
|
645 #ifdef IN_GCC
|
|
646 #undef calloc
|
|
647 #undef strdup
|
|
648 #pragma GCC poison calloc strdup
|
|
649
|
|
650 #if !defined(FLEX_SCANNER) && !defined(YYBISON)
|
|
651 #undef malloc
|
|
652 #undef realloc
|
|
653 #pragma GCC poison malloc realloc
|
|
654 #endif
|
|
655
|
|
656 /* Old target macros that have moved to the target hooks structure. */
|
|
657 #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \
|
|
658 FUNCTION_PROLOGUE FUNCTION_EPILOGUE \
|
|
659 FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \
|
|
660 DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \
|
|
661 VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \
|
|
662 SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \
|
|
663 MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \
|
|
664 MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \
|
|
665 ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \
|
|
666 WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
|
|
667 ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \
|
|
668 ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \
|
|
669 ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \
|
|
670 ASM_SIMPLIFY_DWARF_ADDR INIT_TARGET_OPTABS INIT_SUBTARGET_OPTABS \
|
|
671 INIT_GOFAST_OPTABS MULSI3_LIBCALL MULDI3_LIBCALL DIVSI3_LIBCALL \
|
|
672 DIVDI3_LIBCALL UDIVSI3_LIBCALL UDIVDI3_LIBCALL MODSI3_LIBCALL \
|
|
673 MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \
|
|
674 PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM \
|
|
675 ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS \
|
|
676 STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING \
|
|
677 PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM \
|
|
678 SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS \
|
|
679 DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS \
|
|
680 HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX \
|
|
681 MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE \
|
|
682 VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN \
|
|
683 FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL \
|
|
684 ALLOCATE_INITIAL_VALUE
|
|
685
|
|
686 /* Other obsolete target macros, or macros that used to be in target
|
|
687 headers and were not used, and may be obsolete or may never have
|
|
688 been used. */
|
|
689 #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES \
|
|
690 ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK \
|
|
691 DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \
|
|
692 OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \
|
|
693 LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \
|
|
694 STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \
|
|
695 SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \
|
|
696 TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \
|
|
697 NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \
|
|
698 BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \
|
|
699 FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \
|
|
700 MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER \
|
|
701 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN \
|
|
702 OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE \
|
|
703 ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT \
|
|
704 DBX_LBRAC_FIRST DBX_OUTPUT_ENUM DBX_OUTPUT_SOURCE_FILENAME \
|
|
705 DBX_WORKING_DIRECTORY INSN_CACHE_DEPTH INSN_CACHE_SIZE \
|
|
706 INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT \
|
|
707 EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER \
|
|
708 LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES \
|
|
709 LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE \
|
|
710 CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME \
|
|
711 FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP \
|
|
712 PROMOTED_MODE EXPAND_BUILTIN_VA_END \
|
|
713 LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE \
|
|
714 GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE \
|
|
715 MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD \
|
|
716 FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE \
|
|
717 TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE \
|
|
718 DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE \
|
|
719 SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY \
|
|
720 SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE \
|
|
721 DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG \
|
|
722 COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL WINNING_GDB \
|
|
723 ASM_OUTPUT_FILENAME ASM_OUTPUT_SOURCE_LINE FILE_NAME_JOINER \
|
|
724 GDB_INV_REF_REGPARM_STABS_LETTER DBX_MEMPARM_STABS_LETTER \
|
|
725 PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END \
|
|
726 DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE \
|
|
727 NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE \
|
|
728 CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0 \
|
|
729 TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT \
|
|
730 LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE \
|
|
731 TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC \
|
|
732 PREDICATE_CODES SPECIAL_MODE_PREDICATES HOST_PTR_PRINTF \
|
|
733 EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION \
|
|
734 TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \
|
|
735 SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \
|
|
736 ASM_OUTPUT_SHARED_LOCAL UNALIGNED_WORD_ASM_OP \
|
|
737 ASM_MAKE_LABEL_LINKONCE
|
|
738
|
|
739 /* Hooks that are no longer used. */
|
|
740 #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
|
|
741 LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \
|
|
742 LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
|
|
743 LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \
|
|
744 LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \
|
|
745 LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION
|
|
746
|
|
747 /* Miscellaneous macros that are no longer used. */
|
|
748 #pragma GCC poison USE_MAPPED_LOCATION
|
|
749
|
|
750 /* Libiberty macros that are no longer used in GCC. */
|
|
751 #undef ANSI_PROTOTYPES
|
|
752 #undef PTR_CONST
|
|
753 #undef LONG_DOUBLE
|
|
754 #undef VPARAMS
|
|
755 #undef VA_OPEN
|
|
756 #undef VA_FIXEDARG
|
|
757 #undef VA_CLOSE
|
|
758 #undef VA_START
|
|
759 #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
|
|
760 VA_FIXEDARG VA_CLOSE VA_START
|
|
761 #endif /* IN_GCC */
|
|
762
|
|
763 /* Note: not all uses of the `index' token (e.g. variable names and
|
|
764 structure members) have been eliminated. */
|
|
765 #undef bcopy
|
|
766 #undef bzero
|
|
767 #undef bcmp
|
|
768 #undef rindex
|
|
769 #pragma GCC poison bcopy bzero bcmp rindex
|
|
770
|
|
771 #endif /* GCC >= 3.0 */
|
|
772
|
|
773 /* This macro allows casting away const-ness to pass -Wcast-qual
|
|
774 warnings. DO NOT USE THIS UNLESS YOU REALLY HAVE TO! It should
|
|
775 only be used in certain specific cases. One valid case is where
|
|
776 the C standard definitions or prototypes force you to. E.g. if you
|
|
777 need to free a const object, or if you pass a const string to
|
|
778 execv, et al. Another valid use would be in an allocation function
|
|
779 that creates const objects that need to be initialized. In some
|
|
780 cases we have non-const functions that return the argument
|
|
781 (e.g. next_nonnote_insn). Rather than create const shadow
|
|
782 functions, we can cast away const-ness in calling these interfaces
|
|
783 if we're careful to verify that the called function does indeed not
|
|
784 modify its argument and the return value is only used in a const
|
|
785 context. (This can be somewhat dangerous as these assumptions can
|
|
786 change after the fact). Beyond these uses, most other cases of
|
|
787 using this macro should be viewed with extreme caution. */
|
|
788
|
|
789 #if defined(__GNUC__) && GCC_VERSION > 4000
|
|
790 /* GCC 4.0.x has a bug where it may ICE on this expression,
|
|
791 so does GCC 3.4.x (PR17436). */
|
|
792 #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
|
|
793 #else
|
|
794 #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X))
|
|
795 #endif
|
|
796 #define CONST_CAST(TYPE,X) CONST_CAST2(TYPE, const TYPE, (X))
|
|
797 #define CONST_CAST_TREE(X) CONST_CAST(union tree_node *, (X))
|
|
798 #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X))
|
|
799 #define CONST_CAST_BB(X) CONST_CAST(struct basic_block_def *, (X))
|
|
800 #define CONST_CAST_GIMPLE(X) CONST_CAST(union gimple_statement_d *, (X))
|
|
801
|
|
802 /* Activate certain diagnostics as warnings (not errors via the
|
|
803 -Werror flag). */
|
|
804 #if GCC_VERSION >= 4003
|
|
805 /* If asserts are disabled, activate -Wuninitialized as a warning (not
|
|
806 an error/-Werror). */
|
|
807 #ifndef ENABLE_ASSERT_CHECKING
|
|
808 #pragma GCC diagnostic warning "-Wuninitialized"
|
|
809 #endif
|
|
810 #endif
|
|
811
|
|
812 #ifdef ENABLE_VALGRIND_CHECKING
|
|
813 # ifdef HAVE_VALGRIND_MEMCHECK_H
|
|
814 # include <valgrind/memcheck.h>
|
|
815 # elif defined HAVE_MEMCHECK_H
|
|
816 # include <memcheck.h>
|
|
817 # else
|
|
818 # include <valgrind.h>
|
|
819 # endif
|
|
820 /* Compatibility macros to let valgrind 3.1 work. */
|
|
821 # ifndef VALGRIND_MAKE_MEM_NOACCESS
|
|
822 # define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
|
|
823 # endif
|
|
824 # ifndef VALGRIND_MAKE_MEM_DEFINED
|
|
825 # define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
|
|
826 # endif
|
|
827 # ifndef VALGRIND_MAKE_MEM_UNDEFINED
|
|
828 # define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE
|
|
829 # endif
|
|
830 #else
|
|
831 /* Avoid #ifdef:s when we can help it. */
|
|
832 #define VALGRIND_DISCARD(x)
|
|
833 #define VALGRIND_MALLOCLIKE_BLOCK(w,x,y,z)
|
|
834 #define VALGRIND_FREELIKE_BLOCK(x,y)
|
|
835 #endif
|
|
836
|
|
837 #endif /* ! GCC_SYSTEM_H */
|