| \input texinfo @c -*-texinfo-*- |
| @c %**start of header |
| @setfilename gccint.info |
| @c INTERNALS is used by md.texi to determine whether to include the |
| @c whole of that file, in the internals manual, or only the part |
| @c dealing with constraints, in the user manual. |
| @set INTERNALS |
| |
| @c See miscellaneous notes in gcc.texi on checks/things to do. |
| |
| @include gcc-common.texi |
| |
| @settitle GNU Compiler Collection (GCC) Internals |
| |
| @c Create a separate index for command line options. |
| @defcodeindex op |
| @c Merge the standard indexes into a single one. |
| @syncodeindex fn cp |
| @syncodeindex vr cp |
| @syncodeindex ky cp |
| @syncodeindex pg cp |
| @syncodeindex tp cp |
| |
| @paragraphindent 1 |
| |
| @c %**end of header |
| |
| @copying |
| Copyright @copyright{} 1988-2022 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 or |
| any later version published by the Free Software Foundation; with the |
| Invariant Sections being ``Funding Free Software'', the Front-Cover |
| Texts being (a) (see below), and with the Back-Cover Texts being (b) |
| (see below). A copy of the license is included in the section entitled |
| ``GNU Free Documentation License''. |
| |
| (a) The FSF's Front-Cover Text is: |
| |
| A GNU Manual |
| |
| (b) The FSF's Back-Cover Text is: |
| |
| You have freedom to copy and modify this GNU Manual, like GNU |
| software. Copies published by the Free Software Foundation raise |
| funds for GNU development. |
| @end copying |
| @ifnottex |
| @dircategory Software development |
| @direntry |
| * gccint: (gccint). Internals of the GNU Compiler Collection. |
| @end direntry |
| This file documents the internals of the GNU compilers. |
| @sp 1 |
| @insertcopying |
| @sp 1 |
| @end ifnottex |
| |
| @setchapternewpage odd |
| @titlepage |
| @title GNU Compiler Collection Internals |
| @versionsubtitle |
| @author Richard M. Stallman and the @sc{GCC} Developer Community |
| @page |
| @vskip 0pt plus 1filll |
| @insertcopying |
| @end titlepage |
| @summarycontents |
| @contents |
| @page |
| |
| @node Top, Contributing |
| @top Introduction |
| @cindex introduction |
| |
| This manual documents the internals of the GNU compilers, including |
| how to port them to new targets and some information about how to |
| write front ends for new languages. It corresponds to the compilers |
| @ifset VERSION_PACKAGE |
| @value{VERSION_PACKAGE} |
| @end ifset |
| version @value{version-GCC}. The use of the GNU compilers is documented in a |
| separate manual. @xref{Top,, Introduction, gcc, Using the GNU |
| Compiler Collection (GCC)}. |
| |
| This manual is mainly a reference manual rather than a tutorial. It |
| discusses how to contribute to GCC (@pxref{Contributing}), the |
| characteristics of the machines supported by GCC as hosts and targets |
| (@pxref{Portability}), how GCC relates to the ABIs on such systems |
| (@pxref{Interface}), and the characteristics of the languages for |
| which GCC front ends are written (@pxref{Languages}). It then |
| describes the GCC source tree structure and build system, some of the |
| interfaces to GCC front ends, and how support for a target system is |
| implemented in GCC@. |
| |
| Additional tutorial information is linked to from |
| @uref{https://gcc.gnu.org/readings.html}. |
| |
| @menu |
| * Contributing:: How to contribute to testing and developing GCC. |
| * Portability:: Goals of GCC's portability features. |
| * Interface:: Function-call interface of GCC output. |
| * Libgcc:: Low-level runtime library used by GCC. |
| * Languages:: Languages for which GCC front ends are written. |
| * Source Tree:: GCC source tree structure and build system. |
| * Testsuites:: GCC testsuites. |
| * Options:: Option specification files. |
| * Passes:: Order of passes, what they do, and what each file is for. |
| * poly_int:: Representation of runtime sizes and offsets. |
| * GENERIC:: Language-independent representation generated by Front Ends |
| * GIMPLE:: Tuple representation used by Tree SSA optimizers |
| * Tree SSA:: Analysis and optimization of GIMPLE |
| * RTL:: Machine-dependent low-level intermediate representation. |
| * Control Flow:: Maintaining and manipulating the control flow graph. |
| * Loop Analysis and Representation:: Analysis and representation of loops |
| * Machine Desc:: How to write machine description instruction patterns. |
| * Target Macros:: How to write the machine description C macros and functions. |
| * Host Config:: Writing the @file{xm-@var{machine}.h} file. |
| * Fragments:: Writing the @file{t-@var{target}} and @file{x-@var{host}} files. |
| * Collect2:: How @code{collect2} works; how it finds @code{ld}. |
| * Header Dirs:: Understanding the standard header file directories. |
| * Type Information:: GCC's memory management; generating type information. |
| * Plugins:: Extending the compiler with plugins. |
| * LTO:: Using Link-Time Optimization. |
| |
| * Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC |
| * Static Analyzer:: Working with the static analyzer. |
| * User Experience Guidelines:: Guidelines for implementing diagnostics and options. |
| * Funding:: How to help assure funding for free software. |
| * GNU Project:: The GNU Project and GNU/Linux. |
| |
| * Copying:: GNU General Public License says |
| how you can copy and share GCC. |
| * GNU Free Documentation License:: How you can copy and share this manual. |
| * Contributors:: People who have contributed to GCC. |
| |
| * Option Index:: Index to command line options. |
| * Concept Index:: Index of concepts and symbol names. |
| @end menu |
| |
| @include contribute.texi |
| @include portability.texi |
| @include interface.texi |
| @include libgcc.texi |
| @include languages.texi |
| @include sourcebuild.texi |
| @include options.texi |
| @include passes.texi |
| @include poly-int.texi |
| @include generic.texi |
| @include gimple.texi |
| @include tree-ssa.texi |
| @include rtl.texi |
| @include cfg.texi |
| @include loop.texi |
| @include md.texi |
| @include tm.texi |
| @include hostconfig.texi |
| @include fragments.texi |
| @include collect2.texi |
| @include headerdirs.texi |
| @include gty.texi |
| @include plugins.texi |
| @include lto.texi |
| @include match-and-simplify.texi |
| @include analyzer.texi |
| @include ux.texi |
| |
| @include funding.texi |
| @include gnu.texi |
| @include gpl_v3.texi |
| |
| @c --------------------------------------------------------------------- |
| @c GFDL |
| @c --------------------------------------------------------------------- |
| |
| @include fdl.texi |
| |
| @include contrib.texi |
| |
| @c --------------------------------------------------------------------- |
| @c Indexes |
| @c --------------------------------------------------------------------- |
| |
| @node Option Index |
| @unnumbered Option Index |
| |
| GCC's command line options are indexed here without any initial @samp{-} |
| or @samp{--}. Where an option has both positive and negative forms |
| (such as @option{-f@var{option}} and @option{-fno-@var{option}}), |
| relevant entries in the manual are indexed under the most appropriate |
| form; it may sometimes be useful to look up both forms. |
| |
| @printindex op |
| |
| @node Concept Index |
| @unnumbered Concept Index |
| |
| @printindex cp |
| |
| @c --------------------------------------------------------------------- |
| @c Epilogue |
| @c --------------------------------------------------------------------- |
| |
| @bye |