* ld.texinfo: Document PowerPC and PowerPC64 options.
* gen-doc.texi: Enable.
This commit is contained in:
parent
f4cd22bf31
commit
2a60a7a82c
3 changed files with 201 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2006-05-05 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* ld.texinfo: Document PowerPC and PowerPC64 options.
|
||||||
|
* gen-doc.texi: Enable.
|
||||||
|
|
||||||
2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
|
2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* Makefile.am (AM_MAKEINFOFLAGS): Add libiberty.
|
* Makefile.am (AM_MAKEINFOFLAGS): Add libiberty.
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
@set HPPA
|
@set HPPA
|
||||||
@set MMIX
|
@set MMIX
|
||||||
@set MSP430
|
@set MSP430
|
||||||
|
@set POWERPC
|
||||||
|
@set POWERPC64
|
||||||
@set TICOFF
|
@set TICOFF
|
||||||
@set WIN32
|
@set WIN32
|
||||||
@set XTENSA
|
@set XTENSA
|
||||||
|
|
194
ld/ld.texinfo
194
ld/ld.texinfo
|
@ -40,6 +40,8 @@
|
||||||
@set MSP430
|
@set MSP430
|
||||||
@set PDP11
|
@set PDP11
|
||||||
@set PJ
|
@set PJ
|
||||||
|
@set POWERPC
|
||||||
|
@set POWERPC64
|
||||||
@set SH
|
@set SH
|
||||||
@set SPARC
|
@set SPARC
|
||||||
@set TIC54X
|
@set TIC54X
|
||||||
|
@ -156,6 +158,12 @@ section entitled ``GNU Free Documentation License''.
|
||||||
@ifset M68HC11
|
@ifset M68HC11
|
||||||
* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families
|
* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset POWERPC
|
||||||
|
* PowerPC ELF32:: ld and PowerPC 32-bit ELF Support
|
||||||
|
@end ifset
|
||||||
|
@ifset POWERPC64
|
||||||
|
* PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support
|
||||||
|
@end ifset
|
||||||
@ifset TICOFF
|
@ifset TICOFF
|
||||||
* TI COFF:: ld and the TI COFF
|
* TI COFF:: ld and the TI COFF
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ -1383,6 +1391,9 @@ This option is only supported on a few targets.
|
||||||
@ifset M68HC11
|
@ifset M68HC11
|
||||||
@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}.
|
@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset POWERPC
|
||||||
|
@xref{PowerPC ELF32,,@command{ld} and PowerPC 32-bit ELF Support}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
On some platforms, the @samp{--relax} option performs global
|
On some platforms, the @samp{--relax} option performs global
|
||||||
optimizations that become possible when the linker resolves addressing
|
optimizations that become possible when the linker resolves addressing
|
||||||
|
@ -5111,6 +5122,12 @@ functionality are not listed.
|
||||||
@ifset M68HC11
|
@ifset M68HC11
|
||||||
* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families
|
* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset POWERPC
|
||||||
|
* PowerPC ELF32:: @command{ld} and PowerPC 32-bit ELF Support
|
||||||
|
@end ifset
|
||||||
|
@ifset POWERPC64
|
||||||
|
* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support
|
||||||
|
@end ifset
|
||||||
@ifset TICOFF
|
@ifset TICOFF
|
||||||
* TI COFF:: @command{ld} and TI COFF
|
* TI COFF:: @command{ld} and TI COFF
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ -5502,6 +5519,183 @@ The last two sections are used by gcc.
|
||||||
@end ifclear
|
@end ifclear
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ifset POWERPC
|
||||||
|
@ifclear GENERIC
|
||||||
|
@raisesections
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
|
@node PowerPC ELF32
|
||||||
|
@section @command{ld} and PowerPC 32-bit ELF Support
|
||||||
|
@cindex PowerPC long branches
|
||||||
|
@kindex --relax on PowerPC
|
||||||
|
Branches on PowerPC processors are limited to a signed 26-bit
|
||||||
|
displacement, which may result in @command{ld} giving
|
||||||
|
@samp{relocation truncated to fit} errors with very large programs.
|
||||||
|
@samp{--relax} enables the generation of trampolines that can access
|
||||||
|
the entire 32-bit address space. These trampolines are inserted at
|
||||||
|
section boundaries, so may not themselves be reachable if an input
|
||||||
|
section exceeds 33M in size.
|
||||||
|
|
||||||
|
@cindex PowerPC ELF32 options
|
||||||
|
@table @option
|
||||||
|
@cindex PowerPC PLT
|
||||||
|
@kindex --bss-plt
|
||||||
|
@item --bss-plt
|
||||||
|
Current PowerPC GCC accepts a @samp{-msecure-plt} option that
|
||||||
|
generates code capable of using a newer PLT and GOT layout that has
|
||||||
|
the security advantage of no executable section ever needing to be
|
||||||
|
writable and no writable section ever being executable. PowerPC
|
||||||
|
@command{ld} will generate this layout, including stubs to access the
|
||||||
|
PLT, if all input files (including startup and static libraries) were
|
||||||
|
compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old
|
||||||
|
BSS PLT (and GOT layout) which can give slightly better performance.
|
||||||
|
|
||||||
|
@cindex PowerPC GOT
|
||||||
|
@kindex --sdata-got
|
||||||
|
@item --sdata-got
|
||||||
|
The new secure PLT and GOT are placed differently relative to other
|
||||||
|
sections compared to older BSS PLT and GOT placement. The location of
|
||||||
|
@code{.plt} must change because the new secure PLT is an initialized
|
||||||
|
section while the old PLT is uninitialized. The reason for the
|
||||||
|
@code{.got} change is more subtle: The new placement allows
|
||||||
|
@code{.got} to be read-only in applications linked with
|
||||||
|
@samp{-z relro -z now}. However, this placement means that
|
||||||
|
@code{.sdata} cannot always be used in shared libraries, because the
|
||||||
|
PowerPC ABI accesses @code{.sdata} in shared libraries from the GOT
|
||||||
|
pointer. @samp{--sdata-got} forces the old GOT placement. PowerPC
|
||||||
|
GCC doesn't use @code{.sdata} in shared libraries, so this option is
|
||||||
|
really only useful for other compilers that may do so.
|
||||||
|
|
||||||
|
@cindex PowerPC stub symbols
|
||||||
|
@kindex --emit-stub-syms
|
||||||
|
@item --emit-stub-syms
|
||||||
|
This option causes @command{ld} to label linker stubs with a local
|
||||||
|
symbol that encodes the stub type and destination.
|
||||||
|
|
||||||
|
@cindex PowerPC TLS optimization
|
||||||
|
@kindex --no-tls-optimize
|
||||||
|
@item --no-tls-optimize
|
||||||
|
PowerPC @command{ld} normally performs some optimization of code
|
||||||
|
sequences used to access Thread-Local Storage. Use this option to
|
||||||
|
disable the optimization.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@ifclear GENERIC
|
||||||
|
@lowersections
|
||||||
|
@end ifclear
|
||||||
|
@end ifset
|
||||||
|
|
||||||
|
@ifset POWERPC64
|
||||||
|
@ifclear GENERIC
|
||||||
|
@raisesections
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
|
@node PowerPC64 ELF64
|
||||||
|
@section @command{ld} and PowerPC64 64-bit ELF Support
|
||||||
|
|
||||||
|
@cindex PowerPC64 ELF64 options
|
||||||
|
@table @option
|
||||||
|
@cindex PowerPC64 stub grouping
|
||||||
|
@kindex --stub-group-size
|
||||||
|
@item --stub-group-size
|
||||||
|
Long branch stubs, PLT call stubs and TOC adjusting stubs are placed
|
||||||
|
by @command{ld} in stub sections located between groups of input sections.
|
||||||
|
@samp{--stub-group-size} specifies the maximum size of a group of input
|
||||||
|
sections handled by one stub section. Since branch offsets are signed,
|
||||||
|
a stub section may serve two groups of input sections, one group before
|
||||||
|
the stub section, and one group after it. However, when using
|
||||||
|
conditional branches that require stubs, it may be better (for branch
|
||||||
|
prediction) that stub sections only serve one group of input sections.
|
||||||
|
A negative value for @samp{N} chooses this scheme, ensuring that
|
||||||
|
branches to stubs always use a negative offset. Two special values of
|
||||||
|
@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
|
||||||
|
@command{ld} to automatically size input section groups for the branch types
|
||||||
|
detected, with the same behaviour regarding stub placement as other
|
||||||
|
positive or negative values of @samp{N} respectively.
|
||||||
|
|
||||||
|
Note that @samp{--stub-group-size} does not split input sections. A
|
||||||
|
single input section larger than the group size specified will of course
|
||||||
|
create a larger group (of one section). If input sections are too
|
||||||
|
large, it may not be possible for a branch to reach its stub.
|
||||||
|
|
||||||
|
@cindex PowerPC64 stub symbols
|
||||||
|
@kindex --emit-stub-syms
|
||||||
|
@item --emit-stub-syms
|
||||||
|
This option causes @command{ld} to label linker stubs with a local
|
||||||
|
symbol that encodes the stub type and destination.
|
||||||
|
|
||||||
|
@cindex PowerPC64 dot symbols
|
||||||
|
@kindex --dotsyms
|
||||||
|
@kindex --no-dotsyms
|
||||||
|
@item --dotsyms, --no-dotsyms
|
||||||
|
These two options control how @command{ld} interprets version patterns
|
||||||
|
in a version script. Older PowerPC64 compilers emitted both a
|
||||||
|
function descriptor symbol with the same name as the function, and a
|
||||||
|
code entry symbol with the name prefixed by a dot (@samp{.}). To
|
||||||
|
properly version a function @samp{foo}, the version script thus needs
|
||||||
|
to control both @samp{foo} and @samp{.foo}. The option
|
||||||
|
@samp{--dotsyms}, on by default, automatically adds the required
|
||||||
|
dot-prefixed patterns. Use @samp{--no-dotsyms} to disable this
|
||||||
|
feature.
|
||||||
|
|
||||||
|
@cindex PowerPC64 TLS optimization
|
||||||
|
@kindex --no-tls-optimize
|
||||||
|
@item --no-tls-optimize
|
||||||
|
PowerPC64 @command{ld} normally performs some optimization of code
|
||||||
|
sequences used to access Thread-Local Storage. Use this option to
|
||||||
|
disable the optimization.
|
||||||
|
|
||||||
|
@cindex PowerPC64 OPD optimization
|
||||||
|
@kindex --no-opd-optimize
|
||||||
|
@item --no-opd-optimize
|
||||||
|
PowerPC64 @command{ld} normally removes @code{.opd} section entries
|
||||||
|
corresponding to deleted link-once functions, or functions removed by
|
||||||
|
the action of @samp{--gc-sections} or linker scrip @code{/DISCARD/}.
|
||||||
|
Use this option to disable @code{.opd} optimization.
|
||||||
|
|
||||||
|
@cindex PowerPC64 OPD spacing
|
||||||
|
@kindex --non-overlapping-opd
|
||||||
|
@item --non-overlapping-opd
|
||||||
|
Some PowerPC64 compilers have an option to generate compressed
|
||||||
|
@code{.opd} entries spaced 16 bytes apart, overlapping the third word,
|
||||||
|
the static chain pointer (unused in C) with the first word of the next
|
||||||
|
entry. This option expands such entries to the full 24 bytes.
|
||||||
|
|
||||||
|
@cindex PowerPC64 TOC optimization
|
||||||
|
@kindex --no-toc-optimize
|
||||||
|
@item --no-toc-optimize
|
||||||
|
PowerPC64 @command{ld} normally removes unused @code{.toc} section
|
||||||
|
entries. Such entries are detected by examining relocations that
|
||||||
|
reference the TOC in code sections. A reloc in a deleted code section
|
||||||
|
marks a TOC word as unneeded, while a reloc in a kept code section
|
||||||
|
marks a TOC word as needed. Since the TOC may reference itself, TOC
|
||||||
|
relocs are also examined. TOC words marked as both needed and
|
||||||
|
unneeded will of course be kept. TOC words without any referencing
|
||||||
|
reloc are assumed to be part of a multi-word entry, and are kept or
|
||||||
|
discarded as per the nearest marked preceding word. This works
|
||||||
|
reliably for compiler generated code, but may be incorrect if assembly
|
||||||
|
code is used to insert TOC entries. Use this option to disable the
|
||||||
|
optimization.
|
||||||
|
|
||||||
|
@cindex PowerPC64 multi-TOC
|
||||||
|
@kindex --no-multi-toc
|
||||||
|
@item --no-multi-toc
|
||||||
|
By default, PowerPC64 GCC generates code for a TOC model where TOC
|
||||||
|
entries are accessed with a 16-bit offset from r2. This limits the
|
||||||
|
total TOC size to 64K. PowerPC64 @command{ld} extends this limit by
|
||||||
|
grouping code sections such that each group uses less than 64K for its
|
||||||
|
TOC entries, then inserts r2 adjusting stubs between inter-group
|
||||||
|
calls. @command{ld} does not split apart input sections, so cannot
|
||||||
|
help if a single input file has a @code{.toc} section that exceeds
|
||||||
|
64K, most likely from linking multiple files with @command{ld -r}.
|
||||||
|
Use this option to turn off this feature.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@ifclear GENERIC
|
||||||
|
@lowersections
|
||||||
|
@end ifclear
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@ifset TICOFF
|
@ifset TICOFF
|
||||||
@ifclear GENERIC
|
@ifclear GENERIC
|
||||||
@raisesections
|
@raisesections
|
||||||
|
|
Loading…
Add table
Reference in a new issue