]>
Commit | Line | Data |
---|---|---|
c5c76735 JL |
1 | /* Get common system includes and various definitions and declarations based |
2 | on autoconf macros. | |
818ab71a | 3 | Copyright (C) 1998-2016 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 | |
9dcd6f09 | 9 | Software Foundation; either version 3, or (at your option) any later |
1322177d | 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 | |
9dcd6f09 NC |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
aca69483 | 20 | |
c5c76735 | 21 | |
88657302 RH |
22 | #ifndef GCC_SYSTEM_H |
23 | #define GCC_SYSTEM_H | |
aca69483 | 24 | |
7ea7f668 RB |
25 | /* Define this so that inttypes.h defines the PRI?64 macros even |
26 | when compiling with a C++ compiler. Define it here so in the | |
27 | event inttypes.h gets pulled in by another header it is already | |
28 | defined. */ | |
29 | #define __STDC_FORMAT_MACROS | |
30 | ||
2a0621b9 | 31 | /* We must include stdarg.h before stdio.h. */ |
789f983a | 32 | #include <stdarg.h> |
789f983a | 33 | |
6f81b1ad RH |
34 | #ifndef va_copy |
35 | # ifdef __va_copy | |
c3284718 | 36 | # define va_copy(d,s) __va_copy (d, s) |
6f81b1ad RH |
37 | # else |
38 | # define va_copy(d,s) ((d) = (s)) | |
39 | # endif | |
40 | #endif | |
41 | ||
d6edb99e ZW |
42 | #ifdef HAVE_STDDEF_H |
43 | # include <stddef.h> | |
44 | #endif | |
45 | ||
aca69483 | 46 | #include <stdio.h> |
51db713f KG |
47 | |
48 | /* Define a generic NULL if one hasn't already been defined. */ | |
49 | #ifndef NULL | |
50 | #define NULL 0 | |
51 | #endif | |
52 | ||
042630ad | 53 | /* Use the unlocked open routines from libiberty. */ |
75291c57 OH |
54 | |
55 | /* Some of these are #define on some systems, e.g. on AIX to redirect | |
56 | the names to 64bit capable functions for LARGE_FILES support. These | |
57 | redefs are pointless here so we can override them. */ | |
58 | ||
59 | #undef fopen | |
60 | #undef freopen | |
61 | ||
c3284718 RS |
62 | #define fopen(PATH, MODE) fopen_unlocked (PATH, MODE) |
63 | #define fdopen(FILDES, MODE) fdopen_unlocked (FILDES, MODE) | |
64 | #define freopen(PATH, MODE, STREAM) freopen_unlocked (PATH, MODE, STREAM) | |
042630ad | 65 | |
54953b66 | 66 | /* The compiler is not a multi-threaded application and therefore we |
3b681e9d ZW |
67 | do not have to use the locking functions. In fact, using the locking |
68 | functions can cause the compiler to be significantly slower under | |
69 | I/O bound conditions (such as -g -O0 on very large source files). | |
9c30c0e7 | 70 | |
3b681e9d | 71 | HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio |
f31e826b KG |
72 | code is multi-thread safe by default. If it is set to 0, then do |
73 | not worry about using the _unlocked functions. | |
0d569849 | 74 | |
3b681e9d ZW |
75 | fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are |
76 | extensions and need to be prototyped by hand (since we do not | |
77 | define _GNU_SOURCE). */ | |
9c30c0e7 | 78 | |
3b681e9d ZW |
79 | #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED |
80 | ||
81 | # ifdef HAVE_PUTC_UNLOCKED | |
82 | # undef putc | |
83 | # define putc(C, Stream) putc_unlocked (C, Stream) | |
84 | # endif | |
0d667716 KG |
85 | # ifdef HAVE_PUTCHAR_UNLOCKED |
86 | # undef putchar | |
87 | # define putchar(C) putchar_unlocked (C) | |
88 | # endif | |
89 | # ifdef HAVE_GETC_UNLOCKED | |
90 | # undef getc | |
91 | # define getc(Stream) getc_unlocked (Stream) | |
92 | # endif | |
93 | # ifdef HAVE_GETCHAR_UNLOCKED | |
94 | # undef getchar | |
95 | # define getchar() getchar_unlocked () | |
96 | # endif | |
3b681e9d ZW |
97 | # ifdef HAVE_FPUTC_UNLOCKED |
98 | # undef fputc | |
99 | # define fputc(C, Stream) fputc_unlocked (C, Stream) | |
100 | # endif | |
101 | ||
4d1c7421 RO |
102 | #ifdef __cplusplus |
103 | extern "C" { | |
104 | #endif | |
105 | ||
0d667716 KG |
106 | # ifdef HAVE_CLEARERR_UNLOCKED |
107 | # undef clearerr | |
108 | # define clearerr(Stream) clearerr_unlocked (Stream) | |
109 | # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED | |
110 | extern void clearerr_unlocked (FILE *); | |
111 | # endif | |
112 | # endif | |
113 | # ifdef HAVE_FEOF_UNLOCKED | |
114 | # undef feof | |
115 | # define feof(Stream) feof_unlocked (Stream) | |
116 | # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED | |
117 | extern int feof_unlocked (FILE *); | |
118 | # endif | |
119 | # endif | |
120 | # ifdef HAVE_FILENO_UNLOCKED | |
121 | # undef fileno | |
122 | # define fileno(Stream) fileno_unlocked (Stream) | |
123 | # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED | |
124 | extern int fileno_unlocked (FILE *); | |
125 | # endif | |
126 | # endif | |
127 | # ifdef HAVE_FFLUSH_UNLOCKED | |
128 | # undef fflush | |
129 | # define fflush(Stream) fflush_unlocked (Stream) | |
130 | # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED | |
131 | extern int fflush_unlocked (FILE *); | |
132 | # endif | |
133 | # endif | |
134 | # ifdef HAVE_FGETC_UNLOCKED | |
135 | # undef fgetc | |
136 | # define fgetc(Stream) fgetc_unlocked (Stream) | |
137 | # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED | |
138 | extern int fgetc_unlocked (FILE *); | |
139 | # endif | |
140 | # endif | |
141 | # ifdef HAVE_FGETS_UNLOCKED | |
142 | # undef fgets | |
143 | # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) | |
144 | # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED | |
145 | extern char *fgets_unlocked (char *, int, FILE *); | |
146 | # endif | |
147 | # endif | |
3b681e9d ZW |
148 | # ifdef HAVE_FPUTS_UNLOCKED |
149 | # undef fputs | |
150 | # define fputs(String, Stream) fputs_unlocked (String, Stream) | |
151 | # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED | |
2a0621b9 | 152 | extern int fputs_unlocked (const char *, FILE *); |
3b681e9d ZW |
153 | # endif |
154 | # endif | |
0d667716 KG |
155 | # ifdef HAVE_FERROR_UNLOCKED |
156 | # undef ferror | |
157 | # define ferror(Stream) ferror_unlocked (Stream) | |
158 | # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED | |
159 | extern int ferror_unlocked (FILE *); | |
160 | # endif | |
161 | # endif | |
162 | # ifdef HAVE_FREAD_UNLOCKED | |
163 | # undef fread | |
164 | # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) | |
165 | # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED | |
166 | extern size_t fread_unlocked (void *, size_t, size_t, FILE *); | |
167 | # endif | |
168 | # endif | |
3b681e9d ZW |
169 | # ifdef HAVE_FWRITE_UNLOCKED |
170 | # undef fwrite | |
171 | # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) | |
172 | # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED | |
0d667716 | 173 | extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); |
3b681e9d | 174 | # endif |
9c30c0e7 | 175 | # endif |
3b681e9d ZW |
176 | # ifdef HAVE_FPRINTF_UNLOCKED |
177 | # undef fprintf | |
178 | /* We can't use a function-like macro here because we don't know if | |
179 | we have varargs macros. */ | |
180 | # define fprintf fprintf_unlocked | |
181 | # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED | |
2a0621b9 | 182 | extern int fprintf_unlocked (FILE *, const char *, ...); |
3b681e9d ZW |
183 | # endif |
184 | # endif | |
185 | ||
4d1c7421 RO |
186 | #ifdef __cplusplus |
187 | } | |
188 | #endif | |
189 | ||
54953b66 UD |
190 | #endif |
191 | ||
0d569849 | 192 | /* ??? Glibc's fwrite/fread_unlocked macros cause |
1c99d804 RH |
193 | "warning: signed and unsigned type in conditional expression". */ |
194 | #undef fread_unlocked | |
195 | #undef fwrite_unlocked | |
196 | ||
33c430b5 FXC |
197 | /* Include <string> before "safe-ctype.h" to avoid GCC poisoning |
198 | the ctype macros through safe-ctype.h */ | |
199 | ||
200 | #ifdef __cplusplus | |
01736018 | 201 | #ifdef INCLUDE_STRING |
33c430b5 FXC |
202 | # include <string> |
203 | #endif | |
01736018 | 204 | #endif |
33c430b5 | 205 | |
f6bbde28 ZW |
206 | /* There are an extraordinary number of issues with <ctype.h>. |
207 | The last straw is that it varies with the locale. Use libiberty's | |
208 | replacement instead. */ | |
71f3e391 | 209 | #include "safe-ctype.h" |
aca69483 | 210 | |
aca69483 | 211 | #include <sys/types.h> |
c5c76735 | 212 | |
aca69483 KG |
213 | #include <errno.h> |
214 | ||
6c889b67 | 215 | #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO |
aca69483 KG |
216 | extern int errno; |
217 | #endif | |
218 | ||
b767da73 | 219 | #ifdef __cplusplus |
3dde4d65 | 220 | #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY) |
9310366b | 221 | # include <algorithm> |
01736018 | 222 | #endif |
2c384ad8 SN |
223 | #ifdef INCLUDE_LIST |
224 | # include <list> | |
225 | #endif | |
226 | #ifdef INCLUDE_MAP | |
227 | # include <map> | |
228 | #endif | |
229 | #ifdef INCLUDE_SET | |
230 | # include <set> | |
231 | #endif | |
232 | #ifdef INCLUDE_VECTOR | |
233 | # include <vector> | |
234 | #endif | |
b767da73 | 235 | # include <cstring> |
01736018 | 236 | # include <new> |
9310366b | 237 | # include <utility> |
b767da73 JH |
238 | #endif |
239 | ||
87608693 KG |
240 | /* Some of glibc's string inlines cause warnings. Plus we'd rather |
241 | rely on (and therefore test) GCC's string builtins. */ | |
242 | #define __NO_STRING_INLINES | |
243 | ||
ccc7d11a | 244 | #ifdef STRING_WITH_STRINGS |
aca69483 | 245 | # include <string.h> |
ccc7d11a | 246 | # include <strings.h> |
aca69483 | 247 | #else |
ccc7d11a KG |
248 | # ifdef HAVE_STRING_H |
249 | # include <string.h> | |
250 | # else | |
251 | # ifdef HAVE_STRINGS_H | |
252 | # include <strings.h> | |
253 | # endif | |
aca69483 KG |
254 | # endif |
255 | #endif | |
256 | ||
257 | #ifdef HAVE_STDLIB_H | |
258 | # include <stdlib.h> | |
259 | #endif | |
260 | ||
469a31a9 OE |
261 | /* When compiling C++ we need to include <cstdlib> as well as <stdlib.h> so |
262 | that it is processed before we poison "malloc"; otherwise, if a source | |
263 | file uses a standard library header that includes <cstdlib>, we will get | |
264 | an error about 'using std::malloc'. */ | |
265 | #ifdef __cplusplus | |
266 | #include <cstdlib> | |
267 | #endif | |
268 | ||
e053cf01 DE |
269 | /* Undef vec_free from AIX stdlib.h header which conflicts with vec.h. */ |
270 | #undef vec_free | |
271 | ||
eaf4e618 ZW |
272 | /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and |
273 | FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, | |
274 | or 0 and 1 if those macros are not defined. */ | |
275 | #ifndef SUCCESS_EXIT_CODE | |
276 | # ifdef EXIT_SUCCESS | |
277 | # define SUCCESS_EXIT_CODE EXIT_SUCCESS | |
278 | # else | |
279 | # define SUCCESS_EXIT_CODE 0 | |
280 | # endif | |
281 | #endif | |
282 | ||
283 | #ifndef FATAL_EXIT_CODE | |
284 | # ifdef EXIT_FAILURE | |
285 | # define FATAL_EXIT_CODE EXIT_FAILURE | |
286 | # else | |
287 | # define FATAL_EXIT_CODE 1 | |
288 | # endif | |
289 | #endif | |
290 | ||
ddaf3b86 VR |
291 | #define ICE_EXIT_CODE 4 |
292 | ||
aca69483 KG |
293 | #ifdef HAVE_UNISTD_H |
294 | # include <unistd.h> | |
295 | #endif | |
296 | ||
297 | #ifdef HAVE_SYS_PARAM_H | |
298 | # include <sys/param.h> | |
84935d25 | 299 | /* We use these identifiers later and they appear in some vendor param.h's. */ |
655781b7 | 300 | # undef PREFETCH |
84935d25 | 301 | # undef m_slot |
aca69483 KG |
302 | #endif |
303 | ||
304 | #if HAVE_LIMITS_H | |
305 | # include <limits.h> | |
306 | #endif | |
307 | ||
5297e085 KG |
308 | /* A macro to determine whether a VALUE lies inclusively within a |
309 | certain range without evaluating the VALUE more than once. This | |
310 | macro won't warn if the VALUE is unsigned and the LOWER bound is | |
311 | zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER | |
312 | bound *is* evaluated twice, and LOWER must not be greater than | |
313 | UPPER. However the bounds themselves can be either positive or | |
314 | negative. */ | |
315 | #define IN_RANGE(VALUE, LOWER, UPPER) \ | |
b5edaa2c RS |
316 | ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \ |
317 | <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER)) | |
5297e085 | 318 | |
f12bc141 ZW |
319 | /* Infrastructure for defining missing _MAX and _MIN macros. Note that |
320 | macros defined with these cannot be used in #if. */ | |
321 | ||
322 | /* The extra casts work around common compiler bugs. */ | |
323 | #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) | |
324 | /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. | |
325 | It is necessary at least when t == time_t. */ | |
326 | #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ | |
85bc8baa | 327 | ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0)) |
f12bc141 ZW |
328 | #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) |
329 | ||
330 | /* Use that infrastructure to provide a few constants. */ | |
331 | #ifndef UCHAR_MAX | |
332 | # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) | |
333 | #endif | |
334 | ||
aca69483 KG |
335 | #ifdef TIME_WITH_SYS_TIME |
336 | # include <sys/time.h> | |
337 | # include <time.h> | |
338 | #else | |
339 | # if HAVE_SYS_TIME_H | |
e572c0c6 | 340 | # include <sys/time.h> |
aca69483 | 341 | # else |
e572c0c6 KG |
342 | # ifdef HAVE_TIME_H |
343 | # include <time.h> | |
344 | # endif | |
345 | # endif | |
aca69483 KG |
346 | #endif |
347 | ||
348 | #ifdef HAVE_FCNTL_H | |
349 | # include <fcntl.h> | |
350 | #else | |
e572c0c6 KG |
351 | # ifdef HAVE_SYS_FILE_H |
352 | # include <sys/file.h> | |
353 | # endif | |
aca69483 KG |
354 | #endif |
355 | ||
356 | #ifndef SEEK_SET | |
357 | # define SEEK_SET 0 | |
358 | # define SEEK_CUR 1 | |
359 | # define SEEK_END 2 | |
360 | #endif | |
361 | #ifndef F_OK | |
362 | # define F_OK 0 | |
363 | # define X_OK 1 | |
364 | # define W_OK 2 | |
365 | # define R_OK 4 | |
366 | #endif | |
e572c0c6 KG |
367 | #ifndef O_RDONLY |
368 | # define O_RDONLY 0 | |
369 | #endif | |
370 | #ifndef O_WRONLY | |
371 | # define O_WRONLY 1 | |
372 | #endif | |
71f3e391 JM |
373 | #ifndef O_BINARY |
374 | # define O_BINARY 0 | |
375 | #endif | |
aca69483 | 376 | |
36b8337d KG |
377 | /* Some systems define these in, e.g., param.h. We undefine these names |
378 | here to avoid the warnings. We prefer to use our definitions since we | |
379 | know they are correct. */ | |
380 | ||
381 | #undef MIN | |
382 | #undef MAX | |
383 | #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) | |
384 | #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) | |
385 | ||
13799af3 MM |
386 | /* Returns the least number N such that N * Y >= X. */ |
387 | #define CEIL(x,y) (((x) + (y) - 1) / (y)) | |
388 | ||
54070b51 UB |
389 | /* This macro rounds x up to the y boundary. */ |
390 | #define ROUND_UP(x,y) (((x) + (y) - 1) & ~((y) - 1)) | |
391 | ||
392 | /* This macro rounds x down to the y boundary. */ | |
393 | #define ROUND_DOWN(x,y) ((x) & ~((y) - 1)) | |
394 | ||
e9831ca0 KG |
395 | #ifdef HAVE_SYS_WAIT_H |
396 | #include <sys/wait.h> | |
397 | #endif | |
398 | ||
399 | #ifndef WIFSIGNALED | |
400 | #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f) | |
401 | #endif | |
402 | #ifndef WTERMSIG | |
403 | #define WTERMSIG(S) ((S) & 0x7f) | |
404 | #endif | |
405 | #ifndef WIFEXITED | |
406 | #define WIFEXITED(S) (((S) & 0xff) == 0) | |
407 | #endif | |
408 | #ifndef WEXITSTATUS | |
409 | #define WEXITSTATUS(S) (((S) & 0xff00) >> 8) | |
410 | #endif | |
8fa213ac PDM |
411 | #ifndef WSTOPSIG |
412 | #define WSTOPSIG WEXITSTATUS | |
413 | #endif | |
15dda4d3 KG |
414 | #ifndef WCOREDUMP |
415 | #define WCOREDUMP(S) ((S) & WCOREFLG) | |
416 | #endif | |
417 | #ifndef WCOREFLG | |
418 | #define WCOREFLG 0200 | |
419 | #endif | |
e9831ca0 | 420 | |
71f3e391 JM |
421 | #include <signal.h> |
422 | #if !defined (SIGCHLD) && defined (SIGCLD) | |
423 | # define SIGCHLD SIGCLD | |
424 | #endif | |
425 | ||
426 | #ifdef HAVE_SYS_MMAN_H | |
427 | # include <sys/mman.h> | |
428 | #endif | |
429 | ||
430 | #ifndef MAP_FAILED | |
431 | # define MAP_FAILED ((void *)-1) | |
432 | #endif | |
433 | ||
434 | #if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) | |
435 | # define MAP_ANONYMOUS MAP_ANON | |
436 | #endif | |
437 | ||
438 | #ifdef HAVE_SYS_RESOURCE_H | |
439 | # include <sys/resource.h> | |
440 | #endif | |
441 | ||
442 | #ifdef HAVE_SYS_TIMES_H | |
443 | # include <sys/times.h> | |
444 | #endif | |
445 | ||
f31e826b KG |
446 | /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they |
447 | are defined to 0 then we must provide the relevant declaration | |
448 | here. These checks will be in the undefined state while configure | |
449 | is running so be careful to test "defined (HAVE_DECL_*)". */ | |
aca69483 | 450 | |
4d1c7421 RO |
451 | #ifdef __cplusplus |
452 | extern "C" { | |
453 | #endif | |
454 | ||
f31e826b | 455 | #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF |
2a0621b9 | 456 | extern double atof (const char *); |
8f81384f KG |
457 | #endif |
458 | ||
f31e826b | 459 | #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL |
2a0621b9 | 460 | extern long atol (const char *); |
8f81384f KG |
461 | #endif |
462 | ||
f31e826b | 463 | #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE |
2a0621b9 | 464 | extern void free (void *); |
aca69483 KG |
465 | #endif |
466 | ||
f31e826b | 467 | #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD |
2a0621b9 | 468 | extern char *getcwd (char *, size_t); |
6cd5dccd KG |
469 | #endif |
470 | ||
f31e826b | 471 | #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV |
2a0621b9 | 472 | extern char *getenv (const char *); |
79e11844 KG |
473 | #endif |
474 | ||
ebb13e7e | 475 | #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT |
2a0621b9 | 476 | extern int getopt (int, char * const *, const char *); |
ebb13e7e RK |
477 | #endif |
478 | ||
f6260033 EB |
479 | #if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE |
480 | extern int getpagesize (void); | |
6a257778 AL |
481 | #endif |
482 | ||
f31e826b | 483 | #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD |
2a0621b9 | 484 | extern char *getwd (char *); |
6cd5dccd KG |
485 | #endif |
486 | ||
f31e826b | 487 | #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK |
2a0621b9 | 488 | extern void *sbrk (int); |
8f81384f KG |
489 | #endif |
490 | ||
297c364d JDA |
491 | #if defined (HAVE_DECL_SETENV) && !HAVE_DECL_SETENV |
492 | int setenv(const char *, const char *, int); | |
493 | #endif | |
494 | ||
f31e826b | 495 | #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR |
2a0621b9 | 496 | extern char *strstr (const char *, const char *); |
d3d5cc97 JL |
497 | #endif |
498 | ||
123cd463 DA |
499 | #if defined (HAVE_DECL_STPCPY) && !HAVE_DECL_STPCPY |
500 | extern char *stpcpy (char *, const char *); | |
501 | #endif | |
502 | ||
297c364d JDA |
503 | #if defined (HAVE_DECL_UNSETENV) && !HAVE_DECL_UNSETENV |
504 | int unsetenv(const char *); | |
505 | #endif | |
506 | ||
f31e826b | 507 | #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC |
2a0621b9 | 508 | extern void *malloc (size_t); |
c5c76735 JL |
509 | #endif |
510 | ||
f31e826b | 511 | #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC |
2a0621b9 | 512 | extern void *calloc (size_t, size_t); |
c5c76735 JL |
513 | #endif |
514 | ||
f31e826b | 515 | #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC |
2a0621b9 | 516 | extern void *realloc (void *, size_t); |
c5c76735 JL |
517 | #endif |
518 | ||
4d1c7421 RO |
519 | #ifdef __cplusplus |
520 | } | |
521 | #endif | |
522 | ||
7c2a2dbf KT |
523 | #ifdef HAVE_STDINT_H |
524 | #include <stdint.h> | |
525 | #endif | |
526 | ||
527 | #ifdef HAVE_INTTYPES_H | |
528 | #include <inttypes.h> | |
529 | #endif | |
530 | ||
4d1c7421 RO |
531 | #ifdef __cplusplus |
532 | extern "C" { | |
533 | #endif | |
534 | ||
759af044 | 535 | /* If the system doesn't provide strsignal, we get it defined in |
2ba84f36 | 536 | libiberty but no declaration is supplied. */ |
0a18ddf9 AS |
537 | #if !defined (HAVE_STRSIGNAL) \ |
538 | || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL) | |
759af044 | 539 | # ifndef strsignal |
2a0621b9 | 540 | extern const char *strsignal (int); |
007e8d2a | 541 | # endif |
759af044 | 542 | #endif |
007e8d2a | 543 | |
d2cabf16 | 544 | #ifdef HAVE_GETRLIMIT |
f31e826b | 545 | # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT |
d2cabf16 | 546 | # ifndef getrlimit |
d4d4ae5f | 547 | struct rlimit; |
2a0621b9 | 548 | extern int getrlimit (int, struct rlimit *); |
d2cabf16 KG |
549 | # endif |
550 | # endif | |
551 | #endif | |
552 | ||
553 | #ifdef HAVE_SETRLIMIT | |
f31e826b | 554 | # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT |
d2cabf16 | 555 | # ifndef setrlimit |
d4d4ae5f | 556 | struct rlimit; |
2a0621b9 | 557 | extern int setrlimit (int, const struct rlimit *); |
d2cabf16 KG |
558 | # endif |
559 | # endif | |
560 | #endif | |
561 | ||
f31e826b | 562 | #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT |
2a0621b9 | 563 | extern void abort (void); |
2a611d21 | 564 | #endif |
d4ba0ead | 565 | |
236ce4b2 ZW |
566 | #if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF |
567 | extern int snprintf (char *, size_t, const char *, ...); | |
568 | #endif | |
569 | ||
367e8319 | 570 | #if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF |
c3284718 | 571 | extern int vsnprintf (char *, size_t, const char *, va_list); |
367e8319 EB |
572 | #endif |
573 | ||
4d1c7421 RO |
574 | #ifdef __cplusplus |
575 | } | |
576 | #endif | |
577 | ||
61d0346d | 578 | /* 1 if we have C99 designated initializers. */ |
18922061 | 579 | #if !defined(HAVE_DESIGNATED_INITIALIZERS) |
61d0346d | 580 | #define HAVE_DESIGNATED_INITIALIZERS \ |
bf406687 ILT |
581 | (((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) \ |
582 | && !defined(__cplusplus)) | |
18922061 | 583 | #endif |
61d0346d | 584 | |
9ca1483b JM |
585 | #if !defined(HAVE_DESIGNATED_UNION_INITIALIZERS) |
586 | #define HAVE_DESIGNATED_UNION_INITIALIZERS \ | |
587 | (((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) \ | |
588 | && (!defined(__cplusplus) || (GCC_VERSION >= 4007))) | |
589 | #endif | |
590 | ||
a05e22b8 RH |
591 | #if HAVE_SYS_STAT_H |
592 | # include <sys/stat.h> | |
593 | #endif | |
9855b854 MN |
594 | |
595 | /* Test if something is a normal file. */ | |
596 | #ifndef S_ISREG | |
597 | #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) | |
598 | #endif | |
599 | ||
600 | /* Test if something is a directory. */ | |
601 | #ifndef S_ISDIR | |
602 | #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) | |
603 | #endif | |
604 | ||
6458033d ZW |
605 | /* Test if something is a character special file. */ |
606 | #ifndef S_ISCHR | |
607 | #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) | |
608 | #endif | |
609 | ||
be3dad6f PDM |
610 | /* Test if something is a block special file. */ |
611 | #ifndef S_ISBLK | |
612 | #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) | |
613 | #endif | |
614 | ||
6458033d ZW |
615 | /* Test if something is a socket. */ |
616 | #ifndef S_ISSOCK | |
617 | # ifdef S_IFSOCK | |
618 | # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) | |
619 | # else | |
620 | # define S_ISSOCK(m) 0 | |
621 | # endif | |
622 | #endif | |
623 | ||
624 | /* Test if something is a FIFO. */ | |
625 | #ifndef S_ISFIFO | |
626 | # ifdef S_IFIFO | |
627 | # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) | |
628 | # else | |
629 | # define S_ISFIFO(m) 0 | |
630 | # endif | |
631 | #endif | |
632 | ||
f3692274 ME |
633 | /* Define well known filenos if the system does not define them. */ |
634 | #ifndef STDIN_FILENO | |
635 | # define STDIN_FILENO 0 | |
636 | #endif | |
637 | #ifndef STDOUT_FILENO | |
638 | # define STDOUT_FILENO 1 | |
639 | #endif | |
924d8a7c | 640 | #ifndef STDERR_FILENO |
f3692274 ME |
641 | # define STDERR_FILENO 2 |
642 | #endif | |
643 | ||
2ba84f36 | 644 | /* Some systems have mkdir that takes a single argument. */ |
75923b2f | 645 | #ifdef MKDIR_TAKES_ONE_ARG |
c3284718 | 646 | # define mkdir(a,b) mkdir (a) |
75923b2f MK |
647 | #endif |
648 | ||
71f3e391 | 649 | #ifndef HAVE_KILL |
c3284718 | 650 | # define kill(p,s) raise (s) |
71f3e391 JM |
651 | #endif |
652 | ||
edb89024 DR |
653 | /* Provide a way to print an address via printf. */ |
654 | #ifndef HOST_PTR_PRINTF | |
655 | #define HOST_PTR_PRINTF "%p" | |
656 | #endif /* ! HOST_PTR_PRINTF */ | |
657 | ||
d5b6516d MK |
658 | /* By default, colon separates directories in a path. */ |
659 | #ifndef PATH_SEPARATOR | |
660 | #define PATH_SEPARATOR ':' | |
661 | #endif | |
662 | ||
3dce1408 ZW |
663 | /* Filename handling macros. */ |
664 | #include "filenames.h" | |
665 | ||
666 | /* These should be phased out in favor of IS_DIR_SEPARATOR, where possible. */ | |
d5b6516d | 667 | #ifndef DIR_SEPARATOR |
3dce1408 ZW |
668 | # define DIR_SEPARATOR '/' |
669 | # ifdef HAVE_DOS_BASED_FILE_SYSTEM | |
670 | # define DIR_SEPARATOR_2 '\\' | |
671 | # endif | |
c5c0b3d9 RK |
672 | #endif |
673 | ||
0c5d770e IS |
674 | #if defined (ENABLE_PLUGIN) && defined (HAVE_DLFCN_H) |
675 | /* If plugin support is enabled, we could use libdl. */ | |
676 | #include <dlfcn.h> | |
677 | #endif | |
678 | ||
34ab62ee RB |
679 | /* Do not introduce a gmp.h dependency on the build system. */ |
680 | #ifndef GENERATOR_FILE | |
d106911b | 681 | #include <gmp.h> |
34ab62ee | 682 | #endif |
d106911b | 683 | |
2ba84f36 | 684 | /* Get libiberty declarations. */ |
2778b98d KG |
685 | #include "libiberty.h" |
686 | ||
9081064a RO |
687 | #undef FFS /* Some systems predefine this symbol; don't let it interfere. */ |
688 | #undef FLOAT /* Likewise. */ | |
689 | #undef ABS /* Likewise. */ | |
690 | #undef PC /* Likewise. */ | |
691 | ||
49009afd JL |
692 | /* Provide a default for the HOST_BIT_BUCKET. |
693 | This suffices for POSIX-like hosts. */ | |
694 | ||
695 | #ifndef HOST_BIT_BUCKET | |
696 | #define HOST_BIT_BUCKET "/dev/null" | |
697 | #endif | |
698 | ||
e0125cf3 | 699 | #ifndef offsetof |
cf403648 | 700 | #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) |
e0125cf3 | 701 | #endif |
c149cc37 | 702 | |
fbfc1192 ZW |
703 | /* Various error reporting routines want to use __FUNCTION__. */ |
704 | #if (GCC_VERSION < 2007) | |
791ef777 | 705 | #ifndef __FUNCTION__ |
fbfc1192 | 706 | #define __FUNCTION__ "?" |
791ef777 | 707 | #endif /* ! __FUNCTION__ */ |
fbfc1192 ZW |
708 | #endif |
709 | ||
2c3fcba6 ZW |
710 | /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that |
711 | the most likely value of A is B. This feature was added at some point | |
712 | between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ | |
713 | #if (GCC_VERSION < 3000) | |
714 | #define __builtin_expect(a, b) (a) | |
715 | #endif | |
716 | ||
b3d1f5b4 NS |
717 | /* Redefine abort to report an internal error w/o coredump, and |
718 | reporting the location of the error in the source file. */ | |
719 | extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; | |
720 | #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) | |
721 | ||
06c37c96 NS |
722 | /* Use gcc_assert(EXPR) to test invariants. */ |
723 | #if ENABLE_ASSERT_CHECKING | |
724 | #define gcc_assert(EXPR) \ | |
2c46a62f | 725 | ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0)) |
2df77822 DD |
726 | #elif (GCC_VERSION >= 4005) |
727 | #define gcc_assert(EXPR) \ | |
c3284718 | 728 | ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0)) |
06c37c96 | 729 | #else |
2c46a62f NS |
730 | /* Include EXPR, so that unused variable warnings do not occur. */ |
731 | #define gcc_assert(EXPR) ((void)(0 && (EXPR))) | |
06c37c96 NS |
732 | #endif |
733 | ||
7ec491c0 | 734 | #if CHECKING_P |
06795261 JH |
735 | #define gcc_checking_assert(EXPR) gcc_assert (EXPR) |
736 | #else | |
179b8d05 | 737 | /* N.B.: in release build EXPR is not evaluated. */ |
06795261 JH |
738 | #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR))) |
739 | #endif | |
740 | ||
06c37c96 NS |
741 | /* Use gcc_unreachable() to mark unreachable locations (like an |
742 | unreachable default case of a switch. Do not use gcc_assert(0). */ | |
2df77822 | 743 | #if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING |
c3284718 | 744 | #define gcc_unreachable() __builtin_unreachable () |
2df77822 | 745 | #else |
06c37c96 | 746 | #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__)) |
2df77822 | 747 | #endif |
06c37c96 | 748 | |
81fea426 MP |
749 | #if GCC_VERSION >= 7000 |
750 | # define gcc_fallthrough() __attribute__((fallthrough)) | |
751 | #else | |
752 | # define gcc_fallthrough() | |
753 | #endif | |
754 | ||
807e902e KZ |
755 | #if GCC_VERSION >= 3001 |
756 | #define STATIC_CONSTANT_P(X) (__builtin_constant_p (X) && (X)) | |
757 | #else | |
758 | #define STATIC_CONSTANT_P(X) (false && (X)) | |
759 | #endif | |
760 | ||
81a12b76 DM |
761 | /* static_assert (COND, MESSAGE) is available in C++11 onwards. */ |
762 | #if __cplusplus >= 201103L | |
763 | #define STATIC_ASSERT(X) \ | |
764 | static_assert ((X), #X) | |
765 | #else | |
807e902e KZ |
766 | #define STATIC_ASSERT(X) \ |
767 | typedef int assertion1[(X) ? 1 : -1] ATTRIBUTE_UNUSED | |
81a12b76 | 768 | #endif |
807e902e | 769 | |
2fac9c01 ZW |
770 | /* Provide a fake boolean type. We make no attempt to use the |
771 | C99 _Bool, as it may not be available in the bootstrap compiler, | |
f676971a | 772 | and even if it is, it is liable to be buggy. |
2fac9c01 ZW |
773 | This must be after all inclusion of system headers, as some of |
774 | them will mess us up. */ | |
ca79179c | 775 | |
d6edb99e ZW |
776 | #undef TRUE |
777 | #undef FALSE | |
778 | ||
ca79179c BI |
779 | #ifdef __cplusplus |
780 | /* Obsolete. */ | |
781 | # define TRUE true | |
782 | # define FALSE false | |
783 | #else /* !__cplusplus */ | |
784 | # undef bool | |
785 | # undef true | |
786 | # undef false | |
787 | ||
788 | # define bool unsigned char | |
789 | # define true 1 | |
790 | # define false 0 | |
791 | ||
792 | /* Obsolete. */ | |
793 | # define TRUE true | |
794 | # define FALSE false | |
795 | #endif /* !__cplusplus */ | |
d6edb99e | 796 | |
2fac9c01 ZW |
797 | /* Some compilers do not allow the use of unsigned char in bitfields. */ |
798 | #define BOOL_BITFIELD unsigned int | |
799 | ||
f4ce9d90 KG |
800 | /* As the last action in this file, we poison the identifiers that |
801 | shouldn't be used. Note, luckily gcc-3.0's token-based integrated | |
802 | preprocessor won't trip on poisoned identifiers that arrive from | |
803 | the expansion of macros. E.g. #define strrchr rindex, won't error | |
804 | if rindex is poisoned after this directive is issued and later on | |
805 | strrchr is called. | |
806 | ||
807 | Note: We define bypass macros for the few cases where we really | |
808 | want to use the libc memory allocation routines. Otherwise we | |
809 | insist you use the "x" versions from libiberty. */ | |
810 | ||
811 | #define really_call_malloc malloc | |
812 | #define really_call_calloc calloc | |
813 | #define really_call_realloc realloc | |
814 | ||
f92ed976 | 815 | #if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC) |
4977bab6 | 816 | /* Flex and bison use malloc and realloc. Yuk. Note that this means |
32dd366d | 817 | really_call_* cannot be used in a .l or .y file. */ |
4977bab6 ZW |
818 | #define malloc xmalloc |
819 | #define realloc xrealloc | |
820 | #endif | |
821 | ||
f4ce9d90 KG |
822 | #if (GCC_VERSION >= 3000) |
823 | ||
77b84559 KG |
824 | /* Note autoconf checks for prototype declarations and includes |
825 | system.h while doing so. Only poison these tokens if actually | |
826 | compiling gcc, so that the autoconf declaration tests for malloc | |
827 | etc don't spuriously fail. */ | |
828 | #ifdef IN_GCC | |
4d776011 DE |
829 | |
830 | #ifndef USES_ISL | |
8a0e5115 KG |
831 | #undef calloc |
832 | #undef strdup | |
e2500fed | 833 | #pragma GCC poison calloc strdup |
4d776011 | 834 | #endif |
e2500fed | 835 | |
4977bab6 | 836 | #if !defined(FLEX_SCANNER) && !defined(YYBISON) |
e2500fed GK |
837 | #undef malloc |
838 | #undef realloc | |
839 | #pragma GCC poison malloc realloc | |
840 | #endif | |
41441dc7 | 841 | |
e7ff5730 JM |
842 | /* The %m format should be used when GCC's main diagnostic functions |
843 | supporting %m are available, and xstrerror from libiberty | |
844 | otherwise. */ | |
845 | #undef strerror | |
846 | #pragma GCC poison strerror | |
847 | ||
e091ffb7 DE |
848 | /* loc_t is defined on some systems and too inviting for some |
849 | programmers to avoid. */ | |
850 | #undef loc_t | |
851 | #pragma GCC poison loc_t | |
852 | ||
41441dc7 NB |
853 | /* Old target macros that have moved to the target hooks structure. */ |
854 | #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ | |
855 | FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ | |
856 | FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ | |
857 | DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ | |
858 | VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ | |
859 | SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ | |
860 | MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ | |
aa6ad1a6 | 861 | MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ |
44a147ad | 862 | ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \ |
fb49053f | 863 | WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \ |
3961e8fe | 864 | ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \ |
dcefdf67 | 865 | ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \ |
75c20980 | 866 | ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \ |
30ee56e1 ZW |
867 | ASM_SIMPLIFY_DWARF_ADDR INIT_TARGET_OPTABS INIT_SUBTARGET_OPTABS \ |
868 | INIT_GOFAST_OPTABS MULSI3_LIBCALL MULDI3_LIBCALL DIVSI3_LIBCALL \ | |
869 | DIVDI3_LIBCALL UDIVSI3_LIBCALL UDIVDI3_LIBCALL MODSI3_LIBCALL \ | |
4ac8340c | 870 | MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \ |
510d1e80 | 871 | PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM \ |
cde0f3fd | 872 | ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS PROMOTE_FUNCTION_MODE \ |
fefcb65c KH |
873 | STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING \ |
874 | PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM \ | |
221ee7c9 | 875 | SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS \ |
84b8b0e0 | 876 | DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS \ |
fe984136 | 877 | HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX \ |
f676971a | 878 | MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE \ |
78a52f11 | 879 | VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN \ |
b48f503c | 880 | FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL \ |
7b5cbb57 | 881 | ALLOCATE_INITIAL_VALUE LEGITIMIZE_ADDRESS FRAME_POINTER_REQUIRED \ |
82497700 | 882 | CAN_ELIMINATE TRAMPOLINE_TEMPLATE INITIALIZE_TRAMPOLINE \ |
079e7538 | 883 | TRAMPOLINE_ADJUST_ADDRESS STATIC_CHAIN STATIC_CHAIN_INCOMING \ |
fac0f722 | 884 | RETURN_POPS_ARGS UNITS_PER_SIMD_WORD OVERRIDE_OPTIONS \ |
32bd8fcf | 885 | OPTIMIZATION_OPTIONS CLASS_LIKELY_SPILLED_P \ |
ad0c4c36 DD |
886 | USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO \ |
887 | LABEL_ALIGN_MAX_SKIP LOOP_ALIGN_MAX_SKIP \ | |
f16d3f39 JH |
888 | LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP JUMP_ALIGN_MAX_SKIP \ |
889 | CAN_DEBUG_WITHOUT_FP UNLIKELY_EXECUTED_TEXT_SECTION_NAME \ | |
3bb4db67 | 890 | HOT_TEXT_SECTION_NAME LEGITIMATE_CONSTANT_P ALWAYS_STRIP_DOTDOT \ |
e1ab7892 | 891 | OUTPUT_ADDR_CONST_EXTRA SMALL_REGISTER_CLASSES ASM_OUTPUT_IDENT \ |
8cc4b7a2 | 892 | ASM_BYTE_OP MEMBER_TYPE_FORCES_BLK LIBGCC2_HAS_SF_MODE \ |
a5474c4c JG |
893 | LIBGCC2_HAS_DF_MODE LIBGCC2_HAS_XF_MODE LIBGCC2_HAS_TF_MODE \ |
894 | CLEAR_BY_PIECES_P MOVE_BY_PIECES_P SET_BY_PIECES_P \ | |
895 | STORE_BY_PIECES_P | |
aa6ad1a6 | 896 | |
80cf2e08 | 897 | /* Target macros only used for code built for the target, that have |
cdbf4541 | 898 | moved to libgcc-tm.h or have never been present elsewhere. */ |
58cd1d70 | 899 | #pragma GCC poison DECLARE_LIBRARY_RENAMES LIBGCC2_GNU_PREFIX \ |
cca2207a L |
900 | MD_UNWIND_SUPPORT MD_FROB_UPDATE_CONTEXT ENABLE_EXECUTE_STACK \ |
901 | REG_VALUE_IN_UNWIND_CONTEXT ASSUME_EXTENDED_UNWIND_CONTEXT | |
80cf2e08 | 902 | |
e2500fed | 903 | /* Other obsolete target macros, or macros that used to be in target |
006946e4 JM |
904 | headers and were not used, and may be obsolete or may never have |
905 | been used. */ | |
c08f71aa | 906 | #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES \ |
6a6c0154 | 907 | ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK \ |
ed722f66 | 908 | DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ |
16c484c7 | 909 | OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ |
006946e4 | 910 | LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ |
c99d986a | 911 | STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ |
f458d1d5 | 912 | SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ |
a11eba95 | 913 | TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \ |
fc881338 RH |
914 | NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \ |
915 | BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \ | |
916 | FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \ | |
68d5a1cd KC |
917 | MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER \ |
918 | ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN \ | |
80eaf415 | 919 | OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE \ |
f691dc3b AJ |
920 | ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT \ |
921 | DBX_LBRAC_FIRST DBX_OUTPUT_ENUM DBX_OUTPUT_SOURCE_FILENAME \ | |
922 | DBX_WORKING_DIRECTORY INSN_CACHE_DEPTH INSN_CACHE_SIZE \ | |
5145a02e | 923 | INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT \ |
edf11bda | 924 | EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER \ |
ba029213 | 925 | LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES \ |
c6a515f4 | 926 | LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE \ |
b816f339 | 927 | CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME \ |
616f6d84 | 928 | FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP \ |
16201823 | 929 | PROMOTED_MODE EXPAND_BUILTIN_VA_END \ |
9b2b3375 | 930 | LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE \ |
1197924d | 931 | GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE \ |
9e9126f3 | 932 | MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD \ |
c1a41c2f | 933 | FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE \ |
fdf89bf5 | 934 | TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE \ |
67dfe110 | 935 | DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE \ |
082a099c | 936 | SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY \ |
bb2d400f | 937 | SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE \ |
b89dc911 | 938 | DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG \ |
ac746f1d ZW |
939 | COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL WINNING_GDB \ |
940 | ASM_OUTPUT_FILENAME ASM_OUTPUT_SOURCE_LINE FILE_NAME_JOINER \ | |
941 | GDB_INV_REF_REGPARM_STABS_LETTER DBX_MEMPARM_STABS_LETTER \ | |
93a27b7b | 942 | PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END \ |
6e14af16 | 943 | DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE \ |
6be85b25 | 944 | NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE \ |
c5ff069d | 945 | CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0 \ |
57642751 | 946 | TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT \ |
bacf5b96 | 947 | LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE \ |
c2acaf06 | 948 | TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC \ |
82b68940 | 949 | PREDICATE_CODES SPECIAL_MODE_PREDICATES UNALIGNED_WORD_ASM_OP \ |
d6b5193b | 950 | EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION \ |
00dcee0c | 951 | TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \ |
f5e605e5 | 952 | SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \ |
82b68940 | 953 | ASM_OUTPUT_SHARED_LOCAL ASM_MAKE_LABEL_LINKONCE \ |
5a733826 | 954 | STACK_CHECK_PROBE_INTERVAL STACK_CHECK_PROBE_LOAD \ |
e4f7c483 | 955 | ORDER_REGS_FOR_LOCAL_ALLOC FUNCTION_OUTGOING_VALUE \ |
c3fb2eb4 | 956 | ASM_DECLARE_CONSTANT_NAME MODIFY_TARGET_NAME SWITCHES_NEED_SPACES \ |
2be55a25 | 957 | SWITCH_CURTAILS_COMPILATION SWITCH_TAKES_ARG WORD_SWITCH_TAKES_ARG \ |
24a57808 | 958 | TARGET_OPTION_TRANSLATE_TABLE HANDLE_PRAGMA_PACK_PUSH_POP \ |
b27c742b | 959 | HANDLE_SYSV_PRAGMA HANDLE_PRAGMA_WEAK CONDITIONAL_REGISTER_USAGE \ |
57809813 | 960 | FUNCTION_ARG_BOUNDARY MUST_USE_SJLJ_EXCEPTIONS US_SOFTWARE_GOFAST \ |
b25b9e8f | 961 | USING_SVR4_H SVR4_ASM_SPEC FUNCTION_ARG FUNCTION_ARG_ADVANCE \ |
eb1eb914 | 962 | FUNCTION_INCOMING_ARG IRA_COVER_CLASSES TARGET_VERSION \ |
3d223145 | 963 | MACHINE_TYPE TARGET_HAS_TARGETCM ASM_OUTPUT_BSS \ |
f47a61f3 | 964 | SETJMP_VIA_SAVE_AREA FORBIDDEN_INC_DEC_CLASSES \ |
08b2bad2 | 965 | PREFERRED_OUTPUT_RELOAD_CLASS SYSTEM_INCLUDE_DIR \ |
7c17f335 | 966 | STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT \ |
975667e7 | 967 | LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO \ |
0c93ed52 SB |
968 | IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES DBX_OUTPUT_LBRAC \ |
969 | DBX_OUTPUT_NFUN DBX_OUTPUT_RBRAC RANGE_TEST_NON_SHORT_CIRCUIT \ | |
970 | REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P \ | |
01a07a64 SB |
971 | TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS \ |
972 | IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP \ | |
4e2edffd | 973 | UNALIGNED_LONG_ASM_OP UNALIGNED_DOUBLE_INT_ASM_OP \ |
cc193fba | 974 | USE_COMMON_FOR_ONE_ONLY IFCVT_EXTRA_FIELDS IFCVT_INIT_EXTRA_FIELDS \ |
b0f6b612 | 975 | CASE_USE_BIT_TESTS FIXUNS_TRUNC_LIKE_FIX_TRUNC \ |
97049e83 | 976 | GO_IF_MODE_DEPENDENT_ADDRESS DELAY_SLOTS_FOR_EPILOGUE \ |
b48e9677 RS |
977 | ELIGIBLE_FOR_EPILOGUE_DELAY TARGET_C99_FUNCTIONS TARGET_HAS_SINCOS \ |
978 | REG_CLASS_FROM_LETTER CONST_OK_FOR_LETTER_P \ | |
777e635f RS |
979 | CONST_DOUBLE_OK_FOR_LETTER_P EXTRA_CONSTRAINT \ |
980 | REG_CLASS_FROM_CONSTRAINT REG_CLASS_FOR_CONSTRAINT \ | |
981 | EXTRA_CONSTRAINT_STR EXTRA_MEMORY_CONSTRAINT \ | |
ef24330d | 982 | EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P \ |
9686a2e6 | 983 | CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL \ |
9a79452d | 984 | ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT \ |
04218b35 | 985 | LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE EH_FRAME_IN_DATA_SECTION |
aa6ad1a6 | 986 | |
e2500fed GK |
987 | /* Hooks that are no longer used. */ |
988 | #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ | |
9dcf6e73 JM |
989 | LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \ |
990 | LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \ | |
991 | LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \ | |
992 | LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \ | |
cde0f3fd | 993 | LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION \ |
61ff2bdc | 994 | TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN \ |
3020190e | 995 | LANG_HOOKS_MISSING_ARGUMENT LANG_HOOKS_HASH_TYPES \ |
1756cb66 | 996 | TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION \ |
5c30094f | 997 | TARGET_IRA_COVER_CLASSES TARGET_HELP \ |
30a7bac9 RH |
998 | TARGET_HANDLE_PRAGMA_EXTERN_PREFIX \ |
999 | TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \ | |
1000 | TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \ | |
8fad45f5 MW |
1001 | TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \ |
1002 | EXTENDED_SDB_BASIC_TYPES TARGET_INVALID_PARAMETER_TYPE \ | |
1003 | TARGET_INVALID_RETURN_TYPE | |
e2500fed | 1004 | |
e79983f4 MM |
1005 | /* Arrays that were deleted in favor of a functional interface. */ |
1006 | #pragma GCC poison built_in_decls implicit_built_in_decls | |
1007 | ||
a18bdccd | 1008 | /* Hooks into libgcc2. */ |
a3abe41c NF |
1009 | #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN \ |
1010 | LIBGCC2_FLOAT_WORDS_BIG_ENDIAN | |
a18bdccd | 1011 | |
2d593c86 | 1012 | /* Miscellaneous macros that are no longer used. */ |
71f3e391 | 1013 | #pragma GCC poison USE_MAPPED_LOCATION GET_ENVIRONMENT |
2d593c86 | 1014 | |
b0c231bb KG |
1015 | /* Libiberty macros that are no longer used in GCC. */ |
1016 | #undef ANSI_PROTOTYPES | |
1017 | #undef PTR_CONST | |
1018 | #undef LONG_DOUBLE | |
1019 | #undef VPARAMS | |
1020 | #undef VA_OPEN | |
1021 | #undef VA_FIXEDARG | |
1022 | #undef VA_CLOSE | |
1023 | #undef VA_START | |
627aa08a KG |
1024 | #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ |
1025 | VA_FIXEDARG VA_CLOSE VA_START | |
77b84559 | 1026 | #endif /* IN_GCC */ |
f4ce9d90 | 1027 | |
7a3b4887 SB |
1028 | /* Front ends should never have to include middle-end headers. Enforce |
1029 | this by poisoning the header double-include protection defines. */ | |
1030 | #ifdef IN_GCC_FRONTEND | |
4d451982 | 1031 | #pragma GCC poison GCC_RTL_H GCC_EXCEPT_H GCC_EXPR_H |
7a3b4887 SB |
1032 | #endif |
1033 | ||
8e944909 KG |
1034 | /* Note: not all uses of the `index' token (e.g. variable names and |
1035 | structure members) have been eliminated. */ | |
1036 | #undef bcopy | |
8a0e5115 KG |
1037 | #undef bzero |
1038 | #undef bcmp | |
1039 | #undef rindex | |
8e944909 | 1040 | #pragma GCC poison bcopy bzero bcmp rindex |
f4ce9d90 | 1041 | |
56c091ab ML |
1042 | /* Poison ENABLE_CHECKING macro that should be replaced with |
1043 | 'if (flag_checking)', or with CHECKING_P macro. */ | |
1044 | #pragma GCC poison ENABLE_CHECKING | |
1045 | ||
f4ce9d90 KG |
1046 | #endif /* GCC >= 3.0 */ |
1047 | ||
68a57691 KG |
1048 | /* This macro allows casting away const-ness to pass -Wcast-qual |
1049 | warnings. DO NOT USE THIS UNLESS YOU REALLY HAVE TO! It should | |
1050 | only be used in certain specific cases. One valid case is where | |
1051 | the C standard definitions or prototypes force you to. E.g. if you | |
1052 | need to free a const object, or if you pass a const string to | |
1053 | execv, et al. Another valid use would be in an allocation function | |
75547801 KG |
1054 | that creates const objects that need to be initialized. In some |
1055 | cases we have non-const functions that return the argument | |
1056 | (e.g. next_nonnote_insn). Rather than create const shadow | |
1057 | functions, we can cast away const-ness in calling these interfaces | |
1058 | if we're careful to verify that the called function does indeed not | |
1059 | modify its argument and the return value is only used in a const | |
1060 | context. (This can be somewhat dangerous as these assumptions can | |
1061 | change after the fact). Beyond these uses, most other cases of | |
1062 | using this macro should be viewed with extreme caution. */ | |
0b51511b | 1063 | |
cea32bca TT |
1064 | #ifdef __cplusplus |
1065 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X)) | |
1066 | #else | |
726a989a RB |
1067 | #if defined(__GNUC__) && GCC_VERSION > 4000 |
1068 | /* GCC 4.0.x has a bug where it may ICE on this expression, | |
1069 | so does GCC 3.4.x (PR17436). */ | |
b1d5455a | 1070 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) |
10d291f6 KT |
1071 | #elif defined(__GNUC__) |
1072 | static inline char * | |
1073 | helper_const_non_const_cast (const char *p) | |
1074 | { | |
1075 | union { | |
1076 | const char *const_c; | |
1077 | char *c; | |
1078 | } val; | |
1079 | val.const_c = p; | |
1080 | return val.c; | |
1081 | } | |
1082 | ||
1083 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) \ | |
1084 | ((TOTYPE) helper_const_non_const_cast ((const char *) (FROMTYPE) (X))) | |
68a57691 | 1085 | #else |
b1d5455a | 1086 | #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X)) |
68a57691 | 1087 | #endif |
cea32bca | 1088 | #endif |
c3284718 RS |
1089 | #define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X)) |
1090 | #define CONST_CAST_TREE(X) CONST_CAST (union tree_node *, (X)) | |
1091 | #define CONST_CAST_RTX(X) CONST_CAST (struct rtx_def *, (X)) | |
c838c402 | 1092 | #define CONST_CAST_RTX_INSN(X) CONST_CAST (struct rtx_insn *, (X)) |
c3284718 | 1093 | #define CONST_CAST_BB(X) CONST_CAST (struct basic_block_def *, (X)) |
355fe088 | 1094 | #define CONST_CAST_GIMPLE(X) CONST_CAST (gimple *, (X)) |
68a57691 | 1095 | |
572e5ae3 KG |
1096 | /* Activate certain diagnostics as warnings (not errors via the |
1097 | -Werror flag). */ | |
fe9a2598 | 1098 | #if GCC_VERSION >= 4003 |
76ce039e AP |
1099 | /* If asserts are disabled, activate -Wuninitialized as a warning (not |
1100 | an error/-Werror). */ | |
ad7aacba | 1101 | #ifndef ENABLE_ASSERT_CHECKING |
76ce039e AP |
1102 | #pragma GCC diagnostic warning "-Wuninitialized" |
1103 | #endif | |
fe9a2598 KG |
1104 | #endif |
1105 | ||
279a935f | 1106 | #ifdef ENABLE_VALGRIND_ANNOTATIONS |
35dee980 HPN |
1107 | # ifdef HAVE_VALGRIND_MEMCHECK_H |
1108 | # include <valgrind/memcheck.h> | |
1109 | # elif defined HAVE_MEMCHECK_H | |
1110 | # include <memcheck.h> | |
1111 | # else | |
1112 | # include <valgrind.h> | |
1113 | # endif | |
1114 | /* Compatibility macros to let valgrind 3.1 work. */ | |
1115 | # ifndef VALGRIND_MAKE_MEM_NOACCESS | |
1116 | # define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS | |
1117 | # endif | |
1118 | # ifndef VALGRIND_MAKE_MEM_DEFINED | |
1119 | # define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE | |
1120 | # endif | |
1121 | # ifndef VALGRIND_MAKE_MEM_UNDEFINED | |
1122 | # define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE | |
1123 | # endif | |
1124 | #else | |
1125 | /* Avoid #ifdef:s when we can help it. */ | |
1126 | #define VALGRIND_DISCARD(x) | |
1127 | #define VALGRIND_MALLOCLIKE_BLOCK(w,x,y,z) | |
1128 | #define VALGRIND_FREELIKE_BLOCK(x,y) | |
1129 | #endif | |
1130 | ||
24e47c76 JH |
1131 | /* In LTO -fwhole-program build we still want to keep the debug functions available |
1132 | for debugger. Mark them as used to prevent removal. */ | |
1133 | #if (GCC_VERSION > 4000) | |
1134 | #define DEBUG_FUNCTION __attribute__ ((__used__)) | |
1135 | #define DEBUG_VARIABLE __attribute__ ((__used__)) | |
1136 | #else | |
1137 | #define DEBUG_FUNCTION | |
1138 | #define DEBUG_VARIABLE | |
1139 | #endif | |
1140 | ||
4cc8d9d2 RS |
1141 | /* General macro to extract bit Y of X. */ |
1142 | #define TEST_BIT(X, Y) (((X) >> (Y)) & 1) | |
1143 | ||
a9243bfc | 1144 | /* Get definitions of HOST_WIDE_INT. */ |
67b5215c RS |
1145 | #include "hwint.h" |
1146 | ||
88657302 | 1147 | #endif /* ! GCC_SYSTEM_H */ |