136ac495dSmrg /* Get common system includes and various definitions and declarations based 236ac495dSmrg on autoconf macros. 3*8feb0f0bSmrg Copyright (C) 1998-2020 Free Software Foundation, Inc. 436ac495dSmrg 536ac495dSmrg This file is part of GCC. 636ac495dSmrg 736ac495dSmrg GCC is free software; you can redistribute it and/or modify it under 836ac495dSmrg the terms of the GNU General Public License as published by the Free 936ac495dSmrg Software Foundation; either version 3, or (at your option) any later 1036ac495dSmrg version. 1136ac495dSmrg 1236ac495dSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY 1336ac495dSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or 1436ac495dSmrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1536ac495dSmrg for more details. 1636ac495dSmrg 1736ac495dSmrg You should have received a copy of the GNU General Public License 1836ac495dSmrg along with GCC; see the file COPYING3. If not see 1936ac495dSmrg <http://www.gnu.org/licenses/>. */ 2036ac495dSmrg 2136ac495dSmrg 2236ac495dSmrg #ifndef LIBCPP_SYSTEM_H 2336ac495dSmrg #define LIBCPP_SYSTEM_H 2436ac495dSmrg 2536ac495dSmrg /* We must include stdarg.h before stdio.h. */ 2636ac495dSmrg #include <stdarg.h> 2736ac495dSmrg 2836ac495dSmrg #ifdef HAVE_STDDEF_H 2936ac495dSmrg # include <stddef.h> 3036ac495dSmrg #endif 3136ac495dSmrg #ifdef HAVE_STDINT_H 3236ac495dSmrg # include <stdint.h> 3336ac495dSmrg #endif 3436ac495dSmrg #ifdef HAVE_INTTYPES_H 3536ac495dSmrg # include <inttypes.h> 3636ac495dSmrg #endif 3736ac495dSmrg 3836ac495dSmrg #include <stdio.h> 3936ac495dSmrg 40c0a68be4Smrg #ifdef __cplusplus 41c0a68be4Smrg #include <new> 42c0a68be4Smrg #endif 43c0a68be4Smrg 4436ac495dSmrg /* Define a generic NULL if one hasn't already been defined. */ 4536ac495dSmrg #ifndef NULL 4636ac495dSmrg #define NULL 0 4736ac495dSmrg #endif 4836ac495dSmrg 4936ac495dSmrg /* Use the unlocked open routines from libiberty. */ 5036ac495dSmrg 5136ac495dSmrg /* Some of these are #define on some systems, e.g. on AIX to redirect 5236ac495dSmrg the names to 64bit capable functions for LARGE_FILES support. These 5336ac495dSmrg redefs are pointless here so we can override them. */ 5436ac495dSmrg 5536ac495dSmrg #undef fopen 5636ac495dSmrg #undef freopen 5736ac495dSmrg 5836ac495dSmrg #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE) 5936ac495dSmrg #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE) 6036ac495dSmrg #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM) 6136ac495dSmrg 6236ac495dSmrg /* The compiler is not a multi-threaded application and therefore we 6336ac495dSmrg do not have to use the locking functions. In fact, using the locking 6436ac495dSmrg functions can cause the compiler to be significantly slower under 6536ac495dSmrg I/O bound conditions (such as -g -O0 on very large source files). 6636ac495dSmrg 6736ac495dSmrg HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio 6836ac495dSmrg code is multi-thread safe by default. If it is set to 0, then do 6936ac495dSmrg not worry about using the _unlocked functions. 7036ac495dSmrg 7136ac495dSmrg fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are 7236ac495dSmrg extensions and need to be prototyped by hand (since we do not 7336ac495dSmrg define _GNU_SOURCE). */ 7436ac495dSmrg 7536ac495dSmrg #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED 7636ac495dSmrg 7736ac495dSmrg # ifdef HAVE_PUTC_UNLOCKED 7836ac495dSmrg # undef putc 7936ac495dSmrg # define putc(C, Stream) putc_unlocked (C, Stream) 8036ac495dSmrg # endif 8136ac495dSmrg # ifdef HAVE_PUTCHAR_UNLOCKED 8236ac495dSmrg # undef putchar 8336ac495dSmrg # define putchar(C) putchar_unlocked (C) 8436ac495dSmrg # endif 8536ac495dSmrg # ifdef HAVE_GETC_UNLOCKED 8636ac495dSmrg # undef getc 8736ac495dSmrg # define getc(Stream) getc_unlocked (Stream) 8836ac495dSmrg # endif 8936ac495dSmrg # ifdef HAVE_GETCHAR_UNLOCKED 9036ac495dSmrg # undef getchar 9136ac495dSmrg # define getchar() getchar_unlocked () 9236ac495dSmrg # endif 9336ac495dSmrg # ifdef HAVE_FPUTC_UNLOCKED 9436ac495dSmrg # undef fputc 9536ac495dSmrg # define fputc(C, Stream) fputc_unlocked (C, Stream) 9636ac495dSmrg # endif 9736ac495dSmrg 9836ac495dSmrg #ifdef __cplusplus 9936ac495dSmrg extern "C" { 10036ac495dSmrg #endif 10136ac495dSmrg 10236ac495dSmrg # ifdef HAVE_CLEARERR_UNLOCKED 10336ac495dSmrg # undef clearerr 10436ac495dSmrg # define clearerr(Stream) clearerr_unlocked (Stream) 10536ac495dSmrg # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED 10636ac495dSmrg extern void clearerr_unlocked (FILE *); 10736ac495dSmrg # endif 10836ac495dSmrg # endif 10936ac495dSmrg # ifdef HAVE_FEOF_UNLOCKED 11036ac495dSmrg # undef feof 11136ac495dSmrg # define feof(Stream) feof_unlocked (Stream) 11236ac495dSmrg # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED 11336ac495dSmrg extern int feof_unlocked (FILE *); 11436ac495dSmrg # endif 11536ac495dSmrg # endif 11636ac495dSmrg # ifdef HAVE_FILENO_UNLOCKED 11736ac495dSmrg # undef fileno 11836ac495dSmrg # define fileno(Stream) fileno_unlocked (Stream) 11936ac495dSmrg # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED 12036ac495dSmrg extern int fileno_unlocked (FILE *); 12136ac495dSmrg # endif 12236ac495dSmrg # endif 12336ac495dSmrg # ifdef HAVE_FFLUSH_UNLOCKED 12436ac495dSmrg # undef fflush 12536ac495dSmrg # define fflush(Stream) fflush_unlocked (Stream) 12636ac495dSmrg # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED 12736ac495dSmrg extern int fflush_unlocked (FILE *); 12836ac495dSmrg # endif 12936ac495dSmrg # endif 13036ac495dSmrg # ifdef HAVE_FGETC_UNLOCKED 13136ac495dSmrg # undef fgetc 13236ac495dSmrg # define fgetc(Stream) fgetc_unlocked (Stream) 13336ac495dSmrg # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED 13436ac495dSmrg extern int fgetc_unlocked (FILE *); 13536ac495dSmrg # endif 13636ac495dSmrg # endif 13736ac495dSmrg # ifdef HAVE_FGETS_UNLOCKED 13836ac495dSmrg # undef fgets 13936ac495dSmrg # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) 14036ac495dSmrg # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED 14136ac495dSmrg extern char *fgets_unlocked (char *, int, FILE *); 14236ac495dSmrg # endif 14336ac495dSmrg # endif 14436ac495dSmrg # ifdef HAVE_FPUTS_UNLOCKED 14536ac495dSmrg # undef fputs 14636ac495dSmrg # define fputs(String, Stream) fputs_unlocked (String, Stream) 14736ac495dSmrg # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED 14836ac495dSmrg extern int fputs_unlocked (const char *, FILE *); 14936ac495dSmrg # endif 15036ac495dSmrg # endif 15136ac495dSmrg # ifdef HAVE_FERROR_UNLOCKED 15236ac495dSmrg # undef ferror 15336ac495dSmrg # define ferror(Stream) ferror_unlocked (Stream) 15436ac495dSmrg # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED 15536ac495dSmrg extern int ferror_unlocked (FILE *); 15636ac495dSmrg # endif 15736ac495dSmrg # endif 15836ac495dSmrg # ifdef HAVE_FREAD_UNLOCKED 15936ac495dSmrg # undef fread 16036ac495dSmrg # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) 16136ac495dSmrg # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED 16236ac495dSmrg extern size_t fread_unlocked (void *, size_t, size_t, FILE *); 16336ac495dSmrg # endif 16436ac495dSmrg # endif 16536ac495dSmrg # ifdef HAVE_FWRITE_UNLOCKED 16636ac495dSmrg # undef fwrite 16736ac495dSmrg # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) 16836ac495dSmrg # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED 16936ac495dSmrg extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); 17036ac495dSmrg # endif 17136ac495dSmrg # endif 17236ac495dSmrg # ifdef HAVE_FPRINTF_UNLOCKED 17336ac495dSmrg # undef fprintf 17436ac495dSmrg /* We can't use a function-like macro here because we don't know if 17536ac495dSmrg we have varargs macros. */ 17636ac495dSmrg # define fprintf fprintf_unlocked 17736ac495dSmrg # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED 17836ac495dSmrg extern int fprintf_unlocked (FILE *, const char *, ...); 17936ac495dSmrg # endif 18036ac495dSmrg # endif 18136ac495dSmrg 18236ac495dSmrg #ifdef __cplusplus 18336ac495dSmrg } 18436ac495dSmrg #endif 18536ac495dSmrg 18636ac495dSmrg #endif 18736ac495dSmrg 18836ac495dSmrg /* ??? Glibc's fwrite/fread_unlocked macros cause 18936ac495dSmrg "warning: signed and unsigned type in conditional expression". */ 19036ac495dSmrg #undef fread_unlocked 19136ac495dSmrg #undef fwrite_unlocked 19236ac495dSmrg 19336ac495dSmrg #include <sys/types.h> 19436ac495dSmrg #include <errno.h> 19536ac495dSmrg 19636ac495dSmrg #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO 19736ac495dSmrg extern int errno; 19836ac495dSmrg #endif 19936ac495dSmrg 20036ac495dSmrg /* Some of glibc's string inlines cause warnings. Plus we'd rather 20136ac495dSmrg rely on (and therefore test) GCC's string builtins. */ 20236ac495dSmrg #define __NO_STRING_INLINES 20336ac495dSmrg 20436ac495dSmrg #ifdef STRING_WITH_STRINGS 20536ac495dSmrg # include <string.h> 20636ac495dSmrg # include <strings.h> 20736ac495dSmrg #else 20836ac495dSmrg # ifdef HAVE_STRING_H 20936ac495dSmrg # include <string.h> 21036ac495dSmrg # else 21136ac495dSmrg # ifdef HAVE_STRINGS_H 21236ac495dSmrg # include <strings.h> 21336ac495dSmrg # endif 21436ac495dSmrg # endif 21536ac495dSmrg #endif 21636ac495dSmrg 21736ac495dSmrg #ifdef HAVE_STDLIB_H 21836ac495dSmrg # include <stdlib.h> 21936ac495dSmrg #endif 22036ac495dSmrg 22136ac495dSmrg #ifdef HAVE_UNISTD_H 22236ac495dSmrg # include <unistd.h> 22336ac495dSmrg #endif 22436ac495dSmrg 22536ac495dSmrg #if HAVE_LIMITS_H 22636ac495dSmrg # include <limits.h> 22736ac495dSmrg #endif 22836ac495dSmrg 22936ac495dSmrg /* Infrastructure for defining missing _MAX and _MIN macros. Note that 23036ac495dSmrg macros defined with these cannot be used in #if. */ 23136ac495dSmrg 23236ac495dSmrg /* The extra casts work around common compiler bugs. */ 23336ac495dSmrg #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) 23436ac495dSmrg /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. 23536ac495dSmrg It is necessary at least when t == time_t. */ 23636ac495dSmrg #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ 23736ac495dSmrg ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0)) 23836ac495dSmrg #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) 23936ac495dSmrg 24036ac495dSmrg /* Use that infrastructure to provide a few constants. */ 24136ac495dSmrg #ifndef UCHAR_MAX 24236ac495dSmrg # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) 24336ac495dSmrg #endif 24436ac495dSmrg 24536ac495dSmrg #ifdef TIME_WITH_SYS_TIME 24636ac495dSmrg # include <sys/time.h> 24736ac495dSmrg # include <time.h> 24836ac495dSmrg #else 24936ac495dSmrg # if HAVE_SYS_TIME_H 25036ac495dSmrg # include <sys/time.h> 25136ac495dSmrg # else 25236ac495dSmrg # ifdef HAVE_TIME_H 25336ac495dSmrg # include <time.h> 25436ac495dSmrg # endif 25536ac495dSmrg # endif 25636ac495dSmrg #endif 25736ac495dSmrg 25836ac495dSmrg #ifdef HAVE_FCNTL_H 25936ac495dSmrg # include <fcntl.h> 26036ac495dSmrg #else 26136ac495dSmrg # ifdef HAVE_SYS_FILE_H 26236ac495dSmrg # include <sys/file.h> 26336ac495dSmrg # endif 26436ac495dSmrg #endif 26536ac495dSmrg 26636ac495dSmrg #ifdef HAVE_LOCALE_H 26736ac495dSmrg # include <locale.h> 26836ac495dSmrg #endif 26936ac495dSmrg 27036ac495dSmrg #ifdef HAVE_LANGINFO_CODESET 27136ac495dSmrg # include <langinfo.h> 27236ac495dSmrg #endif 27336ac495dSmrg 27436ac495dSmrg #ifndef HAVE_SETLOCALE 27536ac495dSmrg # define setlocale(category, locale) (locale) 27636ac495dSmrg #endif 27736ac495dSmrg 27836ac495dSmrg #ifdef ENABLE_NLS 27936ac495dSmrg #include <libintl.h> 28036ac495dSmrg #else 28136ac495dSmrg /* Stubs. */ 28236ac495dSmrg # undef dgettext 28336ac495dSmrg # define dgettext(package, msgid) (msgid) 28436ac495dSmrg #endif 28536ac495dSmrg 28636ac495dSmrg #ifndef _ 28736ac495dSmrg # define _(msgid) dgettext (PACKAGE, msgid) 28836ac495dSmrg #endif 28936ac495dSmrg 29036ac495dSmrg #ifndef N_ 29136ac495dSmrg # define N_(msgid) msgid 29236ac495dSmrg #endif 29336ac495dSmrg 29436ac495dSmrg /* Some systems define these in, e.g., param.h. We undefine these names 29536ac495dSmrg here to avoid the warnings. We prefer to use our definitions since we 29636ac495dSmrg know they are correct. */ 29736ac495dSmrg 29836ac495dSmrg #undef MIN 29936ac495dSmrg #undef MAX 30036ac495dSmrg #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) 30136ac495dSmrg #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) 30236ac495dSmrg 30336ac495dSmrg /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they 30436ac495dSmrg are defined to 0 then we must provide the relevant declaration 30536ac495dSmrg here. These checks will be in the undefined state while configure 30636ac495dSmrg is running so be careful to test "defined (HAVE_DECL_*)". */ 30736ac495dSmrg 30836ac495dSmrg #ifdef __cplusplus 30936ac495dSmrg extern "C" { 31036ac495dSmrg #endif 31136ac495dSmrg 31236ac495dSmrg #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT 31336ac495dSmrg extern void abort (void); 31436ac495dSmrg #endif 31536ac495dSmrg 31636ac495dSmrg #ifdef __cplusplus 31736ac495dSmrg } 31836ac495dSmrg #endif 31936ac495dSmrg 32036ac495dSmrg #if HAVE_SYS_STAT_H 32136ac495dSmrg # include <sys/stat.h> 32236ac495dSmrg #endif 32336ac495dSmrg 32436ac495dSmrg /* Test if something is a normal file. */ 32536ac495dSmrg #ifndef S_ISREG 32636ac495dSmrg #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 32736ac495dSmrg #endif 32836ac495dSmrg 32936ac495dSmrg /* Test if something is a directory. */ 33036ac495dSmrg #ifndef S_ISDIR 33136ac495dSmrg #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 33236ac495dSmrg #endif 33336ac495dSmrg 33436ac495dSmrg /* Test if something is a character special file. */ 33536ac495dSmrg #ifndef S_ISCHR 33636ac495dSmrg #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 33736ac495dSmrg #endif 33836ac495dSmrg 33936ac495dSmrg /* Test if something is a block special file. */ 34036ac495dSmrg #ifndef S_ISBLK 34136ac495dSmrg #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 34236ac495dSmrg #endif 34336ac495dSmrg 34436ac495dSmrg /* Test if something is a socket. */ 34536ac495dSmrg #ifndef S_ISSOCK 34636ac495dSmrg # ifdef S_IFSOCK 34736ac495dSmrg # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 34836ac495dSmrg # else 34936ac495dSmrg # define S_ISSOCK(m) 0 35036ac495dSmrg # endif 35136ac495dSmrg #endif 35236ac495dSmrg 35336ac495dSmrg /* Test if something is a FIFO. */ 35436ac495dSmrg #ifndef S_ISFIFO 35536ac495dSmrg # ifdef S_IFIFO 35636ac495dSmrg # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 35736ac495dSmrg # else 35836ac495dSmrg # define S_ISFIFO(m) 0 35936ac495dSmrg # endif 36036ac495dSmrg #endif 36136ac495dSmrg 36236ac495dSmrg /* Approximate O_NOCTTY and O_BINARY. */ 36336ac495dSmrg #ifndef O_NOCTTY 36436ac495dSmrg #define O_NOCTTY 0 36536ac495dSmrg #endif 36636ac495dSmrg #ifndef O_BINARY 36736ac495dSmrg # define O_BINARY 0 36836ac495dSmrg #endif 36936ac495dSmrg 37036ac495dSmrg /* Filename handling macros. */ 37136ac495dSmrg #include "filenames.h" 37236ac495dSmrg 37336ac495dSmrg /* Get libiberty declarations. */ 37436ac495dSmrg #include "libiberty.h" 37536ac495dSmrg #include "safe-ctype.h" 37636ac495dSmrg 37736ac495dSmrg /* 1 if we have C99 designated initializers. 37836ac495dSmrg 37936ac495dSmrg ??? C99 designated initializers are not supported by most C++ 38036ac495dSmrg compilers, including G++. -- gdr, 2005-05-18 */ 38136ac495dSmrg #if !defined(HAVE_DESIGNATED_INITIALIZERS) 38236ac495dSmrg #ifdef __cplusplus 38336ac495dSmrg #define HAVE_DESIGNATED_INITIALIZERS 0 38436ac495dSmrg #else 38536ac495dSmrg #define HAVE_DESIGNATED_INITIALIZERS \ 38636ac495dSmrg ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) 38736ac495dSmrg #endif 38836ac495dSmrg #endif 38936ac495dSmrg 39036ac495dSmrg #ifndef offsetof 39136ac495dSmrg #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) 39236ac495dSmrg #endif 39336ac495dSmrg 39436ac495dSmrg /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that 39536ac495dSmrg the most likely value of A is B. This feature was added at some point 39636ac495dSmrg between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ 39736ac495dSmrg #if (GCC_VERSION < 3000) 39836ac495dSmrg #define __builtin_expect(a, b) (a) 39936ac495dSmrg #endif 40036ac495dSmrg 40136ac495dSmrg /* Redefine abort to report an internal error w/o coredump, and 40236ac495dSmrg reporting the location of the error in the source file. */ 40336ac495dSmrg extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; 40436ac495dSmrg #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) 40536ac495dSmrg 40636ac495dSmrg /* Use gcc_assert(EXPR) to test invariants. */ 40736ac495dSmrg #if ENABLE_ASSERT_CHECKING 40836ac495dSmrg #define gcc_assert(EXPR) \ 40936ac495dSmrg ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0)) 41036ac495dSmrg #elif (GCC_VERSION >= 4005) 41136ac495dSmrg #define gcc_assert(EXPR) \ 41236ac495dSmrg ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0)) 41336ac495dSmrg #else 41436ac495dSmrg /* Include EXPR, so that unused variable warnings do not occur. */ 41536ac495dSmrg #define gcc_assert(EXPR) ((void)(0 && (EXPR))) 41636ac495dSmrg #endif 41736ac495dSmrg 41836ac495dSmrg #if CHECKING_P 41936ac495dSmrg #define gcc_checking_assert(EXPR) gcc_assert (EXPR) 42036ac495dSmrg #else 42136ac495dSmrg /* N.B.: in release build EXPR is not evaluated. */ 42236ac495dSmrg #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR))) 42336ac495dSmrg #endif 42436ac495dSmrg 42536ac495dSmrg /* Provide a fake boolean type. We make no attempt to use the 42636ac495dSmrg C99 _Bool, as it may not be available in the bootstrap compiler, 42736ac495dSmrg and even if it is, it is liable to be buggy. 42836ac495dSmrg This must be after all inclusion of system headers, as some of 42936ac495dSmrg them will mess us up. */ 43036ac495dSmrg #undef bool 43136ac495dSmrg #undef true 43236ac495dSmrg #undef false 43336ac495dSmrg #undef TRUE 43436ac495dSmrg #undef FALSE 43536ac495dSmrg 43636ac495dSmrg #ifndef __cplusplus 43736ac495dSmrg #define bool unsigned char 43836ac495dSmrg #endif 43936ac495dSmrg #define true 1 44036ac495dSmrg #define false 0 44136ac495dSmrg 44236ac495dSmrg /* Some compilers do not allow the use of unsigned char in bitfields. */ 44336ac495dSmrg #define BOOL_BITFIELD unsigned int 44436ac495dSmrg 44536ac495dSmrg /* Poison identifiers we do not want to use. */ 44636ac495dSmrg #if (GCC_VERSION >= 3000) 44736ac495dSmrg #undef calloc 44836ac495dSmrg #undef strdup 44936ac495dSmrg #undef malloc 45036ac495dSmrg #undef realloc 45136ac495dSmrg #pragma GCC poison calloc strdup 45236ac495dSmrg #pragma GCC poison malloc realloc 45336ac495dSmrg 45436ac495dSmrg /* Libiberty macros that are no longer used in GCC. */ 45536ac495dSmrg #undef ANSI_PROTOTYPES 45636ac495dSmrg #undef PTR_CONST 45736ac495dSmrg #undef LONG_DOUBLE 45836ac495dSmrg #undef VPARAMS 45936ac495dSmrg #undef VA_OPEN 46036ac495dSmrg #undef VA_FIXEDARG 46136ac495dSmrg #undef VA_CLOSE 46236ac495dSmrg #undef VA_START 46336ac495dSmrg #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ 46436ac495dSmrg VA_FIXEDARG VA_CLOSE VA_START 46536ac495dSmrg 46636ac495dSmrg /* Note: not all uses of the `index' token (e.g. variable names and 46736ac495dSmrg structure members) have been eliminated. */ 46836ac495dSmrg #undef bcopy 46936ac495dSmrg #undef bzero 47036ac495dSmrg #undef bcmp 47136ac495dSmrg #undef rindex 47236ac495dSmrg #pragma GCC poison bcopy bzero bcmp rindex 47336ac495dSmrg 47436ac495dSmrg #endif /* GCC >= 3.0 */ 47536ac495dSmrg #endif /* ! LIBCPP_SYSTEM_H */ 476