The Darwin target options documentation was a bit of a mess, with several
undocumented options, some that were listed in the option summary or mentioned
in discussion of other options but not actually documented, and a large
number of options listed in darwin.opt as being obsolete.
I've undocumented all the obsolete options to streamline things, plus a few
others that seem to have been intentially undocumented or supplanted by
other options. For the others that were probably supposed to documented,
I did my best to guess what they're for by reading the code or just
copying the documentation string in the .opt file, but it's certainly
possible I screwed some up.
gcc/ChangeLog
PR other/122243
* config/darwin.opt (findirect-virtual-calls): Mark as Undocumented.
(fterminated-vtables): Likewise.
(multi_module): Likewise.
(multiply_defined): Likewise.
(multiply_defined_unused): Likewise.
(no_dead_strip_inits_and_terms): Likewise.
(noprefixbinding): Likewise.
(nomultidefs): Likewise.
(noprebind): Likewise.
(noseglinkedit): Likewise.
(ObjC, ObjC++): Add documentation strings.
(object): Mark as Undocumented.
(prebind): Likewise.
(prebind_all_twolevel_modules): Likewise.
(private_bundle): Likewise.
(sectobjectsymbols): Likewise.
(sectorder): Likewise.
(seg_addr_table_filename): Likewise.
(segcreate): Likewise.
(seglinkedit): Likewise.
(single_module): Likewise.
(X): Likewise.
(y): Likewise.
(Mach): Likewise.
* doc/invoke.texi (Option Summary) <Darwin Options>: Improve
alphabetization of the list. Remove obsolete/undocumented
options and add missing entries.
(Darwin Options): Add documentation for -arch, -dependency-file,
-fapple-kext, -matt-stubs, -fconstant-cfstrings, -mdynamic-no-pic,
-asm_macosx_version_min, -msymbol-stubs, -mtarget-linker,
-ObjC, -ObjC++, -Wnonportable-cfstrings. Update the list
of options passed to the linker to remove obsolete options
and add missing ones; also move the block of @opindex entries
before the list items instead of putting it in the middle.
---
gcc/config/darwin.opt | 53 ++++----
gcc/doc/invoke.texi | 300 ++++++++++++++++++++++++------------------
2 files changed, 202 insertions(+), 151 deletions(-)
diff --git a/gcc/config/darwin.opt b/gcc/config/darwin.opt
index e275d846cd1..d6e6271f9cf 100644
--- a/gcc/config/darwin.opt
+++ b/gcc/config/darwin.opt
@@ -169,8 +169,9 @@ filelist
Driver RejectNegative Separate
Supply a list of objects to be linked from a file, rather than the command
line.
+; specs turn this into fapple-kext.
findirect-virtual-calls
-Driver RejectNegative
+Driver RejectNegative Undocumented
Used for generating code for some older kernel revisions.
flat_namespace
@@ -189,8 +190,9 @@ framework
Driver RejectNegative Separate
-framework <name> The linker should search for the framework <name> in
the framework search path.
+; specs turn this into fapple-kext.
fterminated-vtables
-Driver RejectNegative
+Driver RejectNegative Undocumented
Used for generating code for some older kernel revisions.
gfull
@@ -222,19 +224,19 @@ Driver RejectNegative
Usually \"private extern\" (hidden) symbols are made local when linking, this
command suppresses that such that they remain exported.
multi_module
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete after 10.4) Multi modules are ignored at runtime since macOS 10.4.
multiply_defined
-Driver RejectNegative Separate
+Driver RejectNegative Separate Undocumented
(Obsolete after 10.4) -multiply_defined <treatment> Provided a mechanism
for warning about symbols defined in multiple dylibs.
multiply_defined_unused
-Driver RejectNegative Separate
+Driver RejectNegative Separate Undocumented
(Obsolete after 10.4) -multiply_defined_unused <treatment> Provided a
mechanism for warning about symbols defined in the current executable also
being defined in linked dylibs.
no_dead_strip_inits_and_terms
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete) Current linkers never dead-strip these items, so the option is not
needed.
nodefaultexport
@@ -246,40 +248,45 @@ Driver RejectNegative
Do not add default run paths (for the compiler library directories) to
executables, modules or dynamic libraries.
nofixprebinding
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete after 10.3.9) Set MH_NOPREFIXBINDING, in an executable.
nomultidefs
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete after 10.4) Set MH_NOMULTIDEFS in an umbrella framework.
noprebind
-Driver RejectNegative Negative(prebind)
+Driver RejectNegative Negative(prebind) Undocumented
(Obsolete) LD_PREBIND is no longer supported.
noseglinkedit
-Driver RejectNegative Negative(seglinkedit)
+Driver RejectNegative Negative(seglinkedit) Undocumented
(Obsolete) This is the default.
ObjC
Driver RejectNegative
+Equivalent to -xobjective-c.
ObjC++
Driver RejectNegative
+Equivalent to -xobjective-c++.
+; This option is only used in STARTFILE_SPEC and has never been
+; documented since it was added in 2002, so it appears to be
+; intentionally undocumented.
object
-Driver RejectNegative
+Driver RejectNegative Undocumented
pagezero_size
Driver RejectNegative Separate
-pagezero_size <size> Allows setting the page 0 size to 4kb when required.
prebind
-Driver RejectNegative Negative(noprebind)
+Driver RejectNegative Negative(noprebind) Undocumented
(Obsolete) LD_PREBIND is no longer supported.
prebind_all_twolevel_modules
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete) LD_PREBIND is no longer supported.
preload
@@ -287,7 +294,7 @@ Driver RejectNegative
Produces a Mach-O file suitable for embedded/ROM use.
private_bundle
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete) Allowed linking to proceed with \"-flat_namespace\" when a linked
bundle contained a symbol also exported from the main executable.
pthread
@@ -310,11 +317,11 @@ Driver RejectNegative Separate Args(3)
-sectcreate <segname> <sectname> <file> Create section <sectname> in
segment <segname> from the contents of <file>.
sectobjectsymbols
-Driver RejectNegative Separate Args(2)
+Driver RejectNegative Separate Args(2) Undocumented
(Obsolete) -sectobjectsymbols <segname> <sectname> Setting a local symbol
at the start of a section is no longer supported.
sectorder
-Driver RejectNegative Separate Args(3)
+Driver RejectNegative Separate Args(3) Undocumented
(Obsolete) -sectorder <segname> <sectname> <orderfile> Replaced by a more
general option \"-order_file\".
seg_addr_table
@@ -323,7 +330,7 @@ Driver RejectNegative Separate
; This is only usable by the ld_classic linker.
seg_addr_table_filename
-Driver RejectNegative Separate
+Driver RejectNegative Separate Undocumented
(Obsolete, ld_classic only) -seg_addr_table_filename <path>.
seg1addr
@@ -336,11 +343,11 @@ Driver RejectNegative Separate Args(2)
; This is only usable by the ld_classic linker.
segcreate
-Driver RejectNegative Separate Args(3)
+Driver RejectNegative Separate Args(3) Undocumented
(Obsolete, ld_classic only) -sectcreate <segname> <sectname> <file> Allowed
creation of a section from a file.
seglinkedit
-Driver RejectNegative Negative(noseglinkedit)
+Driver RejectNegative Negative(noseglinkedit) Undocumented
(Obsolete) Object files with LINKEDIT sections are no longer supported.
segprot
@@ -356,7 +363,7 @@ Driver RejectNegative Separate
-segs_read_write_addr <address> Specify that <address> is the base
address address of the read-write segments of a dylib.
single_module
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete) This is the default.
sub_library
@@ -405,12 +412,12 @@ Logs which symbol(s) caused an object to be loaded.
;(Obsolete, ignored) Strip symbols starting with "L", this is the default.
X
-Driver RejectNegative
+Driver RejectNegative Undocumented
y
-Driver RejectNegative Joined
+Driver RejectNegative Joined Undocumented
(Obsolete, ignored) Old support similar to \"-whyload\".
Mach
-Driver RejectNegative
+Driver RejectNegative Undocumented
(Obsolete and unhandled by ld64, ignored) ld should produce an executable
(only handled by ld_classic).
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8d5582d6d15..9cfeb690c21 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1033,31 +1033,33 @@ Objective-C and Objective-C++ Dialects}.
-fwritable-relocated-rdata -mpe-aligned-commons}
@emph{Darwin Options} (@ref{Darwin Options})
-@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal
--arch_only -bind_at_load -bundle -bundle_loader
+@gccoptlist{-all_load -allowable_client -arch @var{name}
+-arch_errors_fatal -asm_macosx_version_min=@var{version}
+-bind_at_load -bundle -bundle_loader
-client_name -compatibility_version -current_version
-dead_strip
--dependency-file -dylib_file -dylinker_install_name
+-dependency-file -dylib_file -dylinker -dylinker_install_name
-dynamic -dynamiclib -exported_symbols_list
--filelist -flat_namespace -force_cpusubtype_ALL
--force_flat_namespace -headerpad_max_install_names
--iframework
--image_base -init -install_name -keep_private_externs
--multi_module -multiply_defined -multiply_defined_unused
--noall_load -no_dead_strip_inits_and_terms -nodefaultrpaths
--nofixprebinding -nomultidefs -noprebind -noseglinkedit
--pagezero_size -prebind -prebind_all_twolevel_modules
--private_bundle -read_only_relocs -sectalign
--sectobjectsymbols -whyload -seg1addr
--sectcreate -sectobjectsymbols -sectorder
--segaddr -segs_read_only_addr -segs_read_write_addr
--seg_addr_table -seg_addr_table_filename -seglinkedit
+-fapple-kext -fconstant-cfstrings -ffix-and-continue
+-filelist -findirect-data -flat_namespace -force_cpusubtype_ALL
+-force_flat_namespace -framework @var{name} -gfull -gused
+-headerpad_max_install_names -iframework
+-image_base -init @var{symbol-name} -install_name -keep_private_externs
+-matt-stubs -mconstant-cfstrings -mdynamic-no-pic
+-mfix-and-continue -mkernel -mmacosx-version-min=@var{version}
+-mone-byte-bool -msymbol-stubs -mtarget-linker@r{[}=@r{]}@var{version}
+-nodefaultexport -nodefaultrpaths
+-pagezero_size -preload -read_only_relocs
+-sectalign -sectcreate
+-seg_addr_table
+-seg1addr -segaddr
-segprot -segs_read_only_addr -segs_read_write_addr
--single_module -static -sub_library -sub_umbrella
--twolevel_namespace -umbrella -undefined
--unexported_symbols_list -weak_reference_mismatches
--whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version}
--mkernel -mone-byte-bool}
+-sub_library -sub_umbrella
+-twolevel_namespace -twolevel_namespace_hints
+-umbrella -undefined -unexported_symbols_list
+-weak_framework @var{name} -weak_reference_mismatches
+-whatsloaded -whyload
+-F -ObjC -ObjC++ -Wnonportable-cfstrings}
@emph{DEC Alpha Options} (@ref{DEC Alpha Options})
@gccoptlist{-mno-fp-regs -msoft-float
@@ -26752,6 +26754,24 @@ directory. The main difference between this
@option{-iframework} and
warn about constructs contained within header files found via
@var{dir}. This option is valid only for the C family of languages.
+@opindex arch
+@item -arch @var{name}
+Generate output for architecture @var{name}. As described above, GCC
+generates output for the architecture it was configured for, using its
+usual options to select subarchitecture variants. The @option{-arch}
+option is accepted for compatibility, but an error is diagnosed if
+@var{name} is inconsistent with GCC's own idea of the target architecture.
+
+@opindex dependency-file
+@item -dependency-file @var{filename}
+Alias for the preprocessor option @option{-MF @var{filename}}.
+@xref{Preprocessor Options}.
+
+@opindex fapple-kext
+@opindex fno-apple-kext
+@item -fapple-kext
+Generate code for Darwin loadable kernel extensions.
+
@opindex gused
@item -gused
Emit debugging information for symbols that are used. For stabs
@@ -26762,28 +26782,45 @@ This is by default ON@.
@item -gfull
Emit debugging information for all symbols and types.
-@opindex fconstant-cfstrings
-@item -fconstant-cfstrings
-The @option{-fconstant-cfstrings} is an alias for
@option{-mconstant-cfstrings}.
+@opindex matt-stubs
+@opindex mno-att-stubs
+@item -matt-stubs
+@itemx -mno-att-stubs
+Enable AT&T-style PIC stubs. This is the default when supported by
+the target architecture (currently x86 only).
@opindex mconstant-cfstrings
+@opindex mno-constant-cfstrings
+@opindex fconstant-cfstrings
@item -mconstant-cfstrings
+@itemx -fconstant-cfstrings
When the NeXT runtime is being used (the default on these systems), override
any @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"}
literals to be laid out as constant CoreFoundation strings.
-@opindex mmacosx-version-min
-@item -mmacosx-version-min=@var{version}
-The earliest version of MacOS X that this executable will run on is
-@var{version}. Typical values supported for @var{version} include @code{12},
-@code{10.12}, and @code{10.5.8}.
+@option{-fconstant-cfstrings} is an alias for @option{-mconstant-cfstrings}.
-If the compiler was built to use the system's headers by default,
-then the default for this option is the system version on which the
-compiler is running, otherwise the default is to make choices that
-are compatible with as many systems and code bases as possible.
+@opindex mdynamic-no-pic
+@opindex mno-dynamic-no-pic
+@item -mdynamic-no-pic
+Generate code suitable for executables (not shared libraries). This
+option is incompatible with @option{-fpic}, @option{-fPIC}, @option{-fpie},
+or @option{-fPIE}.
+
+@opindex mfix-and-continue
+@opindex mno-fix-and-continue
+@opindex ffix-and-continue
+@opindex findirect-data
+@item -mfix-and-continue
+@itemx -ffix-and-continue
+@itemx -findirect-data
+Generate code suitable for fast turnaround development, such as to
+allow GDB to dynamically load @file{.o} files into already-running
+programs. @option{-findirect-data} and @option{-ffix-and-continue}
+are provided for backwards compatibility.
@opindex mkernel
+@opindex mno-kernel
@item -mkernel
Enable kernel development mode. The @option{-mkernel} option sets
@option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
@@ -26793,6 +26830,23 @@ applicable. This mode also sets @option{-mno-altivec},
@option{-msoft-float}, @option{-fno-builtin} and
@option{-mlong-branch} for PowerPC targets.
+@opindex mmacosx-version-min
+@opindex asm_macosx_version_min
+@item -mmacosx-version-min=@var{version}
+@itemx -asm_macosx_version_min=@var{version}
+The @option{-mmacosx-version-min} option specifies
+the earliest version of MacOS X that this executable will run on is
+@var{version}. Typical values supported for @var{version} include @code{12},
+@code{10.12}, and @code{10.5.8}.
+
+If the compiler was built to use the system's headers by default,
+then the default for this option is the system version on which the
+compiler is running, otherwise the default is to make choices that
+are compatible with as many systems and code bases as possible.
+
+@option{-asm_macosx_version_min=@var{version}} is similar, but the GCC
+driver passes its @var{version} information only to the assembler.
+
@opindex mone-byte-bool
@item -mone-byte-bool
Override the defaults for @code{bool} so that @code{sizeof(bool)==1}.
@@ -26806,16 +26860,37 @@ without that switch. Using this switch may require
recompiling all
other modules in a program, including system libraries. Use this
switch to conform to a non-default data model.
-@opindex mfix-and-continue
-@opindex ffix-and-continue
-@opindex findirect-data
-@item -mfix-and-continue
-@itemx -ffix-and-continue
-@itemx -findirect-data
-Generate code suitable for fast turnaround development, such as to
-allow GDB to dynamically load @file{.o} files into already-running
-programs. @option{-findirect-data} and @option{-ffix-and-continue}
-are provided for backwards compatibility.
+@opindex msymbol-stubs
+@opindex mno-symbol-stubs
+@item -msymbol-stubs
+@itemx -mno-symbol-stubs
+Force generation of external symbol indirection stubs for PIC references.
+By default, this option is enabled automatically if the target linker
+version (@option{-mtarget-linker}) is old enough to require them.
+
+@opindex mtarget-linker
+@item -mtarget-linker=@var{version}
+@item -mtarget-linker @var{version}
+Specify the target @command{ld64} version, overriding any version specified
+in the GCC configuration. Newer linker versions support improved code
+generation in some cases, for example for PIC code.
+
+@opindex ObjC
+@item -ObjC
+Equivalent to @samp{-x objective-c}; specifies that the input is
+is Objective-C source code.
+
+@opindex ObjC++
+@item -ObjC++
+Equivalent to @samp{-x objective-c++}; specifies that the input is
+is Objective-C++ source code.
+
+@opindex Wnonportable-cfstrings
+@opindex Wno-nonportable-cfstrings
+@item -Wnonportable-cfstrings
+@itemx -Wno-nonportable-cfstrings
+Warn if constant CoreFoundation string objects contain non-portable
+characters. This warning is enabled by default.
@opindex all_load
@item -all_load
@@ -26860,13 +26935,57 @@ the embedded runpath is added by default unless the
user adds
@option{-nodefaultrpaths} to the link line. Run paths are needed
(and therefore enforced) to build on macOS version 10.11 or later.
+@opindex nodefaultexport
+@item -nodefaultexport
+Do not add default symbol exports to modules or dynamic libraries.
+
+@opindex allowable_client
+@opindex client_name
+@opindex compatibility_version
+@opindex current_version
+@opindex dead_strip
+@opindex dylib_file
+@opindex dylinker
+@opindex dylinker_install_name
+@opindex dynamic
+@opindex exported_symbols_list
+@opindex filelist
+@opindex flat_namespace
+@opindex force_flat_namespace
+@opindex framework
+@opindex headerpad_max_install_names
+@opindex image_base
+@opindex init
+@opindex install_name
+@opindex keep_private_externs
+@opindex pagezero_size
+@opindex read_only_relocs
+@opindex sectalign
+@opindex sectcreate
+@opindex seg_addr_table
+@opindex seg1addr
+@opindex segaddr
+@opindex segprot
+@opindex segs_read_only_addr
+@opindex segs_read_write_addr
+@opindex sub_library
+@opindex sub_umbrella
+@opindex twolevel_namespace
+@opindex twolevel_namespace_hints
+@opindex umbrella
+@opindex undefined
+@opindex unexported_symbols_list
+@opindex weak_framework
+@opindex weak_reference_mismatches
+@opindex whatsloaded
+@opindex whyload
@item -allowable_client @var{client_name}
@itemx -client_name
@itemx -compatibility_version
@itemx -current_version
@itemx -dead_strip
-@itemx -dependency-file
@itemx -dylib_file
+@itemx -dylinker
@itemx -dylinker_install_name
@itemx -dynamic
@itemx -exported_symbols_list
@@ -26874,113 +26993,38 @@ the embedded runpath is added by default unless the
user adds
@need 800
@itemx -flat_namespace
@itemx -force_flat_namespace
+@itemx -framework
@itemx -headerpad_max_install_names
@itemx -image_base
-@itemx -init
+@itemx -init @var{symbol-name}
@itemx -install_name
@itemx -keep_private_externs
-@itemx -multi_module
-@itemx -multiply_defined
-@itemx -multiply_defined_unused
@need 800
-@itemx -noall_load
-@itemx -no_dead_strip_inits_and_terms
-@itemx -nofixprebinding
-@itemx -nomultidefs
-@itemx -noprebind
-@itemx -noseglinkedit
@itemx -pagezero_size
-@itemx -prebind
-@itemx -prebind_all_twolevel_modules
-@itemx -private_bundle
+@itemx -preload
@need 800
@itemx -read_only_relocs
@itemx -sectalign
-@itemx -sectobjectsymbols
-@itemx -whyload
-@itemx -seg1addr
@itemx -sectcreate
-@itemx -sectobjectsymbols
-@itemx -sectorder
-@itemx -segaddr
-@itemx -segs_read_only_addr
-@need 800
-@itemx -segs_read_write_addr
@itemx -seg_addr_table
-@itemx -seg_addr_table_filename
-@itemx -seglinkedit
+@itemx -seg1addr
+@itemx -segaddr
+@need 800
@itemx -segprot
@itemx -segs_read_only_addr
@itemx -segs_read_write_addr
-@itemx -single_module
-@itemx -static
@itemx -sub_library
@need 800
-@opindex allowable_client
-@opindex client_name
-@opindex compatibility_version
-@opindex current_version
-@opindex dead_strip
-@opindex dependency-file
-@opindex dylib_file
-@opindex dylinker_install_name
-@opindex dynamic
-@opindex exported_symbols_list
-@opindex filelist
-@opindex flat_namespace
-@opindex force_flat_namespace
-@opindex headerpad_max_install_names
-@opindex image_base
-@opindex init
-@opindex install_name
-@opindex keep_private_externs
-@opindex multi_module
-@opindex multiply_defined
-@opindex multiply_defined_unused
-@opindex noall_load
-@opindex no_dead_strip_inits_and_terms
-@opindex nofixprebinding
-@opindex nomultidefs
-@opindex noprebind
-@opindex noseglinkedit
-@opindex pagezero_size
-@opindex prebind
-@opindex prebind_all_twolevel_modules
-@opindex private_bundle
-@opindex read_only_relocs
-@opindex sectalign
-@opindex sectobjectsymbols
-@opindex whyload
-@opindex seg1addr
-@opindex sectcreate
-@opindex sectobjectsymbols
-@opindex sectorder
-@opindex segaddr
-@opindex segs_read_only_addr
-@opindex segs_read_write_addr
-@opindex seg_addr_table
-@opindex seg_addr_table_filename
-@opindex seglinkedit
-@opindex segprot
-@opindex segs_read_only_addr
-@opindex segs_read_write_addr
-@opindex single_module
-@opindex static
-@opindex sub_library
-@opindex sub_umbrella
-@opindex twolevel_namespace
-@opindex umbrella
-@opindex undefined
-@opindex unexported_symbols_list
-@opindex weak_reference_mismatches
-@opindex whatsloaded
@itemx -sub_umbrella
@itemx -twolevel_namespace
+@itemx -twolevel_namespace_hints
@itemx -umbrella
@itemx -undefined
@itemx -unexported_symbols_list
+@itemx -weak_framework
@itemx -weak_reference_mismatches
@itemx -whatsloaded
+@itemx -whyload
These options are passed to the Darwin linker. The Darwin linker man page
describes them in detail.
@end table
--
2.39.5