00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef GCC_SYSTEM_H
00030 #define GCC_SYSTEM_H
00031
00032
00033 #ifdef ANSI_PROTOTYPES
00034 #include <stdarg.h>
00035 #else
00036 #include <varargs.h>
00037 #endif
00038
00039 #ifndef va_copy
00040 # ifdef __va_copy
00041 # define va_copy(d,s) __va_copy((d),(s))
00042 # else
00043 # define va_copy(d,s) ((d) = (s))
00044 # endif
00045 #endif
00046
00047 #ifdef HAVE_STDDEF_H
00048 # include <stddef.h>
00049 #endif
00050
00051 #include <stdio.h>
00052
00053
00054 #ifndef NULL
00055 #define NULL 0
00056 #endif
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
00072
00073 # ifdef HAVE_PUTC_UNLOCKED
00074 # undef putc
00075 # define putc(C, Stream) putc_unlocked (C, Stream)
00076 # endif
00077 # ifdef HAVE_FPUTC_UNLOCKED
00078 # undef fputc
00079 # define fputc(C, Stream) fputc_unlocked (C, Stream)
00080 # endif
00081
00082 # ifdef HAVE_FPUTS_UNLOCKED
00083 # undef fputs
00084 # define fputs(String, Stream) fputs_unlocked (String, Stream)
00085 # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
00086 extern int fputs_unlocked PARAMS ((const char *, FILE *));
00087 # endif
00088 # endif
00089 # ifdef HAVE_FWRITE_UNLOCKED
00090 # undef fwrite
00091 # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
00092 # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
00093 extern int fwrite_unlocked PARAMS ((const PTR, size_t, size_t, FILE *));
00094 # endif
00095 # endif
00096 # ifdef HAVE_FPRINTF_UNLOCKED
00097 # undef fprintf
00098
00099
00100 # define fprintf fprintf_unlocked
00101 # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
00102 extern int fprintf_unlocked PARAMS ((FILE *, const char *, ...));
00103 # endif
00104 # endif
00105
00106 #endif
00107
00108
00109
00110
00111 #include <safe-ctype.h>
00112
00113 #include <sys/types.h>
00114
00115 #include <errno.h>
00116
00117 #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
00118 extern int errno;
00119 #endif
00120
00121 #ifdef STRING_WITH_STRINGS
00122 # include <string.h>
00123 # include <strings.h>
00124 #else
00125 # ifdef HAVE_STRING_H
00126 # include <string.h>
00127 # else
00128 # ifdef HAVE_STRINGS_H
00129 # include <strings.h>
00130 # endif
00131 # endif
00132 #endif
00133
00134 #ifdef HAVE_STDLIB_H
00135 # include <stdlib.h>
00136 #endif
00137
00138
00139
00140
00141 #ifndef SUCCESS_EXIT_CODE
00142 # ifdef EXIT_SUCCESS
00143 # define SUCCESS_EXIT_CODE EXIT_SUCCESS
00144 # else
00145 # define SUCCESS_EXIT_CODE 0
00146 # endif
00147 #endif
00148
00149 #ifndef FATAL_EXIT_CODE
00150 # ifdef EXIT_FAILURE
00151 # define FATAL_EXIT_CODE EXIT_FAILURE
00152 # else
00153 # define FATAL_EXIT_CODE 1
00154 # endif
00155 #endif
00156
00157 #ifdef HAVE_UNISTD_H
00158 # include <unistd.h>
00159 #endif
00160
00161 #ifdef __MINGW32__
00162 extern size_t getpagesize(void);
00163 #endif
00164
00165 #ifdef HAVE_SYS_PARAM_H
00166 # include <sys/param.h>
00167
00168 # undef PREFETCH
00169 #endif
00170
00171 #if HAVE_LIMITS_H
00172 # include <limits.h>
00173 #endif
00174
00175
00176 #include "hwint.h"
00177
00178
00179
00180
00181
00182
00183
00184
00185 #define IN_RANGE(VALUE, LOWER, UPPER) \
00186 ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER)))
00187
00188
00189
00190
00191
00192 #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
00193
00194
00195 #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
00196 ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))
00197 #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
00198
00199
00200 #ifndef UCHAR_MAX
00201 # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
00202 #endif
00203
00204 #ifdef TIME_WITH_SYS_TIME
00205 # include <sys/time.h>
00206 # include <time.h>
00207 #else
00208 # if HAVE_SYS_TIME_H
00209 # include <sys/time.h>
00210 # else
00211 # ifdef HAVE_TIME_H
00212 # include <time.h>
00213 # endif
00214 # endif
00215 #endif
00216
00217 #ifdef HAVE_FCNTL_H
00218 # include <fcntl.h>
00219 #else
00220 # ifdef HAVE_SYS_FILE_H
00221 # include <sys/file.h>
00222 # endif
00223 #endif
00224
00225 #ifndef SEEK_SET
00226 # define SEEK_SET 0
00227 # define SEEK_CUR 1
00228 # define SEEK_END 2
00229 #endif
00230 #ifndef F_OK
00231 # define F_OK 0
00232 # define X_OK 1
00233 # define W_OK 2
00234 # define R_OK 4
00235 #endif
00236 #ifndef O_RDONLY
00237 # define O_RDONLY 0
00238 #endif
00239 #ifndef O_WRONLY
00240 # define O_WRONLY 1
00241 #endif
00242
00243
00244
00245
00246
00247 #undef MIN
00248 #undef MAX
00249 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
00250 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
00251
00252
00253 #define CEIL(x,y) (((x) + (y) - 1) / (y))
00254
00255 #ifdef HAVE_SYS_WAIT_H
00256 #include <sys/wait.h>
00257 #endif
00258
00259 #ifndef WIFSIGNALED
00260 #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
00261 #endif
00262 #ifndef WTERMSIG
00263 #define WTERMSIG(S) ((S) & 0x7f)
00264 #endif
00265 #ifndef WIFEXITED
00266 #define WIFEXITED(S) (((S) & 0xff) == 0)
00267 #endif
00268 #ifndef WEXITSTATUS
00269 #define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
00270 #endif
00271 #ifndef WSTOPSIG
00272 #define WSTOPSIG WEXITSTATUS
00273 #endif
00274 #ifndef WCOREDUMP
00275 #define WCOREDUMP(S) ((S) & WCOREFLG)
00276 #endif
00277 #ifndef WCOREFLG
00278 #define WCOREFLG 0200
00279 #endif
00280
00281
00282
00283
00284
00285
00286 #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF
00287 extern double atof PARAMS ((const char *));
00288 #endif
00289
00290 #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL
00291 extern long atol PARAMS ((const char *));
00292 #endif
00293
00294 #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE
00295 extern void free PARAMS ((PTR));
00296 #endif
00297
00298 #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD
00299 extern char *getcwd PARAMS ((char *, size_t));
00300 #endif
00301
00302 #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV
00303 extern char *getenv PARAMS ((const char *));
00304 #endif
00305
00306 #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT
00307 extern int getopt PARAMS ((int, char * const *, const char *));
00308 #endif
00309
00310 #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD
00311 extern char *getwd PARAMS ((char *));
00312 #endif
00313
00314 #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK
00315 extern PTR sbrk PARAMS ((int));
00316 #endif
00317
00318 #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR
00319 extern char *strstr PARAMS ((const char *, const char *));
00320 #endif
00321
00322 #ifdef HAVE_MALLOC_H
00323 #if ! defined(BUILD_OS_DARWIN)
00324 #include <malloc.h>
00325 #endif
00326 #endif
00327
00328 #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC
00329 extern PTR malloc PARAMS ((size_t));
00330 #endif
00331
00332 #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC
00333 extern PTR calloc PARAMS ((size_t, size_t));
00334 #endif
00335
00336 #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC
00337 extern PTR realloc PARAMS ((PTR, size_t));
00338 #endif
00339
00340
00341
00342 #ifndef SGI_MONGOOSE
00343 #ifndef HAVE_STRSIGNAL
00344 # ifndef strsignal
00345 extern const char *strsignal PARAMS ((int));
00346 # endif
00347 #endif
00348 #endif
00349
00350 #ifdef HAVE_GETRLIMIT
00351 # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT
00352 # ifndef getrlimit
00353 # ifdef ANSI_PROTOTYPES
00354 struct rlimit;
00355 # endif
00356 extern int getrlimit PARAMS ((int, struct rlimit *));
00357 # endif
00358 # endif
00359 #endif
00360
00361 #ifdef HAVE_SETRLIMIT
00362 # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT
00363 # ifndef setrlimit
00364 # ifdef ANSI_PROTOTYPES
00365 struct rlimit;
00366 # endif
00367 extern int setrlimit PARAMS ((int, const struct rlimit *));
00368 # endif
00369 # endif
00370 #endif
00371
00372
00373
00374 #if !defined(HAVE_VOLATILE) && !defined(__STDC__) && !defined(volatile)
00375 #define volatile
00376 #endif
00377
00378 #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
00379 extern void abort PARAMS ((void));
00380 #endif
00381
00382
00383 #if !defined(HAVE_DESIGNATED_INITIALIZERS)
00384 #define HAVE_DESIGNATED_INITIALIZERS \
00385 ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
00386 #endif
00387
00388
00389 #ifndef HAVE__BOOL
00390 # define HAVE__BOOL \
00391 ((GCC_VERSION >= 3000) || (__STDC_VERSION__ >= 199901L))
00392 #endif
00393
00394
00395 #if HAVE_SYS_STAT_H
00396 # include <sys/stat.h>
00397 #endif
00398
00399
00400 #ifndef S_ISREG
00401 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
00402 #endif
00403
00404
00405 #ifndef S_ISDIR
00406 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
00407 #endif
00408
00409
00410 #ifndef S_ISCHR
00411 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
00412 #endif
00413
00414
00415 #ifndef S_ISBLK
00416 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
00417 #endif
00418
00419
00420 #ifndef S_ISSOCK
00421 # ifdef S_IFSOCK
00422 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
00423 # else
00424 # define S_ISSOCK(m) 0
00425 # endif
00426 #endif
00427
00428
00429 #ifndef S_ISFIFO
00430 # ifdef S_IFIFO
00431 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
00432 # else
00433 # define S_ISFIFO(m) 0
00434 # endif
00435 #endif
00436
00437
00438 #ifndef O_NONBLOCK
00439 #define O_NONBLOCK O_NDELAY
00440 #endif
00441
00442
00443 #ifndef O_NOCTTY
00444 #define O_NOCTTY 0
00445 #endif
00446
00447
00448 #ifndef STDIN_FILENO
00449 # define STDIN_FILENO 0
00450 #endif
00451 #ifndef STDOUT_FILENO
00452 # define STDOUT_FILENO 1
00453 #endif
00454 #ifndef STDERR_FILENO
00455 # define STDERR_FILENO 2
00456 #endif
00457
00458
00459 #ifdef MKDIR_TAKES_ONE_ARG
00460 # define mkdir(a,b) mkdir(a)
00461 #endif
00462
00463
00464 #ifndef HOST_PTR_PRINTF
00465 # ifdef HAVE_PRINTF_PTR
00466 # define HOST_PTR_PRINTF "%p"
00467 # else
00468 # define HOST_PTR_PRINTF \
00469 (sizeof (int) == sizeof (char *) ? "%x" \
00470 : sizeof (long) == sizeof (char *) ? "%lx" : "%llx")
00471 # endif
00472 #endif
00473
00474
00475 #ifndef PATH_SEPARATOR
00476 #define PATH_SEPARATOR ':'
00477 #endif
00478
00479 #ifndef DIR_SEPARATOR
00480 #define DIR_SEPARATOR '/'
00481 #endif
00482
00483
00484 #ifndef DIR_SEPARATOR_2
00485 # define IS_DIR_SEPARATOR(CH) ((CH) == DIR_SEPARATOR)
00486 #else
00487 # define IS_DIR_SEPARATOR(CH) \
00488 (((CH) == DIR_SEPARATOR) || ((CH) == DIR_SEPARATOR_2))
00489 #endif
00490
00491
00492
00493
00494
00495 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
00496 #define IS_ABSOLUTE_PATHNAME(STR) \
00497 (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$' \
00498 || ((STR)[0] != '\0' && (STR)[1] == ':' && IS_DIR_SEPARATOR ((STR)[2])))
00499 #else
00500 #define IS_ABSOLUTE_PATHNAME(STR) \
00501 (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$')
00502 #endif
00503
00504
00505 #include "libiberty.h"
00506 #include "symcat.h"
00507
00508
00509
00510
00511 #ifndef HOST_BIT_BUCKET
00512 #define HOST_BIT_BUCKET "/dev/null"
00513 #endif
00514
00515
00516
00517
00518 #if (GCC_VERSION > 2000)
00519 #define ENUM_BITFIELD(TYPE) enum TYPE
00520 #else
00521 #define ENUM_BITFIELD(TYPE) unsigned int
00522 #endif
00523
00524 #ifndef offsetof
00525 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
00526 #endif
00527
00528
00529
00530
00531
00532 #ifdef __STDC__
00533 #define UNION_INIT_ZERO , {0}
00534 #else
00535 #define UNION_INIT_ZERO
00536 #endif
00537
00538
00539 #if (GCC_VERSION < 2007)
00540 #ifndef __FUNCTION__
00541 #define __FUNCTION__ "?"
00542 #endif
00543 #endif
00544
00545
00546
00547
00548 #if (GCC_VERSION < 3000)
00549 #define __builtin_expect(a, b) (a)
00550 #endif
00551
00552
00553
00554
00555 #undef bool
00556 #undef true
00557 #undef false
00558 #undef TRUE
00559 #undef FALSE
00560
00561 #ifdef HAVE_STDBOOL_H
00562 # include <stdbool.h>
00563 #else
00564 # if !HAVE__BOOL
00565 typedef char _Bool;
00566 # endif
00567 # define bool _Bool
00568 #if defined SGI_MONGOOSE
00569 #if GCC_VERSION < 3000
00570 # if HAVE__BOOL
00571 #undef bool
00572 #define bool bool
00573 #undef HAVE__BOOL
00574 # endif
00575 #else
00576 #ifdef __cplusplus
00577 #undef bool
00578 #endif
00579 #endif
00580 #endif
00581 # define true 1
00582 # define false 0
00583 #endif
00584
00585 #define TRUE true
00586 #define FALSE false
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 #define really_call_malloc malloc
00600 #define really_call_calloc calloc
00601 #define really_call_realloc realloc
00602
00603 #if (GCC_VERSION >= 3000)
00604
00605
00606
00607
00608
00609 #ifdef IN_GCC
00610 #undef calloc
00611 #undef strdup
00612 #ifndef SGI_MONGOOSE // Don't poison because STL uses these functions.
00613 #pragma GCC poison calloc strdup
00614 #endif
00615
00616 #if defined(FLEX_SCANNER) || defined (YYBISON)
00617
00618 #define malloc xmalloc
00619 #define realloc xrealloc
00620 #else
00621 #undef malloc
00622 #undef realloc
00623 #ifndef KEY
00624 #pragma GCC poison malloc realloc
00625 #endif // !KEY
00626 #endif
00627
00628
00629 #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \
00630 FUNCTION_PROLOGUE FUNCTION_EPILOGUE \
00631 FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \
00632 DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \
00633 VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \
00634 SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \
00635 MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \
00636 MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \
00637 ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \
00638 WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
00639 ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \
00640 ASM_OUTPUT_MI_THUNK
00641
00642
00643
00644
00645 #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG \
00646 ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT \
00647 DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \
00648 OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \
00649 LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \
00650 STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \
00651 SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \
00652 TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \
00653 NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \
00654 BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \
00655 FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \
00656 MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP \
00657 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
00658
00659
00660 #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
00661 LANG_HOOKS_MARK_TREE
00662
00663 #endif
00664
00665 #ifdef SGI_MONGOOSE
00666 #define really_call_bzero bzero
00667 #endif
00668
00669
00670
00671 #undef bcopy
00672 #undef bzero
00673 #undef bcmp
00674 #undef rindex
00675 #pragma GCC poison bcopy bzero bcmp rindex
00676
00677 #endif
00678
00679 #endif