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