]>
Commit | Line | Data |
---|---|---|
7014838c | 1 | /* Get common system includes and various definitions and declarations based |
2 | on autoconf macros. | |
9c85a98a | 3 | Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 |
a8349c62 | 4 | Free Software Foundation, Inc. |
073609a4 | 5 | |
f12b58b3 | 6 | This file is part of GCC. |
41e3445a | 7 | |
f12b58b3 | 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 | |
8c4c00c1 | 10 | Software Foundation; either version 3, or (at your option) any later |
f12b58b3 | 11 | version. |
41e3445a | 12 | |
f12b58b3 | 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. | |
41e3445a | 17 | |
18 | You should have received a copy of the GNU General Public License | |
8c4c00c1 | 19 | along with GCC; see the file COPYING3. If not see |
20 | <http://www.gnu.org/licenses/>. */ | |
073609a4 | 21 | |
7014838c | 22 | |
2a281353 | 23 | #ifndef GCC_SYSTEM_H |
24 | #define GCC_SYSTEM_H | |
073609a4 | 25 | |
909ea688 | 26 | /* We must include stdarg.h before stdio.h. */ |
32e0908a | 27 | #include <stdarg.h> |
32e0908a | 28 | |
16bf93e5 | 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 | ||
9c811526 | 37 | #ifdef HAVE_STDDEF_H |
38 | # include <stddef.h> | |
39 | #endif | |
40 | ||
073609a4 | 41 | #include <stdio.h> |
2e9695c1 | 42 | |
43 | /* Define a generic NULL if one hasn't already been defined. */ | |
44 | #ifndef NULL | |
45 | #define NULL 0 | |
46 | #endif | |
47 | ||
2224c90b | 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 | ||
1bcf5ab8 | 53 | /* The compiler is not a multi-threaded application and therefore we |
28874558 | 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). | |
f29fb72e | 57 | |
28874558 | 58 | HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio |
07c927cb | 59 | code is multi-thread safe by default. If it is set to 0, then do |
60 | not worry about using the _unlocked functions. | |
e7c55e4c | 61 | |
28874558 | 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). */ | |
f29fb72e | 65 | |
28874558 | 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 | |
077a3c99 | 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 | |
28874558 | 84 | # ifdef HAVE_FPUTC_UNLOCKED |
85 | # undef fputc | |
86 | # define fputc(C, Stream) fputc_unlocked (C, Stream) | |
87 | # endif | |
88 | ||
077a3c99 | 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 | |
28874558 | 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 | |
909ea688 | 135 | extern int fputs_unlocked (const char *, FILE *); |
28874558 | 136 | # endif |
137 | # endif | |
077a3c99 | 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 | |
28874558 | 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 | |
077a3c99 | 156 | extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); |
28874558 | 157 | # endif |
f29fb72e | 158 | # endif |
28874558 | 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 | |
909ea688 | 165 | extern int fprintf_unlocked (FILE *, const char *, ...); |
28874558 | 166 | # endif |
167 | # endif | |
168 | ||
1bcf5ab8 | 169 | #endif |
170 | ||
e7c55e4c | 171 | /* ??? Glibc's fwrite/fread_unlocked macros cause |
9ddf8721 | 172 | "warning: signed and unsigned type in conditional expression". */ |
173 | #undef fread_unlocked | |
174 | #undef fwrite_unlocked | |
175 | ||
93ce8ce4 | 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> | |
073609a4 | 180 | |
073609a4 | 181 | #include <sys/types.h> |
7014838c | 182 | |
073609a4 | 183 | #include <errno.h> |
184 | ||
3f8f3fc8 | 185 | #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO |
073609a4 | 186 | extern int errno; |
187 | #endif | |
188 | ||
f162fdc6 | 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 | ||
259a120e | 193 | #ifdef STRING_WITH_STRINGS |
073609a4 | 194 | # include <string.h> |
259a120e | 195 | # include <strings.h> |
073609a4 | 196 | #else |
259a120e | 197 | # ifdef HAVE_STRING_H |
198 | # include <string.h> | |
199 | # else | |
200 | # ifdef HAVE_STRINGS_H | |
201 | # include <strings.h> | |
202 | # endif | |
073609a4 | 203 | # endif |
204 | #endif | |
205 | ||
206 | #ifdef HAVE_STDLIB_H | |
207 | # include <stdlib.h> | |
208 | #endif | |
209 | ||
d826737c | 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 | ||
87011ef0 | 229 | #define ICE_EXIT_CODE 4 |
230 | ||
073609a4 | 231 | #ifdef HAVE_UNISTD_H |
232 | # include <unistd.h> | |
233 | #endif | |
234 | ||
235 | #ifdef HAVE_SYS_PARAM_H | |
236 | # include <sys/param.h> | |
00e0eb3d | 237 | /* We use this identifier later and it appears in some vendor param.h's. */ |
9c84a8bd | 238 | # undef PREFETCH |
073609a4 | 239 | #endif |
240 | ||
241 | #if HAVE_LIMITS_H | |
242 | # include <limits.h> | |
243 | #endif | |
244 | ||
02be28b3 | 245 | /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ |
246 | #include "hwint.h" | |
1d11d8e4 | 247 | |
af32b050 | 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) \ | |
ff30d473 | 256 | ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \ |
257 | <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER)) | |
af32b050 | 258 | |
99a9be64 | 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 | ||
073609a4 | 275 | #ifdef TIME_WITH_SYS_TIME |
276 | # include <sys/time.h> | |
277 | # include <time.h> | |
278 | #else | |
279 | # if HAVE_SYS_TIME_H | |
f11c33a2 | 280 | # include <sys/time.h> |
073609a4 | 281 | # else |
f11c33a2 | 282 | # ifdef HAVE_TIME_H |
283 | # include <time.h> | |
284 | # endif | |
285 | # endif | |
073609a4 | 286 | #endif |
287 | ||
288 | #ifdef HAVE_FCNTL_H | |
289 | # include <fcntl.h> | |
290 | #else | |
f11c33a2 | 291 | # ifdef HAVE_SYS_FILE_H |
292 | # include <sys/file.h> | |
293 | # endif | |
073609a4 | 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 | |
f11c33a2 | 307 | #ifndef O_RDONLY |
308 | # define O_RDONLY 0 | |
309 | #endif | |
310 | #ifndef O_WRONLY | |
311 | # define O_WRONLY 1 | |
312 | #endif | |
073609a4 | 313 | |
65cee259 | 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 | ||
b4898254 | 323 | /* Returns the least number N such that N * Y >= X. */ |
324 | #define CEIL(x,y) (((x) + (y) - 1) / (y)) | |
325 | ||
5a3ee0b1 | 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 | |
cb69854d | 342 | #ifndef WSTOPSIG |
343 | #define WSTOPSIG WEXITSTATUS | |
344 | #endif | |
5519412f | 345 | #ifndef WCOREDUMP |
346 | #define WCOREDUMP(S) ((S) & WCOREFLG) | |
347 | #endif | |
348 | #ifndef WCOREFLG | |
349 | #define WCOREFLG 0200 | |
350 | #endif | |
5a3ee0b1 | 351 | |
07c927cb | 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_*)". */ | |
073609a4 | 356 | |
07c927cb | 357 | #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF |
909ea688 | 358 | extern double atof (const char *); |
b3819e2e | 359 | #endif |
360 | ||
07c927cb | 361 | #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL |
909ea688 | 362 | extern long atol (const char *); |
b3819e2e | 363 | #endif |
364 | ||
07c927cb | 365 | #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE |
909ea688 | 366 | extern void free (void *); |
073609a4 | 367 | #endif |
368 | ||
07c927cb | 369 | #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD |
909ea688 | 370 | extern char *getcwd (char *, size_t); |
ccb1060c | 371 | #endif |
372 | ||
07c927cb | 373 | #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV |
909ea688 | 374 | extern char *getenv (const char *); |
fe879f7c | 375 | #endif |
376 | ||
fb1f4ef4 | 377 | #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT |
909ea688 | 378 | extern int getopt (int, char * const *, const char *); |
fb1f4ef4 | 379 | #endif |
380 | ||
c1e99292 | 381 | #if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE |
382 | extern int getpagesize (void); | |
31671de5 | 383 | #endif |
384 | ||
07c927cb | 385 | #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD |
909ea688 | 386 | extern char *getwd (char *); |
ccb1060c | 387 | #endif |
388 | ||
07c927cb | 389 | #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK |
909ea688 | 390 | extern void *sbrk (int); |
b3819e2e | 391 | #endif |
392 | ||
07c927cb | 393 | #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR |
909ea688 | 394 | extern char *strstr (const char *, const char *); |
c80fcb0a | 395 | #endif |
396 | ||
7014838c | 397 | #ifdef HAVE_MALLOC_H |
398 | #include <malloc.h> | |
399 | #endif | |
400 | ||
07c927cb | 401 | #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC |
909ea688 | 402 | extern void *malloc (size_t); |
7014838c | 403 | #endif |
404 | ||
07c927cb | 405 | #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC |
909ea688 | 406 | extern void *calloc (size_t, size_t); |
7014838c | 407 | #endif |
408 | ||
07c927cb | 409 | #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC |
909ea688 | 410 | extern void *realloc (void *, size_t); |
7014838c | 411 | #endif |
412 | ||
4a8ba235 | 413 | /* If the system doesn't provide strsignal, we get it defined in |
88b5b080 | 414 | libiberty but no declaration is supplied. */ |
b74ce7fd | 415 | #if !defined (HAVE_STRSIGNAL) \ |
416 | || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL) | |
4a8ba235 | 417 | # ifndef strsignal |
909ea688 | 418 | extern const char *strsignal (int); |
0b6ff5fb | 419 | # endif |
4a8ba235 | 420 | #endif |
0b6ff5fb | 421 | |
436f5383 | 422 | #ifdef HAVE_GETRLIMIT |
07c927cb | 423 | # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT |
436f5383 | 424 | # ifndef getrlimit |
17a44115 | 425 | struct rlimit; |
909ea688 | 426 | extern int getrlimit (int, struct rlimit *); |
436f5383 | 427 | # endif |
428 | # endif | |
429 | #endif | |
430 | ||
431 | #ifdef HAVE_SETRLIMIT | |
07c927cb | 432 | # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT |
436f5383 | 433 | # ifndef setrlimit |
17a44115 | 434 | struct rlimit; |
909ea688 | 435 | extern int setrlimit (int, const struct rlimit *); |
436f5383 | 436 | # endif |
437 | # endif | |
438 | #endif | |
439 | ||
07c927cb | 440 | #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT |
909ea688 | 441 | extern void abort (void); |
ef5ed00c | 442 | #endif |
42aaf0b7 | 443 | |
56deebec | 444 | #if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF |
445 | extern int snprintf (char *, size_t, const char *, ...); | |
446 | #endif | |
447 | ||
7e5ef2ef | 448 | #if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF |
449 | extern int vsnprintf(char *, size_t, const char *, va_list); | |
450 | #endif | |
451 | ||
b3954366 | 452 | /* 1 if we have C99 designated initializers. */ |
17ac16a1 | 453 | #if !defined(HAVE_DESIGNATED_INITIALIZERS) |
b3954366 | 454 | #define HAVE_DESIGNATED_INITIALIZERS \ |
455 | ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) | |
17ac16a1 | 456 | #endif |
b3954366 | 457 | |
8be93a1c | 458 | #if HAVE_SYS_STAT_H |
459 | # include <sys/stat.h> | |
460 | #endif | |
d128acff | 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 | ||
2530cb46 | 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 | ||
20a6e842 | 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 | ||
2530cb46 | 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 | ||
3b774709 | 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 | |
67cf1bb0 | 507 | #ifndef STDERR_FILENO |
3b774709 | 508 | # define STDERR_FILENO 2 |
509 | #endif | |
510 | ||
88b5b080 | 511 | /* Some systems have mkdir that takes a single argument. */ |
a729d1c3 | 512 | #ifdef MKDIR_TAKES_ONE_ARG |
513 | # define mkdir(a,b) mkdir(a) | |
514 | #endif | |
515 | ||
fadec241 | 516 | /* By default, colon separates directories in a path. */ |
517 | #ifndef PATH_SEPARATOR | |
518 | #define PATH_SEPARATOR ':' | |
519 | #endif | |
520 | ||
a5c088d4 | 521 | /* Filename handling macros. */ |
522 | #include "filenames.h" | |
523 | ||
524 | /* These should be phased out in favor of IS_DIR_SEPARATOR, where possible. */ | |
fadec241 | 525 | #ifndef DIR_SEPARATOR |
a5c088d4 | 526 | # define DIR_SEPARATOR '/' |
527 | # ifdef HAVE_DOS_BASED_FILE_SYSTEM | |
528 | # define DIR_SEPARATOR_2 '\\' | |
529 | # endif | |
7d3bd8c0 | 530 | #endif |
531 | ||
88b5b080 | 532 | /* Get libiberty declarations. */ |
ac7eca71 | 533 | #include "libiberty.h" |
534 | ||
655a58fa | 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 | ||
2ccf1c3a | 542 | /* Be conservative and only use enum bitfields with GCC. |
aab9bda6 | 543 | FIXME: provide a complete autoconf test for buggy enum bitfields. */ |
488c4206 | 544 | |
aab9bda6 | 545 | #if (GCC_VERSION > 2000) |
891e084d | 546 | #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE |
488c4206 | 547 | #else |
548 | #define ENUM_BITFIELD(TYPE) unsigned int | |
2ccf1c3a | 549 | #endif |
550 | ||
19c2de72 | 551 | #ifndef offsetof |
47c251e5 | 552 | #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) |
19c2de72 | 553 | #endif |
488c4206 | 554 | |
19fafbd3 | 555 | /* Various error reporting routines want to use __FUNCTION__. */ |
556 | #if (GCC_VERSION < 2007) | |
e08f94ba | 557 | #ifndef __FUNCTION__ |
19fafbd3 | 558 | #define __FUNCTION__ "?" |
e08f94ba | 559 | #endif /* ! __FUNCTION__ */ |
19fafbd3 | 560 | #endif |
561 | ||
66a5287e | 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 | ||
117115d0 | 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 | ||
997731eb | 574 | /* Use gcc_assert(EXPR) to test invariants. */ |
575 | #if ENABLE_ASSERT_CHECKING | |
576 | #define gcc_assert(EXPR) \ | |
d70f68e8 | 577 | ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0)) |
997731eb | 578 | #else |
d70f68e8 | 579 | /* Include EXPR, so that unused variable warnings do not occur. */ |
580 | #define gcc_assert(EXPR) ((void)(0 && (EXPR))) | |
997731eb | 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 | ||
151899c5 | 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, | |
9e7454d0 | 589 | and even if it is, it is liable to be buggy. |
151899c5 | 590 | This must be after all inclusion of system headers, as some of |
591 | them will mess us up. */ | |
0a8d43eb | 592 | |
9c811526 | 593 | #undef TRUE |
594 | #undef FALSE | |
595 | ||
0a8d43eb | 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 */ | |
9c811526 | 613 | |
151899c5 | 614 | /* Some compilers do not allow the use of unsigned char in bitfields. */ |
615 | #define BOOL_BITFIELD unsigned int | |
616 | ||
d0dad2ed | 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 | ||
02adebe0 | 632 | #if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC) |
805e22b2 | 633 | /* Flex and bison use malloc and realloc. Yuk. Note that this means |
6a8fa8e2 | 634 | really_call_* cannot be used in a .l or .y file. */ |
805e22b2 | 635 | #define malloc xmalloc |
636 | #define realloc xrealloc | |
637 | #endif | |
638 | ||
d0dad2ed | 639 | #if (GCC_VERSION >= 3000) |
640 | ||
110d6889 | 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 | |
c17171ae | 646 | #undef calloc |
647 | #undef strdup | |
1f3233d1 | 648 | #pragma GCC poison calloc strdup |
649 | ||
805e22b2 | 650 | #if !defined(FLEX_SCANNER) && !defined(YYBISON) |
1f3233d1 | 651 | #undef malloc |
652 | #undef realloc | |
653 | #pragma GCC poison malloc realloc | |
654 | #endif | |
cfc9bfb9 | 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 \ | |
e535c327 | 664 | MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ |
d932f956 | 665 | ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \ |
7811991d | 666 | WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \ |
eb344f43 | 667 | ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \ |
ec0457a8 | 668 | ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \ |
6e326506 | 669 | ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \ |
a141da51 | 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 \ | |
a107cd89 | 673 | MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \ |
988b8879 | 674 | PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM \ |
1ce13983 | 675 | ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS \ |
174d9cc3 | 676 | STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING \ |
677 | PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM \ | |
bfb835d3 | 678 | SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS \ |
146c1b4f | 679 | DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS \ |
0336f0f0 | 680 | HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX \ |
9e7454d0 | 681 | MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE \ |
f054eb3c | 682 | VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN \ |
edf54f2a | 683 | FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL \ |
684 | ALLOCATE_INITIAL_VALUE | |
e535c327 | 685 | |
1f3233d1 | 686 | /* Other obsolete target macros, or macros that used to be in target |
c98efb56 | 687 | headers and were not used, and may be obsolete or may never have |
688 | been used. */ | |
a6bd8a89 | 689 | #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES \ |
45959b8d | 690 | ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK \ |
eee3a990 | 691 | DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ |
dcbec77e | 692 | OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ |
c98efb56 | 693 | LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ |
ab89ec1b | 694 | STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ |
455730ef | 695 | SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ |
18ef7ac2 | 696 | TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \ |
43db11ad | 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 \ | |
f08c02db | 700 | MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER \ |
701 | ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN \ | |
41f288e0 | 702 | OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE \ |
6fa2a5a8 | 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 \ | |
98f49db3 | 706 | INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT \ |
0354094f | 707 | EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER \ |
d39e3b7c | 708 | LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES \ |
eb73de05 | 709 | LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE \ |
0d3fde44 | 710 | CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME \ |
6000e302 | 711 | FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP \ |
f254cd4c | 712 | PROMOTED_MODE EXPAND_BUILTIN_VA_END \ |
24d41d7f | 713 | LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE \ |
d8372058 | 714 | GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE \ |
4a5c037c | 715 | MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD \ |
0f5da149 | 716 | FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE \ |
a5a3c3a1 | 717 | TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE \ |
0fb2666c | 718 | DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE \ |
fb154d03 | 719 | SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY \ |
08b2d9a3 | 720 | SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE \ |
d66cc6a3 | 721 | DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG \ |
52cae7bf | 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 \ | |
d0de818d | 725 | PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END \ |
4fec1d6c | 726 | DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE \ |
ac7d3688 | 727 | NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE \ |
624d37a6 | 728 | CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0 \ |
03829d4a | 729 | TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT \ |
6c3bc3be | 730 | LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE \ |
63dfe6b8 | 731 | TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC \ |
2f14b1f9 | 732 | PREDICATE_CODES SPECIAL_MODE_PREDICATES HOST_PTR_PRINTF \ |
733 | EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION \ | |
067277c3 | 734 | TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \ |
e5ce4771 | 735 | SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \ |
c5a1dccd | 736 | ASM_OUTPUT_SHARED_LOCAL UNALIGNED_WORD_ASM_OP \ |
737 | ASM_MAKE_LABEL_LINKONCE | |
e535c327 | 738 | |
1f3233d1 | 739 | /* Hooks that are no longer used. */ |
740 | #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ | |
d458bdd7 | 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 \ | |
b94d0de9 | 745 | LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION |
1f3233d1 | 746 | |
9c85a98a | 747 | /* Miscellaneous macros that are no longer used. */ |
748 | #pragma GCC poison USE_MAPPED_LOCATION | |
749 | ||
ba0bcb99 | 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 | |
9d3fc72c | 759 | #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ |
760 | VA_FIXEDARG VA_CLOSE VA_START | |
110d6889 | 761 | #endif /* IN_GCC */ |
d0dad2ed | 762 | |
f73397be | 763 | /* Note: not all uses of the `index' token (e.g. variable names and |
764 | structure members) have been eliminated. */ | |
765 | #undef bcopy | |
c17171ae | 766 | #undef bzero |
767 | #undef bcmp | |
768 | #undef rindex | |
f73397be | 769 | #pragma GCC poison bcopy bzero bcmp rindex |
d0dad2ed | 770 | |
771 | #endif /* GCC >= 3.0 */ | |
772 | ||
c21f4fcd | 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 | |
ce4469fa | 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. */ | |
d43303cb | 788 | |
789 | #if defined(__GNUC__) && GCC_VERSION != 4000 | |
790 | /* GCC 4.0.x has a bug where it may ICE on this expression. */ | |
e47a6f81 | 791 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) |
c21f4fcd | 792 | #else |
e47a6f81 | 793 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X)) |
c21f4fcd | 794 | #endif |
e47a6f81 | 795 | #define CONST_CAST(TYPE,X) CONST_CAST2(TYPE, const TYPE, (X)) |
796 | #define CONST_CAST_TREE(X) CONST_CAST(union tree_node *, (X)) | |
797 | #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X)) | |
798 | #define CONST_CAST_BB(X) CONST_CAST(struct basic_block_def *, (X)) | |
c21f4fcd | 799 | |
becfaa62 | 800 | /* Activate -Wcast-qual as a warning (not an error/-Werror). */ |
d5e73886 | 801 | #if GCC_VERSION >= 4003 |
802 | #pragma GCC diagnostic warning "-Wcast-qual" | |
a6338531 | 803 | /* If asserts are disabled, activate -Wuninitialized as a warning (not |
804 | an error/-Werror). */ | |
805 | #ifndef ASSERT_CHECKING | |
806 | #pragma GCC diagnostic warning "-Wuninitialized" | |
807 | #endif | |
d5e73886 | 808 | #endif |
809 | ||
a7779e75 | 810 | #ifdef ENABLE_VALGRIND_CHECKING |
811 | # ifdef HAVE_VALGRIND_MEMCHECK_H | |
812 | # include <valgrind/memcheck.h> | |
813 | # elif defined HAVE_MEMCHECK_H | |
814 | # include <memcheck.h> | |
815 | # else | |
816 | # include <valgrind.h> | |
817 | # endif | |
818 | /* Compatibility macros to let valgrind 3.1 work. */ | |
819 | # ifndef VALGRIND_MAKE_MEM_NOACCESS | |
820 | # define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS | |
821 | # endif | |
822 | # ifndef VALGRIND_MAKE_MEM_DEFINED | |
823 | # define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE | |
824 | # endif | |
825 | # ifndef VALGRIND_MAKE_MEM_UNDEFINED | |
826 | # define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE | |
827 | # endif | |
828 | #else | |
829 | /* Avoid #ifdef:s when we can help it. */ | |
830 | #define VALGRIND_DISCARD(x) | |
831 | #define VALGRIND_MALLOCLIKE_BLOCK(w,x,y,z) | |
832 | #define VALGRIND_FREELIKE_BLOCK(x,y) | |
833 | #endif | |
834 | ||
2a281353 | 835 | #endif /* ! GCC_SYSTEM_H */ |