Wolfgang Thallergcc16 merge934c3885 months agoHistory
467 lines · 12.1 KB · C
RawDownload
/* Get common system includes and various definitions and declarations based   on autoconf macros.   Copyright (C) 1998-2026 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 3, or (at your option) any laterversion. GCC is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details. You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING3.  If not see<http://www.gnu.org/licenses/>.  */  #ifndef LIBCPP_SYSTEM_H#define LIBCPP_SYSTEM_H /* We must include stdarg.h before stdio.h.  */#include <stdarg.h> #ifdef HAVE_STDDEF_H# include <stddef.h>#endif#ifdef HAVE_STDINT_H# include <stdint.h>#endif#ifdef HAVE_INTTYPES_H# include <inttypes.h>#endif #include <stdio.h> #ifdef __cplusplus#include <new>#endif /* Define a generic NULL if one hasn't already been defined.  */#ifndef NULL#define NULL 0#endif /* Use the unlocked open routines from libiberty.  */ /* Some of these are #define on some systems, e.g. on AIX to redirect   the names to 64bit capable functions for LARGE_FILES support. These   redefs are pointless here so we can override them.  */ #undef fopen#undef freopen #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE)#define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE)#define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM) /* The compiler is not a multi-threaded application and therefore we   do not have to use the locking functions.  In fact, using the locking   functions can cause the compiler to be significantly slower under   I/O bound conditions (such as -g -O0 on very large source files).    HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio   code is multi-thread safe by default.  If it is set to 0, then do   not worry about using the _unlocked functions.    fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are   extensions and need to be prototyped by hand (since we do not   define _GNU_SOURCE).  */ #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED # ifdef HAVE_PUTC_UNLOCKED#  undef putc#  define putc(C, Stream) putc_unlocked (C, Stream)# endif# ifdef HAVE_PUTCHAR_UNLOCKED#  undef putchar#  define putchar(C) putchar_unlocked (C)# endif# ifdef HAVE_GETC_UNLOCKED#  undef getc#  define getc(Stream) getc_unlocked (Stream)# endif# ifdef HAVE_GETCHAR_UNLOCKED#  undef getchar#  define getchar() getchar_unlocked ()# endif# ifdef HAVE_FPUTC_UNLOCKED#  undef fputc#  define fputc(C, Stream) fputc_unlocked (C, Stream)# endif #ifdef __cplusplusextern "C" {#endif # ifdef HAVE_CLEARERR_UNLOCKED#  undef clearerr#  define clearerr(Stream) clearerr_unlocked (Stream)#  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKEDextern void clearerr_unlocked (FILE *);#  endif# endif# ifdef HAVE_FEOF_UNLOCKED#  undef feof#  define feof(Stream) feof_unlocked (Stream)#  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKEDextern int feof_unlocked (FILE *);#  endif# endif# ifdef HAVE_FILENO_UNLOCKED#  undef fileno#  define fileno(Stream) fileno_unlocked (Stream)#  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKEDextern int fileno_unlocked (FILE *);#  endif# endif# ifdef HAVE_FFLUSH_UNLOCKED#  undef fflush#  define fflush(Stream) fflush_unlocked (Stream)#  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKEDextern int fflush_unlocked (FILE *);#  endif# endif# ifdef HAVE_FGETC_UNLOCKED#  undef fgetc#  define fgetc(Stream) fgetc_unlocked (Stream)#  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKEDextern int fgetc_unlocked (FILE *);#  endif# endif# ifdef HAVE_FGETS_UNLOCKED#  undef fgets#  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)#  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKEDextern char *fgets_unlocked (char *, int, FILE *);#  endif# endif# ifdef HAVE_FPUTS_UNLOCKED#  undef fputs#  define fputs(String, Stream) fputs_unlocked (String, Stream)#  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKEDextern int fputs_unlocked (const char *, FILE *);#  endif# endif# ifdef HAVE_FERROR_UNLOCKED#  undef ferror#  define ferror(Stream) ferror_unlocked (Stream)#  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKEDextern int ferror_unlocked (FILE *);#  endif# endif# ifdef HAVE_FREAD_UNLOCKED#  undef fread#  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)#  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKEDextern size_t fread_unlocked (void *, size_t, size_t, FILE *);#  endif# endif# ifdef HAVE_FWRITE_UNLOCKED#  undef fwrite#  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)#  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKEDextern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);#  endif# endif# ifdef HAVE_FPRINTF_UNLOCKED#  undef fprintf/* We can't use a function-like macro here because we don't know if   we have varargs macros.  */#  define fprintf fprintf_unlocked#  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKEDextern int fprintf_unlocked (FILE *, const char *, ...);#  endif# endif #ifdef __cplusplus}#endif #endif /* ??? Glibc's fwrite/fread_unlocked macros cause   "warning: signed and unsigned type in conditional expression".  */#undef fread_unlocked#undef fwrite_unlocked #include <sys/types.h>#include <errno.h> #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNOextern int errno;#endif /* Some of glibc's string inlines cause warnings.  Plus we'd rather   rely on (and therefore test) GCC's string builtins.  */#define __NO_STRING_INLINES #ifdef STRING_WITH_STRINGS# include <string.h># include <strings.h>#else# ifdef HAVE_STRING_H#  include <string.h># else#  ifdef HAVE_STRINGS_H#   include <strings.h>#  endif# endif#endif #ifdef HAVE_STDLIB_H# include <stdlib.h>#endif #ifdef HAVE_UNISTD_H# include <unistd.h>#endif #if HAVE_LIMITS_H# include <limits.h>#endif /* Infrastructure for defining missing _MAX and _MIN macros.  Note that   macros defined with these cannot be used in #if.  */ /* The extra casts work around common compiler bugs.  */#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.   It is necessary at least when t == time_t.  */#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \			    ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) /* Use that infrastructure to provide a few constants.  */#ifndef UCHAR_MAX# define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)#endif #ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  ifdef HAVE_TIME_H#   include <time.h>#  endif# endif#endif #ifdef HAVE_FCNTL_H# include <fcntl.h>#else# ifdef HAVE_SYS_FILE_H#  include <sys/file.h># endif#endif #ifdef HAVE_LOCALE_H# include <locale.h>#endif #ifdef HAVE_LANGINFO_CODESET# include <langinfo.h>#endif #ifndef HAVE_SETLOCALE# define setlocale(category, locale) (locale)#endif #ifdef ENABLE_NLS#include <libintl.h>#else/* Stubs.  */# undef dgettext# define dgettext(package, msgid) (msgid)#endif #ifndef _# define _(msgid) dgettext (PACKAGE, msgid)#endif #ifndef N_# define N_(msgid) msgid#endif /* Some systems define these in, e.g., param.h.  We undefine these names   here to avoid the warnings.  We prefer to use our definitions since we   know they are correct.  */ #undef MIN#undef MAX#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they   are defined to 0 then we must provide the relevant declaration   here.  These checks will be in the undefined state while configure   is running so be careful to test "defined (HAVE_DECL_*)".  */ #ifdef __cplusplusextern "C" {#endif #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORTextern void abort (void);#endif #ifdef __cplusplus}#endif #if HAVE_SYS_STAT_H# include <sys/stat.h>#endif /* Test if something is a normal file.  */#ifndef S_ISREG#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)#endif /* Test if something is a directory.  */#ifndef S_ISDIR#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)#endif /* Test if something is a character special file.  */#ifndef S_ISCHR#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)#endif /* Test if something is a block special file.  */#ifndef S_ISBLK#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)#endif /* Test if something is a socket.  */#ifndef S_ISSOCK# ifdef S_IFSOCK#   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)# else#   define S_ISSOCK(m) 0# endif#endif /* Test if something is a FIFO.  */#ifndef S_ISFIFO# ifdef S_IFIFO#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)# else#  define S_ISFIFO(m) 0# endif#endif /* Approximate O_NOCTTY and O_BINARY.  */#ifndef O_NOCTTY#define O_NOCTTY 0#endif#ifndef O_BINARY# define O_BINARY 0#endif /* Filename handling macros.  */#include "filenames.h" /* Get libiberty declarations.  */#include "libiberty.h"#include "safe-ctype.h" /* 1 if we have C99 designated initializers.    ??? C99 designated initializers are not supported by most C++   compilers, including G++.  -- gdr, 2005-05-18  */#if !defined(HAVE_DESIGNATED_INITIALIZERS)#ifdef __cplusplus#define HAVE_DESIGNATED_INITIALIZERS 0#else#define HAVE_DESIGNATED_INITIALIZERS \   ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))#endif#endif #ifndef offsetof#define offsetof(TYPE, MEMBER)	((size_t) &((TYPE *) 0)->MEMBER)#endif /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that   the most likely value of A is B.  This feature was added at some point   between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */#if (GCC_VERSION < 3000)#define __builtin_expect(a, b) (a)#endif /* Redefine abort to report an internal error w/o coredump, and   reporting the location of the error in the source file.  */extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) /* Use gcc_assert(EXPR) to test invariants.  */#if ENABLE_ASSERT_CHECKING#define gcc_assert(EXPR) 						\   ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))#elif (GCC_VERSION >= 4005)#define gcc_assert(EXPR) 						\  ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))#else/* Include EXPR, so that unused variable warnings do not occur.  */#define gcc_assert(EXPR) ((void)(0 && (EXPR)))#endif #if CHECKING_P#define gcc_checking_assert(EXPR) gcc_assert (EXPR)#else/* N.B.: in release build EXPR is not evaluated.  */#define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))#endif #ifdef __has_cpp_attribute# if __has_cpp_attribute(likely)#  define ATTR_LIKELY [[likely]]# elif __has_cpp_attribute(__likely__)#  define ATTR_LIKELY [[__likely__]]# else#  define ATTR_LIKELY# endif#else# define ATTR_LIKELY#endif /* Poison identifiers we do not want to use.  */#if (GCC_VERSION >= 3000)#undef calloc#undef strdup#undef malloc#undef realloc #pragma GCC poison calloc strdup #pragma GCC poison malloc realloc /* Libiberty macros that are no longer used in GCC.  */#undef ANSI_PROTOTYPES#undef PTR_CONST#undef LONG_DOUBLE#undef VPARAMS#undef VA_OPEN#undef VA_FIXEDARG#undef VA_CLOSE#undef VA_START #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \  VA_FIXEDARG VA_CLOSE VA_START /* Note: not all uses of the `index' token (e.g. variable names and   structure members) have been eliminated.  */#undef bcopy#undef bzero#undef bcmp#undef rindex #pragma GCC poison bcopy bzero bcmp rindex #endif /* GCC >= 3.0 */#endif /* ! LIBCPP_SYSTEM_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t