Commit d0899488 by Sandra Loosemore Committed by Sandra Loosemore

standards.texi: Copy-editing for grammar, markup, and sentence flow throughout the file.

2016-01-19  Sandra Loosemore <sandra@codesourcery.com>

	gcc/
	* doc/standards.texi: Copy-editing for grammar, markup, and sentence
	flow throughout the file.  Fix broken link to Objective-C 2.0
	documentation.
	* doc/invoke.texi: More copy-editing; fix numerous typos and spelling
	errors.

From-SVN: r232583
parent 199501ea
2016-01-19 Sandra Loosemore <sandra@codesourcery.com>
* doc/standards.texi: Copy-editing for grammar, markup, and sentence
flow throughout the file. Fix broken link to Objective-C 2.0
documentation.
* doc/invoke.texi: More copy-editing; fix numerous typos and spelling
errors.
2016-01-19 Wilco Dijkstra <wdijkstr@arm.com> 2016-01-19 Wilco Dijkstra <wdijkstr@arm.com>
* ccmp.c (expand_ccmp_expr_1): Avoid spurious unused warnings. * ccmp.c (expand_ccmp_expr_1): Avoid spurious unused warnings.
......
...@@ -2742,9 +2742,9 @@ This warning is enabled by default. ...@@ -2742,9 +2742,9 @@ This warning is enabled by default.
@item -Wlto-type-mismatch @item -Wlto-type-mismatch
@opindex Wlto-type-mismatch @opindex Wlto-type-mismatch
@opindex Wno-lto-type-mistmach @opindex Wno-lto-type-mismatch
During the link-time optimization warn about type mismatches in between During the link-time optimization warn about type mismatches in
global declarations from different compilation units. global declarations from different compilation units.
Requires @option{-flto} to be enabled. Enabled by default. Requires @option{-flto} to be enabled. Enabled by default.
...@@ -3261,7 +3261,7 @@ a message which is too long to fit on a single line. ...@@ -3261,7 +3261,7 @@ a message which is too long to fit on a single line.
@item -fdiagnostics-color[=@var{WHEN}] @item -fdiagnostics-color[=@var{WHEN}]
@itemx -fno-diagnostics-color @itemx -fno-diagnostics-color
@opindex fdiagnostics-color @opindex fdiagnostics-color
@cindex highlight, color, colour @cindex highlight, color
@vindex GCC_COLORS @r{environment variable} @vindex GCC_COLORS @r{environment variable}
Use color in diagnostics. @var{WHEN} is @samp{never}, @samp{always}, Use color in diagnostics. @var{WHEN} is @samp{never}, @samp{always},
or @samp{auto}. The default depends on how the compiler has been configured, or @samp{auto}. The default depends on how the compiler has been configured,
...@@ -3346,7 +3346,7 @@ option is known to the diagnostic machinery). Specifying the ...@@ -3346,7 +3346,7 @@ option is known to the diagnostic machinery). Specifying the
@opindex fno-diagnostics-show-caret @opindex fno-diagnostics-show-caret
@opindex fdiagnostics-show-caret @opindex fdiagnostics-show-caret
By default, each diagnostic emitted includes the original source line By default, each diagnostic emitted includes the original source line
and a caret '^' indicating the column. This option suppresses this and a caret @samp{^} indicating the column. This option suppresses this
information. The source line is truncated to @var{n} characters, if information. The source line is truncated to @var{n} characters, if
the @option{-fmessage-length=n} option is given. When the output is done the @option{-fmessage-length=n} option is given. When the output is done
to the terminal, the width is limited to the width given by the to the terminal, the width is limited to the width given by the
...@@ -5049,7 +5049,7 @@ types. @option{-Wconversion-null} is enabled by default. ...@@ -5049,7 +5049,7 @@ types. @option{-Wconversion-null} is enabled by default.
@item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)} @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
@opindex Wzero-as-null-pointer-constant @opindex Wzero-as-null-pointer-constant
@opindex Wno-zero-as-null-pointer-constant @opindex Wno-zero-as-null-pointer-constant
Warn when a literal '0' is used as null pointer constant. This can Warn when a literal @samp{0} is used as null pointer constant. This can
be useful to facilitate the conversion to @code{nullptr} in C++11. be useful to facilitate the conversion to @code{nullptr} in C++11.
@item -Wsubobject-linkage @r{(C++ and Objective-C++ only)} @item -Wsubobject-linkage @r{(C++ and Objective-C++ only)}
...@@ -5878,19 +5878,19 @@ except when selective scheduling is enabled. ...@@ -5878,19 +5878,19 @@ except when selective scheduling is enabled.
@item -gsplit-dwarf @item -gsplit-dwarf
@opindex gsplit-dwarf @opindex gsplit-dwarf
Separate as much dwarf debugging information as possible into a Separate as much DWARF debugging information as possible into a
separate output file with the extension .dwo. This option allows separate output file with the extension @file{.dwo}. This option allows
the build system to avoid linking files with debug information. To the build system to avoid linking files with debug information. To
be useful, this option requires a debugger capable of reading .dwo be useful, this option requires a debugger capable of reading @file{.dwo}
files. files.
@item -gpubnames @item -gpubnames
@opindex gpubnames @opindex gpubnames
Generate dwarf .debug_pubnames and .debug_pubtypes sections. Generate DWARF @code{.debug_pubnames} and @code{.debug_pubtypes} sections.
@item -ggnu-pubnames @item -ggnu-pubnames
@opindex ggnu-pubnames @opindex ggnu-pubnames
Generate .debug_pubnames and .debug_pubtypes sections in a format Generate @code{.debug_pubnames} and @code{.debug_pubtypes} sections in a format
suitable for conversion into a GDB@ index. This option is only useful suitable for conversion into a GDB@ index. This option is only useful
with a linker that can produce GDB@ index version 7. with a linker that can produce GDB@ index version 7.
...@@ -5906,18 +5906,17 @@ and on some objects @code{.debug_types} produces larger instead of smaller ...@@ -5906,18 +5906,17 @@ and on some objects @code{.debug_types} produces larger instead of smaller
debugging information. debugging information.
@item -grecord-gcc-switches @item -grecord-gcc-switches
@item -gno-record-gcc-switches
@opindex grecord-gcc-switches @opindex grecord-gcc-switches
@opindex gno-record-gcc-switches
This switch causes the command-line options used to invoke the This switch causes the command-line options used to invoke the
compiler that may affect code generation to be appended to the compiler that may affect code generation to be appended to the
DW_AT_producer attribute in DWARF debugging information. The options DW_AT_producer attribute in DWARF debugging information. The options
are concatenated with spaces separating them from each other and from are concatenated with spaces separating them from each other and from
the compiler version. See also @option{-frecord-gcc-switches} for another the compiler version.
way of storing compiler options into the object file. This is the default. It is enabled by default.
See also @option{-frecord-gcc-switches} for another
@item -gno-record-gcc-switches way of storing compiler options into the object file.
@opindex gno-record-gcc-switches
Disallow appending command-line options to the DW_AT_producer attribute
in DWARF debugging information.
@item -gstrict-dwarf @item -gstrict-dwarf
@opindex gstrict-dwarf @opindex gstrict-dwarf
...@@ -7591,7 +7590,7 @@ The default is @samp{simple} at levels @option{-O}, @option{-Os}, and ...@@ -7591,7 +7590,7 @@ The default is @samp{simple} at levels @option{-O}, @option{-Os}, and
@opindex freorder-blocks-and-partition @opindex freorder-blocks-and-partition
In addition to reordering basic blocks in the compiled function, in order In addition to reordering basic blocks in the compiled function, in order
to reduce number of taken branches, partitions hot and cold basic blocks to reduce number of taken branches, partitions hot and cold basic blocks
into separate sections of the assembly and .o files, to improve into separate sections of the assembly and @file{.o} files, to improve
paging and cache locality performance. paging and cache locality performance.
This optimization is automatically turned off in the presence of This optimization is automatically turned off in the presence of
...@@ -7825,6 +7824,9 @@ had been part of the same translation unit. ...@@ -7825,6 +7824,9 @@ had been part of the same translation unit.
To use the link-time optimizer, @option{-flto} and optimization To use the link-time optimizer, @option{-flto} and optimization
options should be specified at compile time and during the final link. options should be specified at compile time and during the final link.
It is recommended that you compile all the files participating in the
same link with the same options and also specify those options at
link time.
For example: For example:
@smallexample @smallexample
...@@ -7855,15 +7857,15 @@ merges them together into a single GIMPLE representation and optimizes ...@@ -7855,15 +7857,15 @@ merges them together into a single GIMPLE representation and optimizes
them as usual to produce @file{myprog}. them as usual to produce @file{myprog}.
The only important thing to keep in mind is that to enable link-time The only important thing to keep in mind is that to enable link-time
optimizations you need to use the GCC driver to perform the link-step. optimizations you need to use the GCC driver to perform the link step.
GCC then automatically performs link-time optimization if any of the GCC then automatically performs link-time optimization if any of the
objects involved were compiled with the @option{-flto} command-line option. objects involved were compiled with the @option{-flto} command-line option.
You generally You generally
should specify the optimization options to be used for link-time should specify the optimization options to be used for link-time
optimization though GCC tries to be clever at guessing an optimization though GCC tries to be clever at guessing an
optimization level to use from the options used at compile-time optimization level to use from the options used at compile time
if you fail to specify one at link-time. You can always override if you fail to specify one at link time. You can always override
the automatic decision to do link-time optimization at link-time the automatic decision to do link-time optimization at link time
by passing @option{-fno-lto} to the link command. by passing @option{-fno-lto} to the link command.
To make whole program optimization effective, it is necessary to make To make whole program optimization effective, it is necessary to make
...@@ -7876,14 +7878,14 @@ the linker plugin is not available, @option{-fwhole-program} should be ...@@ -7876,14 +7878,14 @@ the linker plugin is not available, @option{-fwhole-program} should be
used to allow the compiler to make these assumptions, which leads used to allow the compiler to make these assumptions, which leads
to more aggressive optimization decisions. to more aggressive optimization decisions.
When @option{-fuse-linker-plugin} is not enabled then, when a file is When @option{-fuse-linker-plugin} is not enabled, when a file is
compiled with @option{-flto}, the generated object file is larger than compiled with @option{-flto}, the generated object file is larger than
a regular object file because it contains GIMPLE bytecodes and the usual a regular object file because it contains GIMPLE bytecodes and the usual
final code (see @option{-ffat-lto-objects}. This means that final code (see @option{-ffat-lto-objects}. This means that
object files with LTO information can be linked as normal object object files with LTO information can be linked as normal object
files; if @option{-fno-lto} is passed to the linker, no files; if @option{-fno-lto} is passed to the linker, no
interprocedural optimizations are applied. Note that when interprocedural optimizations are applied. Note that when
@option{-fno-fat-lto-objects} is enabled the compile-stage is faster @option{-fno-fat-lto-objects} is enabled the compile stage is faster
but you cannot perform a regular, non-LTO link on them. but you cannot perform a regular, non-LTO link on them.
Additionally, the optimization flags used to compile individual files Additionally, the optimization flags used to compile individual files
...@@ -7909,22 +7911,21 @@ further processing. ...@@ -7909,22 +7911,21 @@ further processing.
There are some code generation flags preserved by GCC when There are some code generation flags preserved by GCC when
generating bytecodes, as they need to be used during the final link generating bytecodes, as they need to be used during the final link
stage. Generally options specified at link-time override those stage. Generally options specified at link time override those
specified at compile-time. specified at compile time.
If you do not specify an optimization level option @option{-O} at If you do not specify an optimization level option @option{-O} at
link-time then GCC computes one based on the optimization levels link time, then GCC uses the highest optimization level
used when compiling the object files. The highest optimization used when compiling the object files.
level wins here.
Currently, the following options and their setting are take from Currently, the following options and their settings are taken from
the first object file that explicitely specified it: the first object file that explicitly specifies them:
@option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon}, @option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
@option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm} @option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
and all the @option{-m} target flags. and all the @option{-m} target flags.
Certain ABI changing flags are required to match in all compilation-units Certain ABI-changing flags are required to match in all compilation units,
and trying to override this at link-time with a conflicting value and trying to override this at link time with a conflicting value
is ignored. This includes options such as @option{-freg-struct-return} is ignored. This includes options such as @option{-freg-struct-return}
and @option{-fpcc-struct-return}. and @option{-fpcc-struct-return}.
...@@ -7933,12 +7934,8 @@ Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow}, ...@@ -7933,12 +7934,8 @@ Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
are passed through to the link stage and merged conservatively for are passed through to the link stage and merged conservatively for
conflicting translation units. Specifically conflicting translation units. Specifically
@option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take @option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
precedence and for example @option{-ffp-contract=off} takes precedence precedence; and for example @option{-ffp-contract=off} takes precedence
over @option{-ffp-contract=fast}. You can override them at linke-time. over @option{-ffp-contract=fast}. You can override them at link time.
It is recommended that you compile all the files participating in the
same link with the same options and also specify those options at
link time.
If LTO encounters objects with C linkage declared with incompatible If LTO encounters objects with C linkage declared with incompatible
types in separate translation units to be linked together (undefined types in separate translation units to be linked together (undefined
...@@ -8038,7 +8035,7 @@ the link-time optimization step directly from the WPA phase. ...@@ -8038,7 +8035,7 @@ the link-time optimization step directly from the WPA phase.
@item -flto-odr-type-merging @item -flto-odr-type-merging
@opindex flto-odr-type-merging @opindex flto-odr-type-merging
Enable streaming of mangled types names of C++ types and their unification Enable streaming of mangled types names of C++ types and their unification
at linktime. This increases size of LTO object files, but enable at link time. This increases size of LTO object files, but enables
diagnostics about One Definition Rule violations. diagnostics about One Definition Rule violations.
@item -flto-compression-level=@var{n} @item -flto-compression-level=@var{n}
...@@ -8259,7 +8256,7 @@ it might, and @option{-fno-math-errno} is the default. ...@@ -8259,7 +8256,7 @@ it might, and @option{-fno-math-errno} is the default.
Allow optimizations for floating-point arithmetic that (a) assume Allow optimizations for floating-point arithmetic that (a) assume
that arguments and results are valid and (b) may violate IEEE or that arguments and results are valid and (b) may violate IEEE or
ANSI standards. When used at link-time, it may include libraries ANSI standards. When used at link time, it may include libraries
or startup files that change the default FPU control word or other or startup files that change the default FPU control word or other
similar optimizations. similar optimizations.
...@@ -8922,7 +8919,7 @@ doing loop versioning for alias in the vectorizer. ...@@ -8922,7 +8919,7 @@ doing loop versioning for alias in the vectorizer.
@item vect-max-peeling-for-alignment @item vect-max-peeling-for-alignment
The maximum number of loop peels to enhance access alignment The maximum number of loop peels to enhance access alignment
for vectorizer. Value -1 means 'no limit'. for vectorizer. Value -1 means no limit.
@item max-iterations-to-track @item max-iterations-to-track
The maximum number of iterations of a loop the brute-force algorithm The maximum number of iterations of a loop the brute-force algorithm
...@@ -9219,7 +9216,7 @@ redundancies for loads and stores. If this limit is hit the search ...@@ -9219,7 +9216,7 @@ redundancies for loads and stores. If this limit is hit the search
is aborted and the load or store is not considered redundant. The is aborted and the load or store is not considered redundant. The
number of queries is algorithmically limited to the number of number of queries is algorithmically limited to the number of
stores on all paths from the load to the function entry. stores on all paths from the load to the function entry.
The default maxmimum number of queries is 1000. The default maximum number of queries is 1000.
@item ira-max-loops-num @item ira-max-loops-num
IRA uses regional register allocation by default. If a function IRA uses regional register allocation by default. If a function
...@@ -9261,7 +9258,7 @@ motion optimization performed on them. The default value of the ...@@ -9261,7 +9258,7 @@ motion optimization performed on them. The default value of the
parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above. parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
@item loop-max-datarefs-for-datadeps @item loop-max-datarefs-for-datadeps
Building data dapendencies is expensive for very large loops. This Building data dependencies is expensive for very large loops. This
parameter limits the number of data references in loops that are parameter limits the number of data references in loops that are
considered for data dependence analysis. These large loops are no considered for data dependence analysis. These large loops are no
handled by the optimizations using loop data dependencies. handled by the optimizations using loop data dependencies.
...@@ -9406,7 +9403,7 @@ The default value is 75. A small positive adjustment is applied for ...@@ -9406,7 +9403,7 @@ The default value is 75. A small positive adjustment is applied for
statements with memory operands as those are even more profitable so sink. statements with memory operands as those are even more profitable so sink.
@item max-stores-to-sink @item max-stores-to-sink
The maximum number of conditional stores paires that can be sunk. Set to 0 The maximum number of conditional store pairs that can be sunk. Set to 0
if either vectorization (@option{-ftree-vectorize}) or if-conversion if either vectorization (@option{-ftree-vectorize}) or if-conversion
(@option{-ftree-loop-if-convert}) is disabled. The default is 2. (@option{-ftree-loop-if-convert}) is disabled. The default is 2.
...@@ -9674,7 +9671,7 @@ out-of-bounds and use-after-free bugs. ...@@ -9674,7 +9671,7 @@ out-of-bounds and use-after-free bugs.
See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for
more details. The run-time behavior can be influenced using the more details. The run-time behavior can be influenced using the
@env{ASAN_OPTIONS} environment variable. When set to @code{help=1}, @env{ASAN_OPTIONS} environment variable. When set to @code{help=1},
the available options are shown at startup of the instrumended program. See the available options are shown at startup of the instrumented program. See
@url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags} @url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
for a list of supported options. for a list of supported options.
...@@ -9904,7 +9901,7 @@ is usable even in freestanding environments. ...@@ -9904,7 +9901,7 @@ is usable even in freestanding environments.
@item -fsanitize-coverage=trace-pc @item -fsanitize-coverage=trace-pc
@opindex fsanitize-coverage=trace-pc @opindex fsanitize-coverage=trace-pc
Enable coverage-guided fuzzing code instrumentation. Enable coverage-guided fuzzing code instrumentation.
Inserts call to __sanitizer_cov_trace_pc into every basic block. Inserts a call to @code{__sanitizer_cov_trace_pc} into every basic block.
@item -fbounds-check @item -fbounds-check
@opindex fbounds-check @opindex fbounds-check
...@@ -11765,8 +11762,8 @@ text / bss / data / heap / stack / dso start locations. ...@@ -11765,8 +11762,8 @@ text / bss / data / heap / stack / dso start locations.
@item -freport-bug @item -freport-bug
@opindex freport-bug @opindex freport-bug
Collect and dump debug information into temporary file if ICE in C/C++ Collect and dump debug information into a temporary file if an
compiler occured. internal compiler error (ICE) occurs.
@item -fdump-unnumbered @item -fdump-unnumbered
@opindex fdump-unnumbered @opindex fdump-unnumbered
...@@ -12798,7 +12795,7 @@ Do not assume that unaligned memory references are handled by the system. ...@@ -12798,7 +12795,7 @@ Do not assume that unaligned memory references are handled by the system.
@itemx -mno-omit-leaf-frame-pointer @itemx -mno-omit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer @opindex momit-leaf-frame-pointer
@opindex mno-omit-leaf-frame-pointer @opindex mno-omit-leaf-frame-pointer
Omit or keep the frame pointer in leaf functions. The former behaviour is the Omit or keep the frame pointer in leaf functions. The former behavior is the
default. default.
@item -mtls-dialect=desc @item -mtls-dialect=desc
...@@ -12983,7 +12980,7 @@ That allows code to run on hardware variants that lack these registers. ...@@ -12983,7 +12980,7 @@ That allows code to run on hardware variants that lack these registers.
@item -mprefer-short-insn-regs @item -mprefer-short-insn-regs
@opindex mprefer-short-insn-regs @opindex mprefer-short-insn-regs
Preferrentially allocate registers that allow short instruction generation. Preferentially allocate registers that allow short instruction generation.
This can result in increased instruction count, so this may either reduce or This can result in increased instruction count, so this may either reduce or
increase overall code size. increase overall code size.
...@@ -13275,31 +13272,31 @@ The following instructions are enabled: MPYW, and MPYUW. ...@@ -13275,31 +13272,31 @@ The following instructions are enabled: MPYW, and MPYUW.
@item 2 @item 2
@opindex wlh1 @opindex wlh1
The multiply option is set to wlh1: 32x32 multiplier, fully The multiply option is set to wlh1: 32x32 multiplier, fully
pipelined (1 stage). The following instructions are additionaly pipelined (1 stage). The following instructions are additionally
enabled: MPY, MPYU, MPYM, MPYMU, and MPY_S. enabled: MPY, MPYU, MPYM, MPYMU, and MPY_S.
@item 3 @item 3
@opindex wlh2 @opindex wlh2
The multiply option is set to wlh2: 32x32 multiplier, fully pipelined The multiply option is set to wlh2: 32x32 multiplier, fully pipelined
(2 stages). The following instructions are additionaly enabled: MPY, (2 stages). The following instructions are additionally enabled: MPY,
MPYU, MPYM, MPYMU, and MPY_S. MPYU, MPYM, MPYMU, and MPY_S.
@item 4 @item 4
@opindex wlh3 @opindex wlh3
The multiply option is set to wlh3: Two 16x16 multiplier, blocking, The multiply option is set to wlh3: Two 16x16 multiplier, blocking,
sequential. The following instructions are additionaly enabled: MPY, sequential. The following instructions are additionally enabled: MPY,
MPYU, MPYM, MPYMU, and MPY_S. MPYU, MPYM, MPYMU, and MPY_S.
@item 5 @item 5
@opindex wlh4 @opindex wlh4
The multiply option is set to wlh4: One 16x16 multiplier, blocking, The multiply option is set to wlh4: One 16x16 multiplier, blocking,
sequential. The following instructions are additionaly enabled: MPY, sequential. The following instructions are additionally enabled: MPY,
MPYU, MPYM, MPYMU, and MPY_S. MPYU, MPYM, MPYMU, and MPY_S.
@item 6 @item 6
@opindex wlh5 @opindex wlh5
The multiply option is set to wlh5: One 32x4 multiplier, blocking, The multiply option is set to wlh5: One 32x4 multiplier, blocking,
sequential. The following instructions are additionaly enabled: MPY, sequential. The following instructions are additionally enabled: MPY,
MPYU, MPYM, MPYMU, and MPY_S. MPYU, MPYM, MPYMU, and MPY_S.
@end table @end table
...@@ -13521,7 +13518,7 @@ Indicate target register priority for r0..r3 / r12..r15. ...@@ -13521,7 +13518,7 @@ Indicate target register priority for r0..r3 / r12..r15.
@item -mlra-priority-noncompact @item -mlra-priority-noncompact
@opindex mlra-priority-noncompact @opindex mlra-priority-noncompact
Reduce target regsiter priority for r0..r3 / r12..r15. Reduce target register priority for r0..r3 / r12..r15.
@item -mno-millicode @item -mno-millicode
@opindex mno-millicode @opindex mno-millicode
...@@ -14307,7 +14304,7 @@ the compiler and are subject to some limitations: ...@@ -14307,7 +14304,7 @@ the compiler and are subject to some limitations:
The compiler never sets @code{EIND}. The compiler never sets @code{EIND}.
@item @item
The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP} The compiler uses @code{EIND} implicitly in @code{EICALL}/@code{EIJMP}
instructions or might read @code{EIND} directly in order to emulate an instructions or might read @code{EIND} directly in order to emulate an
indirect call/jump by means of a @code{RET} instruction. indirect call/jump by means of a @code{RET} instruction.
...@@ -16476,7 +16473,7 @@ to 64 bits. These are HP-UX specific flags. ...@@ -16476,7 +16473,7 @@ to 64 bits. These are HP-UX specific flags.
(Dis/En)able data speculative scheduling before reload. (Dis/En)able data speculative scheduling before reload.
This results in generation of @code{ld.a} instructions and This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}). the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default is 'disable'. The default setting is disabled.
@item -msched-ar-data-spec @item -msched-ar-data-spec
@itemx -mno-sched-ar-data-spec @itemx -mno-sched-ar-data-spec
...@@ -16485,7 +16482,7 @@ The default is 'disable'. ...@@ -16485,7 +16482,7 @@ The default is 'disable'.
(En/Dis)able data speculative scheduling after reload. (En/Dis)able data speculative scheduling after reload.
This results in generation of @code{ld.a} instructions and This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}). the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default is 'enable'. The default setting is enabled.
@item -mno-sched-control-spec @item -mno-sched-control-spec
@itemx -msched-control-spec @itemx -msched-control-spec
...@@ -16495,7 +16492,7 @@ The default is 'enable'. ...@@ -16495,7 +16492,7 @@ The default is 'enable'.
available only during region scheduling (i.e.@: before reload). available only during region scheduling (i.e.@: before reload).
This results in generation of the @code{ld.s} instructions and This results in generation of the @code{ld.s} instructions and
the corresponding check instructions @code{chk.s}. the corresponding check instructions @code{chk.s}.
The default is 'disable'. The default setting is disabled.
@item -msched-br-in-data-spec @item -msched-br-in-data-spec
@itemx -mno-sched-br-in-data-spec @itemx -mno-sched-br-in-data-spec
...@@ -16504,7 +16501,7 @@ The default is 'disable'. ...@@ -16504,7 +16501,7 @@ The default is 'disable'.
(En/Dis)able speculative scheduling of the instructions that (En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads before reload. are dependent on the data speculative loads before reload.
This is effective only with @option{-msched-br-data-spec} enabled. This is effective only with @option{-msched-br-data-spec} enabled.
The default is 'enable'. The default setting is enabled.
@item -msched-ar-in-data-spec @item -msched-ar-in-data-spec
@itemx -mno-sched-ar-in-data-spec @itemx -mno-sched-ar-in-data-spec
...@@ -16513,7 +16510,7 @@ The default is 'enable'. ...@@ -16513,7 +16510,7 @@ The default is 'enable'.
(En/Dis)able speculative scheduling of the instructions that (En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads after reload. are dependent on the data speculative loads after reload.
This is effective only with @option{-msched-ar-data-spec} enabled. This is effective only with @option{-msched-ar-data-spec} enabled.
The default is 'enable'. The default setting is enabled.
@item -msched-in-control-spec @item -msched-in-control-spec
@itemx -mno-sched-in-control-spec @itemx -mno-sched-in-control-spec
...@@ -16522,7 +16519,7 @@ The default is 'enable'. ...@@ -16522,7 +16519,7 @@ The default is 'enable'.
(En/Dis)able speculative scheduling of the instructions that (En/Dis)able speculative scheduling of the instructions that
are dependent on the control speculative loads. are dependent on the control speculative loads.
This is effective only with @option{-msched-control-spec} enabled. This is effective only with @option{-msched-control-spec} enabled.
The default is 'enable'. The default setting is enabled.
@item -mno-sched-prefer-non-data-spec-insns @item -mno-sched-prefer-non-data-spec-insns
@itemx -msched-prefer-non-data-spec-insns @itemx -msched-prefer-non-data-spec-insns
...@@ -16531,7 +16528,7 @@ The default is 'enable'. ...@@ -16531,7 +16528,7 @@ The default is 'enable'.
If enabled, data-speculative instructions are chosen for schedule If enabled, data-speculative instructions are chosen for schedule
only if there are no other choices at the moment. This makes only if there are no other choices at the moment. This makes
the use of the data speculation much more conservative. the use of the data speculation much more conservative.
The default is 'disable'. The default setting is disabled.
@item -mno-sched-prefer-non-control-spec-insns @item -mno-sched-prefer-non-control-spec-insns
@itemx -msched-prefer-non-control-spec-insns @itemx -msched-prefer-non-control-spec-insns
...@@ -16540,7 +16537,7 @@ The default is 'disable'. ...@@ -16540,7 +16537,7 @@ The default is 'disable'.
If enabled, control-speculative instructions are chosen for schedule If enabled, control-speculative instructions are chosen for schedule
only if there are no other choices at the moment. This makes only if there are no other choices at the moment. This makes
the use of the control speculation much more conservative. the use of the control speculation much more conservative.
The default is 'disable'. The default setting is disabled.
@item -mno-sched-count-spec-in-critical-path @item -mno-sched-count-spec-in-critical-path
@itemx -msched-count-spec-in-critical-path @itemx -msched-count-spec-in-critical-path
...@@ -16549,7 +16546,7 @@ The default is 'disable'. ...@@ -16549,7 +16546,7 @@ The default is 'disable'.
If enabled, speculative dependencies are considered during If enabled, speculative dependencies are considered during
computation of the instructions priorities. This makes the use of the computation of the instructions priorities. This makes the use of the
speculation a bit more conservative. speculation a bit more conservative.
The default is 'disable'. The default setting is disabled.
@item -msched-spec-ldc @item -msched-spec-ldc
@opindex msched-spec-ldc @opindex msched-spec-ldc
...@@ -18512,7 +18509,7 @@ to undefined behavior. ...@@ -18512,7 +18509,7 @@ to undefined behavior.
@opindex mrelax-pic-calls @opindex mrelax-pic-calls
Try to turn PIC calls that are normally dispatched via register Try to turn PIC calls that are normally dispatched via register
@code{$25} into direct calls. This is only possible if the linker can @code{$25} into direct calls. This is only possible if the linker can
resolve the destination at link-time and if the destination is within resolve the destination at link time and if the destination is within
range for a direct call. range for a direct call.
@option{-mrelax-pic-calls} is the default if GCC was configured to use @option{-mrelax-pic-calls} is the default if GCC was configured to use
...@@ -18796,7 +18793,7 @@ This option is also passed on to the assembler. ...@@ -18796,7 +18793,7 @@ This option is also passed on to the assembler.
This option enables or disables warnings about conflicts between the This option enables or disables warnings about conflicts between the
MCU name specified by the @option{-mmcu} option and the ISA set by the MCU name specified by the @option{-mmcu} option and the ISA set by the
@option{-mcpu} option and/or the hardware multiply support set by the @option{-mcpu} option and/or the hardware multiply support set by the
@option{-mhwmult} option. It also toggles warnings about unrecognised @option{-mhwmult} option. It also toggles warnings about unrecognized
MCU names. This option is on by default. MCU names. This option is on by default.
@item -mcpu= @item -mcpu=
...@@ -18834,7 +18831,7 @@ for the original 16-bit-only multiply supported by early MCUs. ...@@ -18834,7 +18831,7 @@ for the original 16-bit-only multiply supported by early MCUs.
A value of @samp{auto} can also be given. This tells GCC to deduce A value of @samp{auto} can also be given. This tells GCC to deduce
the hardware multiply support based upon the MCU name provided by the the hardware multiply support based upon the MCU name provided by the
@option{-mmcu} option. If no @option{-mmcu} option is specified or if @option{-mmcu} option. If no @option{-mmcu} option is specified or if
the MCU name is not recognised then no hardware multiply support is the MCU name is not recognized then no hardware multiply support is
assumed. @code{auto} is the default setting. assumed. @code{auto} is the default setting.
Hardware multiplies are normally performed by calling a library Hardware multiplies are normally performed by calling a library
...@@ -18863,8 +18860,8 @@ do not have one of the @code{lower}, @code{upper}, @code{either} or ...@@ -18863,8 +18860,8 @@ do not have one of the @code{lower}, @code{upper}, @code{either} or
@code{upper}, @code{either} or @code{any}. The first three behave @code{upper}, @code{either} or @code{any}. The first three behave
like the corresponding attribute. The fourth possible value - like the corresponding attribute. The fourth possible value -
@code{any} - is the default. It leaves placement entirely up to the @code{any} - is the default. It leaves placement entirely up to the
linker script and how it assigns the standard sections (.text, .data linker script and how it assigns the standard sections
etc) to the memory regions. (@code{.text}, @code{.data}, etc) to the memory regions.
@item -msilicon-errata= @item -msilicon-errata=
@opindex msilicon-errata @opindex msilicon-errata
...@@ -19018,14 +19015,14 @@ compiled with the same @option{-G} setting. ...@@ -19018,14 +19015,14 @@ compiled with the same @option{-G} setting.
Generate GP-relative accesses for all data objects in the program. If you Generate GP-relative accesses for all data objects in the program. If you
use this option, the entire data and BSS segments use this option, the entire data and BSS segments
of your program must fit in 64K of memory and you must use an appropriate of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressible range of the linker script to allocate them within the addressable range of the
global pointer. global pointer.
@item all @item all
Generate GP-relative addresses for function pointers as well as data Generate GP-relative addresses for function pointers as well as data
pointers. If you use this option, the entire text, data, and BSS segments pointers. If you use this option, the entire text, data, and BSS segments
of your program must fit in 64K of memory and you must use an appropriate of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressible range of the linker script to allocate them within the addressable range of the
global pointer. global pointer.
@end table @end table
...@@ -19539,11 +19536,11 @@ support to use, unless this is overridden by an explicit ...@@ -19539,11 +19536,11 @@ support to use, unless this is overridden by an explicit
@option{-mmul=none} option on the command line. Thus specifying @option{-mmul=none} option on the command line. Thus specifying
@option{-mcpu=g13} enables the use of the G13 hardware multiply @option{-mcpu=g13} enables the use of the G13 hardware multiply
peripheral and specifying @option{-mcpu=g10} disables the use of peripheral and specifying @option{-mcpu=g10} disables the use of
hardware multipications altogether. hardware multiplications altogether.
Note, although the RL78/G14 core is the default target, specifying Note, although the RL78/G14 core is the default target, specifying
@option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does @option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does
change the behaviour of the toolchain since it also enables G14 change the behavior of the toolchain since it also enables G14
hardware multiply support. If these options are not specified on the hardware multiply support. If these options are not specified on the
command line then software multiplication routines will be used even command line then software multiplication routines will be used even
though the code targets the RL78 core. This is for backwards though the code targets the RL78 core. This is for backwards
...@@ -19762,7 +19759,7 @@ the AltiVec instruction set. You may also need to set ...@@ -19762,7 +19759,7 @@ the AltiVec instruction set. You may also need to set
enhancements. enhancements.
When @option{-maltivec} is used, rather than @option{-maltivec=le} or When @option{-maltivec} is used, rather than @option{-maltivec=le} or
@option{-maltivec=be}, the element order for Altivec intrinsics such @option{-maltivec=be}, the element order for AltiVec intrinsics such
as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert}
match array element order corresponding to the endianness of the match array element order corresponding to the endianness of the
target. That is, element zero identifies the leftmost element in a target. That is, element zero identifies the leftmost element in a
...@@ -19772,23 +19769,23 @@ little-endian platform. ...@@ -19772,23 +19769,23 @@ little-endian platform.
@item -maltivec=be @item -maltivec=be
@opindex maltivec=be @opindex maltivec=be
Generate Altivec instructions using big-endian element order, Generate AltiVec instructions using big-endian element order,
regardless of whether the target is big- or little-endian. This is regardless of whether the target is big- or little-endian. This is
the default when targeting a big-endian platform. the default when targeting a big-endian platform.
The element order is used to interpret element numbers in Altivec The element order is used to interpret element numbers in AltiVec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}. By default, these match array element order @code{vec_insert}. By default, these match array element order
corresponding to the endianness for the target. corresponding to the endianness for the target.
@item -maltivec=le @item -maltivec=le
@opindex maltivec=le @opindex maltivec=le
Generate Altivec instructions using little-endian element order, Generate AltiVec instructions using little-endian element order,
regardless of whether the target is big- or little-endian. This is regardless of whether the target is big- or little-endian. This is
the default when targeting a little-endian platform. This option is the default when targeting a little-endian platform. This option is
currently ignored when targeting a big-endian platform. currently ignored when targeting a big-endian platform.
The element order is used to interpret element numbers in Altivec The element order is used to interpret element numbers in AltiVec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}. By default, these match array element order @code{vec_insert}. By default, these match array element order
corresponding to the endianness for the target. corresponding to the endianness for the target.
...@@ -21133,7 +21130,7 @@ define vector type variables and arguments. @samp{vector} is only ...@@ -21133,7 +21130,7 @@ define vector type variables and arguments. @samp{vector} is only
available when GNU extensions are enabled. It will not be expanded available when GNU extensions are enabled. It will not be expanded
when requesting strict standard compliance e.g. with @option{-std=c99}. when requesting strict standard compliance e.g. with @option{-std=c99}.
In addition to the GCC low-level builtins @option{-mzvector} enables In addition to the GCC low-level builtins @option{-mzvector} enables
a set of builtins added for compatibility with Altivec-style a set of builtins added for compatibility with AltiVec-style
implementations like Power and Cell. In order to make use of these implementations like Power and Cell. In order to make use of these
builtins the header file @file{vecintrin.h} needs to be included. builtins the header file @file{vecintrin.h} needs to be included.
@option{-mzvector} is disabled by default. @option{-mzvector} is disabled by default.
...@@ -21487,7 +21484,7 @@ Control the IEEE compliance of floating-point comparisons, which affects the ...@@ -21487,7 +21484,7 @@ Control the IEEE compliance of floating-point comparisons, which affects the
handling of cases where the result of a comparison is unordered. By default handling of cases where the result of a comparison is unordered. By default
@option{-mieee} is implicitly enabled. If @option{-ffinite-math-only} is @option{-mieee} is implicitly enabled. If @option{-ffinite-math-only} is
enabled @option{-mno-ieee} is implicitly set, which results in faster enabled @option{-mno-ieee} is implicitly set, which results in faster
floating-point greater-equal and less-equal comparisons. The implcit settings floating-point greater-equal and less-equal comparisons. The implicit settings
can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}. can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.
@item -minline-ic_invalidate @item -minline-ic_invalidate
...@@ -24176,9 +24173,9 @@ privileges, isn't available. ...@@ -24176,9 +24173,9 @@ privileges, isn't available.
@item -fwritable-relocated-rdata @item -fwritable-relocated-rdata
@opindex fno-writable-relocated-rdata @opindex fno-writable-relocated-rdata
This option is available for MinGW and Cygwin targets. It specifies This option is available for MinGW and Cygwin targets. It specifies
that relocated-data in read-only section is put into .data that relocated-data in read-only section is put into the @code{.data}
section. This is a necessary for older runtimes not supporting section. This is a necessary for older runtimes not supporting
modification of .rdata sections for pseudo-relocation. modification of @code{.rdata} sections for pseudo-relocation.
@item -mpe-aligned-commons @item -mpe-aligned-commons
@opindex mpe-aligned-commons @opindex mpe-aligned-commons
...@@ -24342,7 +24339,7 @@ strings to control their behavior. The spec strings built into GCC can ...@@ -24342,7 +24339,7 @@ strings to control their behavior. The spec strings built into GCC can
be overridden by using the @option{-specs=} command-line switch to specify be overridden by using the @option{-specs=} command-line switch to specify
a spec file. a spec file.
@dfn{Spec files} are plaintext files that are used to construct spec @dfn{Spec files} are plain-text files that are used to construct spec
strings. They consist of a sequence of directives separated by blank strings. They consist of a sequence of directives separated by blank
lines. The type of directive is determined by the first non-whitespace lines. The type of directive is determined by the first non-whitespace
character on the line, which can be one of the following: character on the line, which can be one of the following:
......
...@@ -50,9 +50,6 @@ with some exceptions, and possibly with some extensions. ...@@ -50,9 +50,6 @@ with some exceptions, and possibly with some extensions.
@cindex hosted environment @cindex hosted environment
@findex __STDC_HOSTED__ @findex __STDC_HOSTED__
GCC supports three versions of the C standard, although support for
the most recent version is not yet complete.
@opindex std @opindex std
@opindex ansi @opindex ansi
@opindex pedantic @opindex pedantic
...@@ -62,10 +59,12 @@ published in 1990. This standard was ratified as an ISO standard ...@@ -62,10 +59,12 @@ published in 1990. This standard was ratified as an ISO standard
(ISO/IEC 9899:1990) later in 1990. There were no technical (ISO/IEC 9899:1990) later in 1990. There were no technical
differences between these publications, although the sections of the differences between these publications, although the sections of the
ANSI standard were renumbered and became clauses in the ISO standard. ANSI standard were renumbered and became clauses in the ISO standard.
This standard, in both its forms, is commonly known as @dfn{C89}, or The ANSI
occasionally as @dfn{C90}, from the dates of ratification. The ANSI
standard, but not the ISO standard, also came with a Rationale standard, but not the ISO standard, also came with a Rationale
document. To select this standard in GCC, use one of the options document.
This standard, in both its forms, is commonly known as @dfn{C89}, or
occasionally as @dfn{C90}, from the dates of ratification.
To select this standard in GCC, use one of the options
@option{-ansi}, @option{-std=c90} or @option{-std=iso9899:1990}; to obtain @option{-ansi}, @option{-std=c90} or @option{-std=iso9899:1990}; to obtain
all the diagnostics required by the standard, you should also specify all the diagnostics required by the standard, you should also specify
@option{-pedantic} (or @option{-pedantic-errors} if you want them to be @option{-pedantic} (or @option{-pedantic-errors} if you want them to be
...@@ -85,35 +84,40 @@ as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or ...@@ -85,35 +84,40 @@ as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or
@option{-pedantic} to receive all required diagnostics). @option{-pedantic} to receive all required diagnostics).
A new edition of the ISO C standard was published in 1999 as ISO/IEC A new edition of the ISO C standard was published in 1999 as ISO/IEC
9899:1999, and is commonly known as @dfn{C99}. GCC has substantially 9899:1999, and is commonly known as @dfn{C99}. (While in
development, drafts of this standard version were referred to as
@dfn{C9X}.) GCC has substantially
complete support for this standard version; see complete support for this standard version; see
@uref{http://gcc.gnu.org/c99status.html} for details. To select this @uref{http://gcc.gnu.org/c99status.html} for details. To select this
standard, use @option{-std=c99} or @option{-std=iso9899:1999}. (While in standard, use @option{-std=c99} or @option{-std=iso9899:1999}.
development, drafts of this standard version were referred to as
@dfn{C9X}.)
Errors in the 1999 ISO C standard were corrected in three Technical Errors in the 1999 ISO C standard were corrected in three Technical
Corrigenda published in 2001, 2004 and 2007. GCC does not support the Corrigenda published in 2001, 2004 and 2007. GCC does not support the
uncorrected version. uncorrected version.
A fourth version of the C standard, known as @dfn{C11}, was published A fourth version of the C standard, known as @dfn{C11}, was published
in 2011 as ISO/IEC 9899:2011. GCC has substantially complete support in 2011 as ISO/IEC 9899:2011. (While in development, drafts of this
for this standard, enabled with @option{-std=c11} or
@option{-std=iso9899:2011}. (While in development, drafts of this
standard version were referred to as @dfn{C1X}.) standard version were referred to as @dfn{C1X}.)
GCC has substantially complete support
for this standard, enabled with @option{-std=c11} or
@option{-std=iso9899:2011}.
By default, GCC provides some extensions to the C language that on By default, GCC provides some extensions to the C language that, on
rare occasions conflict with the C standard. @xref{C rare occasions conflict with the C standard. @xref{C
Extensions,,Extensions to the C Language Family}. Use of the Extensions,,Extensions to the C Language Family}.
Some features that are part of the C99 standard
are accepted as extensions in C90 mode, and some features that are part
of the C11 standard are accepted as extensions in C90 and C99 modes.
Use of the
@option{-std} options listed above disables these extensions where @option{-std} options listed above disables these extensions where
they conflict with the C standard version selected. You may also they conflict with the C standard version selected. You may also
select an extended version of the C language explicitly with select an extended version of the C language explicitly with
@option{-std=gnu90} (for C90 with GNU extensions), @option{-std=gnu99} @option{-std=gnu90} (for C90 with GNU extensions), @option{-std=gnu99}
(for C99 with GNU extensions) or @option{-std=gnu11} (for C11 with GNU (for C99 with GNU extensions) or @option{-std=gnu11} (for C11 with GNU
extensions). The default, if no C language dialect options are given, extensions).
is @option{-std=gnu11}. Some features that are part of the C99 standard
are accepted as extensions in C90 mode, and some features that are part The default, if no C language dialect options are given,
of the C11 standard are accepted as extensions in C90 and C99 modes. is @option{-std=gnu11}.
The ISO C standard defines (in clause 4) two classes of conforming The ISO C standard defines (in clause 4) two classes of conforming
implementation. A @dfn{conforming hosted implementation} supports the implementation. A @dfn{conforming hosted implementation} supports the
...@@ -124,28 +128,30 @@ library facilities: those in @code{<float.h>}, @code{<limits.h>}, ...@@ -124,28 +128,30 @@ library facilities: those in @code{<float.h>}, @code{<limits.h>},
@code{<iso646.h>}; since C99, also those in @code{<stdbool.h>} and @code{<iso646.h>}; since C99, also those in @code{<stdbool.h>} and
@code{<stdint.h>}; and since C11, also those in @code{<stdalign.h>} @code{<stdint.h>}; and since C11, also those in @code{<stdalign.h>}
and @code{<stdnoreturn.h>}. In addition, complex types, added in C99, are not and @code{<stdnoreturn.h>}. In addition, complex types, added in C99, are not
required for freestanding implementations. The standard also defines required for freestanding implementations.
two environments for programs, a @dfn{freestanding environment},
required of all implementations and which may not have library The standard also defines two environments for programs, a
facilities beyond those required of freestanding implementations, @dfn{freestanding environment}, required of all implementations and
where the handling of program startup and termination are which may not have library facilities beyond those required of
implementation-defined, and a @dfn{hosted environment}, which is not freestanding implementations, where the handling of program startup
required, in which all the library facilities are provided and startup and termination are implementation-defined; and a @dfn{hosted
is through a function @code{int main (void)} or @code{int main (int, environment}, which is not required, in which all the library
char *[])}. An OS kernel would be a freestanding environment; a facilities are provided and startup is through a function @code{int
program using the facilities of an operating system would normally be main (void)} or @code{int main (int, char *[])}. An OS kernel is an example
in a hosted implementation. of a program running in a freestanding environment;
a program using the facilities of an
operating system is an example of a program running in a hosted environment.
@opindex ffreestanding @opindex ffreestanding
GCC aims towards being usable as a conforming freestanding GCC aims towards being usable as a conforming freestanding
implementation, or as the compiler for a conforming hosted implementation, or as the compiler for a conforming hosted
implementation. By default, it will act as the compiler for a hosted implementation. By default, it acts as the compiler for a hosted
implementation, defining @code{__STDC_HOSTED__} as @code{1} and implementation, defining @code{__STDC_HOSTED__} as @code{1} and
presuming that when the names of ISO C functions are used, they have presuming that when the names of ISO C functions are used, they have
the semantics defined in the standard. To make it act as a conforming the semantics defined in the standard. To make it act as a conforming
freestanding implementation for a freestanding environment, use the freestanding implementation for a freestanding environment, use the
option @option{-ffreestanding}; it will then define option @option{-ffreestanding}; it then defines
@code{__STDC_HOSTED__} to @code{0} and not make assumptions about the @code{__STDC_HOSTED__} to @code{0} and does not make assumptions about the
meanings of function names from the standard library, with exceptions meanings of function names from the standard library, with exceptions
noted below. To build an OS kernel, you may well still need to make noted below. To build an OS kernel, you may well still need to make
your own arrangements for linking and startup. your own arrangements for linking and startup.
...@@ -153,8 +159,9 @@ your own arrangements for linking and startup. ...@@ -153,8 +159,9 @@ your own arrangements for linking and startup.
GCC does not provide the library facilities required only of hosted GCC does not provide the library facilities required only of hosted
implementations, nor yet all the facilities required by C99 of implementations, nor yet all the facilities required by C99 of
freestanding implementations on all platforms; to use the facilities of a hosted freestanding implementations on all platforms.
environment, you will need to find them elsewhere (for example, in the To use the facilities of a hosted
environment, you need to find them elsewhere (for example, in the
GNU C library). @xref{Standard Libraries,,Standard Libraries}. GNU C library). @xref{Standard Libraries,,Standard Libraries}.
Most of the compiler support routines used by GCC are present in Most of the compiler support routines used by GCC are present in
...@@ -162,7 +169,7 @@ Most of the compiler support routines used by GCC are present in ...@@ -162,7 +169,7 @@ Most of the compiler support routines used by GCC are present in
freestanding environment provide @code{memcpy}, @code{memmove}, freestanding environment provide @code{memcpy}, @code{memmove},
@code{memset} and @code{memcmp}. @code{memset} and @code{memcmp}.
Finally, if @code{__builtin_trap} is used, and the target does Finally, if @code{__builtin_trap} is used, and the target does
not implement the @code{trap} pattern, then GCC will emit a call not implement the @code{trap} pattern, then GCC emits a call
to @code{abort}. to @code{abort}.
For references to Technical Corrigenda, Rationale documents and For references to Technical Corrigenda, Rationale documents and
...@@ -225,7 +232,9 @@ select an extended version of the C++ language explicitly with ...@@ -225,7 +232,9 @@ select an extended version of the C++ language explicitly with
@option{-std=gnu++98} (for C++98 with GNU extensions), or @option{-std=gnu++98} (for C++98 with GNU extensions), or
@option{-std=gnu++11} (for C++11 with GNU extensions), or @option{-std=gnu++11} (for C++11 with GNU extensions), or
@option{-std=gnu++14} (for C++14 with GNU extensions), or @option{-std=gnu++14} (for C++14 with GNU extensions), or
@option{-std=gnu++1z} (for C++1z with GNU extensions). The default, if @option{-std=gnu++1z} (for C++1z with GNU extensions).
The default, if
no C++ language dialect options are given, is @option{-std=gnu++14}. no C++ language dialect options are given, is @option{-std=gnu++14}.
@section Objective-C and Objective-C++ Languages @section Objective-C and Objective-C++ Languages
...@@ -251,34 +260,32 @@ works with the Apple/NeXT Objective-C runtime library. ...@@ -251,34 +260,32 @@ works with the Apple/NeXT Objective-C runtime library.
There is no formal written standard for Objective-C or Objective-C++@. There is no formal written standard for Objective-C or Objective-C++@.
The authoritative manual on traditional Objective-C (1.0) is The authoritative manual on traditional Objective-C (1.0) is
``Object-Oriented Programming and the Objective-C Language'', ``Object-Oriented Programming and the Objective-C Language'':
available at a number of web sites:
@itemize @itemize
@item @item
@uref{http://www.gnustep.org/@/resources/@/documentation/@/ObjectivCBook.pdf} @uref{http://www.gnustep.org/@/resources/@/documentation/@/ObjectivCBook.pdf}
is the original NeXTstep document; is the original NeXTstep document;
@item @item
@uref{http://objc.toodarkpark.net} @uref{http://objc.toodarkpark.net}
is the same document in another format; is the same document in another format.
@item
@uref{http://developer.apple.com/@/mac/@/library/@/documentation/@/Cocoa/@/Conceptual/@/ObjectiveC/}
has an updated version but make sure you search for ``Object Oriented Programming and the Objective-C Programming Language 1.0'',
not documentation on the newer ``Objective-C 2.0'' language
@end itemize @end itemize
The Objective-C exception and synchronization syntax (that is, the The Objective-C exception and synchronization syntax (that is, the
keywords @@try, @@throw, @@catch, @@finally and @@synchronized) is keywords @code{@@try}, @code{@@throw}, @code{@@catch},
@code{@@finally} and @code{@@synchronized}) is
supported by GCC and is enabled with the option supported by GCC and is enabled with the option
@option{-fobjc-exceptions}. The syntax is briefly documented in this @option{-fobjc-exceptions}. The syntax is briefly documented in this
manual and in the Objective-C 2.0 manuals from Apple. manual and in the Objective-C 2.0 manuals from Apple.
The Objective-C 2.0 language extensions and features are automatically The Objective-C 2.0 language extensions and features are automatically
enabled; they include properties (via the @@property, @@synthesize and enabled; they include properties (via the @code{@@property},
@@dynamic keywords), fast enumeration (not available in @code{@@synthesize} and
Objective-C++), attributes for methods (such as deprecated, noreturn, @code{@@dynamic keywords}), fast enumeration (not available in
sentinel, format), the unused attribute for method arguments, the Objective-C++), attributes for methods (such as @code{deprecated},
@@package keyword for instance variables and the @@optional and @code{noreturn}, @code{sentinel}, @code{format}),
@@required keywords in protocols. You can disable all these the @code{unused} attribute for method arguments, the
@code{@@package} keyword for instance variables and the @code{@@optional} and
@code{@@required} keywords in protocols. You can disable all these
Objective-C 2.0 language extensions with the option Objective-C 2.0 language extensions with the option
@option{-fobjc-std=objc1}, which causes the compiler to recognize the @option{-fobjc-std=objc1}, which causes the compiler to recognize the
same Objective-C language syntax recognized by GCC 4.0, and to produce same Objective-C language syntax recognized by GCC 4.0, and to produce
...@@ -289,7 +296,7 @@ GCC has currently no support for non-fragile instance variables. ...@@ -289,7 +296,7 @@ GCC has currently no support for non-fragile instance variables.
The authoritative manual on Objective-C 2.0 is available from Apple: The authoritative manual on Objective-C 2.0 is available from Apple:
@itemize @itemize
@item @item
@uref{http://developer.apple.com/@/mac/@/library/@/documentation/@/Cocoa/@/Conceptual/@/ObjectiveC/} @uref{https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html}
@end itemize @end itemize
For more information concerning the history of Objective-C that is For more information concerning the history of Objective-C that is
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment