1 /* Get common system includes and various definitions and declarations 2 based on target macros. 3 Copyright (C) 2000-2018 Free Software Foundation, Inc. 4 5 This file is part of GCC. 6 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 9 Software Foundation; either version 3, or (at your option) any later 10 version. 11 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. 16 17 Under Section 7 of GPL version 3, you are granted additional 18 permissions described in the GCC Runtime Library Exception, version 19 3.1, as published by the Free Software Foundation. 20 21 You should have received a copy of the GNU General Public License and 22 a copy of the GCC Runtime Library Exception along with this program; 23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 <http://www.gnu.org/licenses/>. */ 25 26 #ifndef GCC_TSYSTEM_H 27 #define GCC_TSYSTEM_H 28 29 /* System headers (e.g. stdio.h, stdlib.h, unistd.h) sometimes 30 indirectly include getopt.h. Our -I flags will cause gcc's gnu 31 getopt.h to be included, not the platform's copy. In the default 32 case, gnu getopt.h will provide us with a no-argument prototype 33 which will generate -Wstrict-prototypes warnings. None of the 34 target files actually use getopt, so it is safe to tell gnu 35 getopt.h we never need this prototype. */ 36 #ifndef HAVE_DECL_GETOPT 37 #define HAVE_DECL_GETOPT 1 38 #endif 39 40 /* We want everything from the glibc headers. */ 41 #define _GNU_SOURCE 1 42 43 /* GCC supplies these headers. */ 44 #include <stddef.h> 45 #include <float.h> 46 47 #ifdef inhibit_libc 48 49 #ifndef malloc 50 extern void *malloc (size_t); 51 #endif 52 53 #ifndef free 54 extern void free (void *); 55 #endif 56 57 #ifndef atexit 58 extern int atexit (void (*)(void)); 59 #endif 60 61 #ifndef abort 62 extern void abort (void) __attribute__ ((__noreturn__)); 63 #endif 64 65 #ifndef strlen 66 extern size_t strlen (const char *); 67 #endif 68 69 #ifndef memcpy 70 extern void *memcpy (void *, const void *, size_t); 71 #endif 72 73 #ifndef memset 74 extern void *memset (void *, int, size_t); 75 #endif 76 77 #else /* ! inhibit_libc */ 78 /* We disable this when inhibit_libc, so that gcc can still be built without 79 needing header files first. */ 80 /* ??? This is not a good solution, since prototypes may be required in 81 some cases for correct code. */ 82 83 /* GCC supplies this header. */ 84 #include <stdarg.h> 85 86 /* All systems have this header. */ 87 #include <stdio.h> 88 89 /* All systems have this header. */ 90 #include <sys/types.h> 91 92 /* All systems have this header. */ 93 #include <errno.h> 94 95 #ifndef errno 96 extern int errno; 97 #endif 98 99 /* If these system headers do not exist, fixincludes must create them. */ 100 #include <string.h> 101 #include <stdlib.h> 102 #include <unistd.h> 103 104 /* GCC supplies this header. */ 105 #include <limits.h> 106 107 /* If these system headers do not exist, fixincludes must create them. */ 108 #include <time.h> 109 110 #endif /* inhibit_libc */ 111 112 /* Define a generic NULL if one hasn't already been defined. */ 113 #ifndef NULL 114 #define NULL 0 115 #endif 116 117 /* GCC always provides __builtin_alloca(x). */ 118 #undef alloca 119 #define alloca(x) __builtin_alloca(x) 120 121 #ifdef ENABLE_RUNTIME_CHECKING 122 #define gcc_assert(EXPR) ((void)(!(EXPR) ? abort (), 0 : 0)) 123 #else 124 /* Include EXPR, so that unused variable warnings do not occur. */ 125 #define gcc_assert(EXPR) ((void)(0 && (EXPR))) 126 #endif 127 /* Use gcc_unreachable() to mark unreachable locations (like an 128 unreachable default case of a switch. Do not use gcc_assert(0). */ 129 #define gcc_unreachable() (abort ()) 130 131 #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) 132 #define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X)) 133 134 /* Filename handling macros. */ 135 #include "filenames.h" 136 137 #endif /* ! GCC_TSYSTEM_H */ 138