Using and Porting GNU CC
GNU GENERAL PUBLIC LICENSE
Preamble
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
How to Apply These Terms to Your New Programs
Contributors to GNU CC
Funding Free Software
Protect Your Freedom--Fight "Look And Feel"
Compile C, C++, or Objective C
GNU CC Command Options
Option Summary
Options Controlling the Kind of Output
Compiling C++ Programs
Options Controlling C Dialect
Options Controlling C++ Dialect
Options to Request or Suppress Warnings
Options for Debugging Your Program or GNU CC
Options That Control Optimization
Options Controlling the Preprocessor
Passing Options to the Assembler
Options for Linking
Options for Directory Search
Specifying Target Machine and Compiler Version
Hardware Models and Configurations
M680x0 Options
VAX Options
SPARC Options
Convex Options
AMD29K Options
ARM Options
M88K Options
IBM RS/6000 and PowerPC Options
IBM RT Options
MIPS Options
Intel 386 Options
HPPA Options
Intel 960 Options
DEC Alpha Options
Clipper Options
H8/300 Options
Options for System V
Options for Code Generation Conventions
Environment Variables Affecting GNU CC
Running Protoize
Installing GNU CC
Configurations Supported by GNU CC
Compilation in a Separate Directory
Building and Installing a Cross-Compiler
Steps of Cross-Compilation
Configuring a Cross-Compiler
Tools and Libraries for a Cross-Compiler
`libgcc.a'
and Cross-Compilers
Cross-Compilers and Header Files
Actually Building the Cross-Compiler
Installing GNU CC on the Sun
Installing GNU CC on VMS
collect2
Standard Header File Directories
Extensions to the C Language Family
Statements and Declarations in Expressions
Locally Declared Labels
Labels as Values
Nested Functions
Constructing Function Calls
Naming an Expression's Type
Referring to a Type with
typeof
Generalized Lvalues
Conditionals with Omitted Operands
Double-Word Integers
Complex Numbers
Arrays of Length Zero
Arrays of Variable Length
Macros with Variable Numbers of Arguments
Non-Lvalue Arrays May Have Subscripts
Arithmetic on
void
- and Function-Pointers
Non-Constant Initializers
Constructor Expressions
Labeled Elements in Initializers
Case Ranges
Cast to a Union Type
Declaring Attributes of Functions
Prototypes and Old-Style Function Definitions
Dollar Signs in Identifier Names
The Character
ESC
in Constants
Inquiring on Alignment of Types or Variables
Specifying Attributes of Variables
An Inline Function is As Fast As a Macro
Assembler Instructions with C Expression Operands
Controlling Names Used in Assembler Code
Variables in Specified Registers
Defining Global Register Variables
Specifying Registers for Local Variables
Alternate Keywords
Incomplete
enum
Types
Function Names as Strings
Extensions to the C++ Language
Named Return Values in C++
Minimum and Maximum Operators in C++
goto
and Destructors in GNU C++
Declarations and Definitions in One Header
Where's the Template?
Type Abstraction using Signatures
Known Causes of Trouble with GNU CC
Actual Bugs We Haven't Fixed Yet
Installation Problems
Cross-Compiler Problems
Interoperation
Problems Compiling Certain Programs
Incompatibilities of GNU CC
Fixed Header Files
Disappointments and Misunderstandings
Common Misunderstandings with GNU C++
Declare
and
Define Static Members
Temporaries May Vanish Before You Expect
Caveats of using
protoize
Certain Changes We Don't Want to Make
Warning Messages and Error Messages
Reporting Bugs
Have You Found a Bug?
Where to Report Bugs
How to Report Bugs
Sending Patches for GNU CC
How To Get Help with GNU CC
Using GNU CC on VMS
Include Files and VMS
Global Declarations and VMS
Other VMS Issues
GNU CC and Portability
Interfacing to GNU CC Output
Passes and Files of the Compiler
RTL Representation
RTL Object Types
Access to Operands
Flags in an RTL Expression
Machine Modes
Constant Expression Types
Registers and Memory
RTL Expressions for Arithmetic
Comparison Operations
Bit Fields
Conversions
Declarations
Side Effect Expressions
Embedded Side-Effects on Addresses
Assembler Instructions as Expressions
Insns
RTL Representation of Function-Call Insns
Structure Sharing Assumptions
Reading RTL
Machine Descriptions
Everything about Instruction Patterns
Example of
define_insn
RTL Template
Output Templates and Operand Substitution
C Statements for Assembler Output
Operand Constraints
Simple Constraints
Multiple Alternative Constraints
Register Class Preferences
Constraint Modifier Characters
Constraints for Particular Machines
Not Using Constraints
Standard Pattern Names For Generation
When the Order of Patterns Matters
Interdependence of Patterns
Defining Jump Instruction Patterns
Canonicalization of Instructions
Machine-Specific Peephole Optimizers
Defining RTL Sequences for Code Generation
Defining How to Split Instructions
Instruction Attributes
Defining Attributes and their Values
Attribute Expressions
Assigning Attribute Values to Insns
Example of Attribute Specifications
Computing the Length of an Insn
Constant Attributes
Delay Slot Scheduling
Specifying Function Units
Target Description Macros
Controlling the Compilation Driver,
`gcc'
Run-time Target Specification
Storage Layout
Layout of Source Language Data Types
Register Usage
Basic Characteristics of Registers
Order of Allocation of Registers
How Values Fit in Registers
Handling Leaf Functions
Registers That Form a Stack
Obsolete Macros for Controlling Register Usage
Register Classes
Stack Layout and Calling Conventions
Basic Stack Layout
Registers That Address the Stack Frame
Eliminating Frame Pointer and Arg Pointer
Passing Function Arguments on the Stack
Passing Arguments in Registers
How Scalar Function Values Are Returned
How Large Values Are Returned
Caller-Saves Register Allocation
Function Entry and Exit
Generating Code for Profiling
Implementing the Varargs Macros
Trampolines for Nested Functions
Implicit Calls to Library Routines
Addressing Modes
Condition Code Status
Describing Relative Costs of Operations
Dividing the Output into Sections (Texts, Data, ...)
Position Independent Code
Defining the Output Assembler Language
The Overall Framework of an Assembler File
Output of Data
Output of Uninitialized Variables
Output and Generation of Labels
How Initialization Functions Are Handled
Macros Controlling Initialization Routines
Output of Assembler Instructions
Output of Dispatch Tables
Assembler Commands for Alignment
Controlling Debugging Information Format
Macros Affecting All Debugging Formats
Specific Options for DBX Output
Open-Ended Hooks for DBX Format
File Names in DBX Format
Macros for SDB and DWARF Output
Cross Compilation and Floating Point
Miscellaneous Parameters
The Configuration File
Index