1@c Copyright (C) 1988-2020 Free Software Foundation, Inc. 2@c This is part of the GCC manual. 3@c For copying conditions, see the file gccint.texi. 4 5@node Host Config 6@chapter Host Configuration 7@cindex host configuration 8 9Most details about the machine and system on which the compiler is 10actually running are detected by the @command{configure} script. Some 11things are impossible for @command{configure} to detect; these are 12described in two ways, either by macros defined in a file named 13@file{xm-@var{machine}.h} or by hook functions in the file specified 14by the @var{out_host_hook_obj} variable in @file{config.gcc}. (The 15intention is that very few hosts will need a header file but nearly 16every fully supported host will need to override some hooks.) 17 18If you need to define only a few macros, and they have simple 19definitions, consider using the @code{xm_defines} variable in your 20@file{config.gcc} entry instead of creating a host configuration 21header. @xref{System Config}. 22 23@menu 24* Host Common:: Things every host probably needs implemented. 25* Filesystem:: Your host cannot have the letter `a' in filenames? 26* Host Misc:: Rare configuration options for hosts. 27@end menu 28 29@node Host Common 30@section Host Common 31@cindex host hooks 32@cindex host functions 33 34Some things are just not portable, even between similar operating systems, 35and are too difficult for autoconf to detect. They get implemented using 36hook functions in the file specified by the @var{host_hook_obj} 37variable in @file{config.gcc}. 38 39@deftypefn {Host Hook} void HOST_HOOKS_EXTRA_SIGNALS (void) 40This host hook is used to set up handling for extra signals. The most 41common thing to do in this hook is to detect stack overflow. 42@end deftypefn 43 44@deftypefn {Host Hook} {void *} HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t @ 45 @var{size}, int @var{fd}) 46This host hook returns the address of some space that is likely to be 47free in some subsequent invocation of the compiler. We intend to load 48the PCH data at this address such that the data need not be relocated. 49The area should be able to hold @var{size} bytes. If the host uses 50@code{mmap}, @var{fd} is an open file descriptor that can be used for 51probing. 52@end deftypefn 53 54@deftypefn {Host Hook} int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * @var{address}, @ 55 size_t @var{size}, int @var{fd}, size_t @var{offset}) 56This host hook is called when a PCH file is about to be loaded. 57We want to load @var{size} bytes from @var{fd} at @var{offset} 58into memory at @var{address}. The given address will be the result of 59a previous invocation of @code{HOST_HOOKS_GT_PCH_GET_ADDRESS}. 60Return @minus{}1 if we couldn't allocate @var{size} bytes at @var{address}. 61Return 0 if the memory is allocated but the data is not loaded. Return 1 62if the hook has performed everything. 63 64If the implementation uses reserved address space, free any reserved 65space beyond @var{size}, regardless of the return value. If no PCH will 66be loaded, this hook may be called with @var{size} zero, in which case 67all reserved address space should be freed. 68 69Do not try to handle values of @var{address} that could not have been 70returned by this executable; just return @minus{}1. Such values usually 71indicate an out-of-date PCH file (built by some other GCC executable), 72and such a PCH file won't work. 73@end deftypefn 74 75@deftypefn {Host Hook} size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 76This host hook returns the alignment required for allocating virtual 77memory. Usually this is the same as getpagesize, but on some hosts the 78alignment for reserving memory differs from the pagesize for committing 79memory. 80@end deftypefn 81 82@node Filesystem 83@section Host Filesystem 84@cindex configuration file 85@cindex @file{xm-@var{machine}.h} 86 87GCC needs to know a number of things about the semantics of the host 88machine's filesystem. Filesystems with Unix and MS-DOS semantics are 89automatically detected. For other systems, you can define the 90following macros in @file{xm-@var{machine}.h}. 91 92@ftable @code 93@item HAVE_DOS_BASED_FILE_SYSTEM 94This macro is automatically defined by @file{system.h} if the host 95file system obeys the semantics defined by MS-DOS instead of Unix. 96DOS file systems are case insensitive, file specifications may begin 97with a drive letter, and both forward slash and backslash (@samp{/} 98and @samp{\}) are directory separators. 99 100@item DIR_SEPARATOR 101@itemx DIR_SEPARATOR_2 102If defined, these macros expand to character constants specifying 103separators for directory names within a file specification. 104@file{system.h} will automatically give them appropriate values on 105Unix and MS-DOS file systems. If your file system is neither of 106these, define one or both appropriately in @file{xm-@var{machine}.h}. 107 108However, operating systems like VMS, where constructing a pathname is 109more complicated than just stringing together directory names 110separated by a special character, should not define either of these 111macros. 112 113@item PATH_SEPARATOR 114If defined, this macro should expand to a character constant 115specifying the separator for elements of search paths. The default 116value is a colon (@samp{:}). DOS-based systems usually, but not 117always, use semicolon (@samp{;}). 118 119@item VMS 120Define this macro if the host system is VMS@. 121 122@item HOST_OBJECT_SUFFIX 123Define this macro to be a C string representing the suffix for object 124files on your host machine. If you do not define this macro, GCC will 125use @samp{.o} as the suffix for object files. 126 127@item HOST_EXECUTABLE_SUFFIX 128Define this macro to be a C string representing the suffix for 129executable files on your host machine. If you do not define this macro, 130GCC will use the null string as the suffix for executable files. 131 132@item HOST_BIT_BUCKET 133A pathname defined by the host operating system, which can be opened as 134a file and written to, but all the information written is discarded. 135This is commonly known as a @dfn{bit bucket} or @dfn{null device}. If 136you do not define this macro, GCC will use @samp{/dev/null} as the bit 137bucket. If the host does not support a bit bucket, define this macro to 138an invalid filename. 139 140@item UPDATE_PATH_HOST_CANONICALIZE (@var{path}) 141If defined, a C statement (sans semicolon) that performs host-dependent 142canonicalization when a path used in a compilation driver or 143preprocessor is canonicalized. @var{path} is a malloc-ed path to be 144canonicalized. If the C statement does canonicalize @var{path} into a 145different buffer, the old path should be freed and the new buffer should 146have been allocated with malloc. 147 148@item DUMPFILE_FORMAT 149Define this macro to be a C string representing the format to use for 150constructing the index part of debugging dump file names. The resultant 151string must fit in fifteen bytes. The full filename will be the 152concatenation of: the prefix of the assembler file name, the string 153resulting from applying this format to an index number, and a string 154unique to each dump file kind, e.g.@: @samp{rtl}. 155 156If you do not define this macro, GCC will use @samp{.%02d.}. You should 157define this macro if using the default will create an invalid file name. 158 159@item DELETE_IF_ORDINARY 160Define this macro to be a C statement (sans semicolon) that performs 161host-dependent removal of ordinary temp files in the compilation driver. 162 163If you do not define this macro, GCC will use the default version. You 164should define this macro if the default version does not reliably remove 165the temp file as, for example, on VMS which allows multiple versions 166of a file. 167 168@item HOST_LACKS_INODE_NUMBERS 169Define this macro if the host filesystem does not report meaningful inode 170numbers in struct stat. 171@end ftable 172 173@node Host Misc 174@section Host Misc 175@cindex configuration file 176@cindex @file{xm-@var{machine}.h} 177 178@ftable @code 179@item FATAL_EXIT_CODE 180A C expression for the status code to be returned when the compiler 181exits after serious errors. The default is the system-provided macro 182@samp{EXIT_FAILURE}, or @samp{1} if the system doesn't define that 183macro. Define this macro only if these defaults are incorrect. 184 185@item SUCCESS_EXIT_CODE 186A C expression for the status code to be returned when the compiler 187exits without serious errors. (Warnings are not serious errors.) The 188default is the system-provided macro @samp{EXIT_SUCCESS}, or @samp{0} if 189the system doesn't define that macro. Define this macro only if these 190defaults are incorrect. 191 192@item USE_C_ALLOCA 193Define this macro if GCC should use the C implementation of @code{alloca} 194provided by @file{libiberty.a}. This only affects how some parts of the 195compiler itself allocate memory. It does not change code generation. 196 197When GCC is built with a compiler other than itself, the C @code{alloca} 198is always used. This is because most other implementations have serious 199bugs. You should define this macro only on a system where no 200stack-based @code{alloca} can possibly work. For instance, if a system 201has a small limit on the size of the stack, GCC's builtin @code{alloca} 202will not work reliably. 203 204@item COLLECT2_HOST_INITIALIZATION 205If defined, a C statement (sans semicolon) that performs host-dependent 206initialization when @code{collect2} is being initialized. 207 208@item GCC_DRIVER_HOST_INITIALIZATION 209If defined, a C statement (sans semicolon) that performs host-dependent 210initialization when a compilation driver is being initialized. 211 212@item HOST_LONG_LONG_FORMAT 213If defined, the string used to indicate an argument of type @code{long 214long} to functions like @code{printf}. The default value is 215@code{"ll"}. 216 217@item HOST_LONG_FORMAT 218If defined, the string used to indicate an argument of type @code{long} 219to functions like @code{printf}. The default value is @code{"l"}. 220 221@item HOST_PTR_PRINTF 222If defined, the string used to indicate an argument of type @code{void *} 223to functions like @code{printf}. The default value is @code{"%p"}. 224@end ftable 225 226In addition, if @command{configure} generates an incorrect definition of 227any of the macros in @file{auto-host.h}, you can override that 228definition in a host configuration header. If you need to do this, 229first see if it is possible to fix @command{configure}. 230