* Makefile.am (GENSCRIPTS): Pass prefix.
[deliverable/binutils-gdb.git] / ld / ld.texinfo
index e66ec66bef658e07d5503c96638d9bb3ca0ddb29..55eb893c22f0bed07cdaa260545ab5a3efc466be 100644 (file)
@@ -3,9 +3,11 @@
 @c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 @c 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 @syncodeindex ky cp
+@c man begin INCLUDE
 @include configdoc.texi
 @c (configdoc.texi is generated by the Makefile)
 @include ldver.texi
+@c man end
 
 @c @smallbook
 
@@ -18,7 +20,6 @@
 @c Configure for the generation of man pages
 @set UsesEnvVars
 @set GENERIC
-@set A29K
 @set ARC
 @set ARM
 @set D10V
@@ -341,6 +342,8 @@ Here is a table of the generic command line switches accepted by the GNU
 linker:
 
 @table @gcctabopt
+@include @value{top_srcdir}/../libiberty/at-file.texi
+
 @kindex -a@var{keyword}
 @item -a@var{keyword}
 This option is supported for HP/UX compatibility.  The @var{keyword}
@@ -769,6 +772,12 @@ in larger executables.
 
 This option is currently only supported on ELF platforms.
 
+@kindex --force-dynamic
+@cindex forcing the creation of dynamic sections
+@item --force-dynamic
+Force the output file to have dynamic sections.  This option is specific
+to VxWorks targets.
+
 @cindex partial link
 @cindex relocatable output
 @kindex -r
@@ -930,6 +939,9 @@ lookup caching possible.
 Disallows undefined symbols in object files.  Undefined symbols in
 shared libraries are still allowed.
 
+@item execstack
+Marks the object as requiring executable stack.
+
 @item initfirst
 This option is only meaningful when building a shared object.
 It marks the object so that its runtime initialization will occur
@@ -968,6 +980,12 @@ Marks the object not available to @code{dlopen}.
 @item nodump
 Marks the object can not be dumped by @code{dldump}.
 
+@item noexecstack
+Marks the object as not requiring executable stack.
+
+@item norelro
+Don't create an ELF @code{PT_GNU_RELRO} segment header in the object.
+
 @item now
 When generating an executable or shared library, mark it to tell the
 dynamic linker to resolve all symbols when the program is started, or
@@ -978,6 +996,9 @@ first called.
 @item origin
 Marks the object may contain $ORIGIN.
 
+@item relro
+Create an ELF @code{PT_GNU_RELRO} segment header in the object.
+
 @end table
 
 Other keywords are ignored for Solaris compatibility.  
@@ -1077,7 +1098,11 @@ platforms for which shared libraries are supported.  The different
 variants of this option are for compatibility with various systems.  You
 may use this option multiple times on the command line: it affects
 library searching for @option{-l} options which follow it.  This
-option also implies @option{--unresolved-symbols=report-all}.
+option also implies @option{--unresolved-symbols=report-all}.  This
+option can be used with @option{-shared}.  Doing so means that a
+shared library is being created but that all of the library's external
+references must be resolved by pulling in entries from static
+libraries. 
 
 @kindex -Bsymbolic
 @item -Bsymbolic
@@ -1811,6 +1836,11 @@ you should not put the definition of @code{__real_malloc} in the same
 file as @code{__wrap_malloc}; if you do, the assembler may resolve the
 call before the linker has a chance to wrap it to @code{malloc}.
 
+@kindex --eh-frame-hdr
+@item --eh-frame-hdr
+Request creation of @code{.eh_frame_hdr} section and ELF
+@code{PT_GNU_EH_FRAME} segment header.
+
 @kindex --enable-new-dtags
 @kindex --disable-new-dtags
 @item --enable-new-dtags
@@ -1823,6 +1853,7 @@ created. By default, the new dynamic tags are not created. Note that
 those options are only available for ELF systems.
 
 @kindex --hash-size=@var{number}
+@item --hash-size=@var{number}
 Set the default size of the linker's hash tables to a prime number
 close to @var{number}.  Increasing this value can reduce the length of
 time it takes the linker to perform its tasks, at the expense of
@@ -1832,11 +1863,11 @@ value can reduce the memory requirements at the expense of speed.
 @kindex --reduce-memory-overheads
 @item --reduce-memory-overheads
 This option reduces memory requirements at ld runtime, at the expense of
-linking speed.  This was introduced to to select the old O(n^2) algorithm
+linking speed.  This was introduced to select the old O(n^2) algorithm
 for link map file generation, rather than the new O(n) algorithm which uses
 about 40% more memory for symbol storage.
 
-Another affect of the switch is to set the default hash table size to
+Another effect of the switch is to set the default hash table size to
 1021, which again saves memory at the cost of lengthening the linker's
 run time.  This is not done however if the @option{--hash-size} switch
 has been used.
@@ -2774,6 +2805,7 @@ the symbol and place it into the symbol table with a global scope.
 @menu
 * Simple Assignments::         Simple Assignments
 * PROVIDE::                    PROVIDE
+* PROVIDE_HIDDEN::             PROVIDE_HIDDEN
 * Source Code Reference::      How to use a linker script defined symbol in source code
 @end menu
 
@@ -2867,6 +2899,12 @@ underscore), the linker will silently use the definition in the program.
 If the program references @samp{etext} but does not define it, the
 linker will use the definition in the linker script.
 
+@node PROVIDE_HIDDEN
+@subsection PROVIDE_HIDDEN
+@cindex PROVIDE_HIDDEN
+Similar to @code{PROVIDE}.  For ELF targeted ports, the symbol will be
+hidden and won't be exported.
+
 @node Source Code Reference
 @subsection Source Code Reference
 
@@ -3037,7 +3075,7 @@ The full description of an output section looks like this:
 @smallexample
 @group
 @var{section} [@var{address}] [(@var{type})] :
-  [AT(@var{lma})] [SUBALIGN(@var{subsection_align})]
+  [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})]
   @{
     @var{output-section-command}
     @var{output-section-command}
@@ -3613,7 +3651,7 @@ like this:
 @smallexample
 @group
 @var{section} [@var{address}] [(@var{type})] :
-  [AT(@var{lma})] [SUBALIGN(@var{subsection_align})]
+  [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})]
   @{
     @var{output-section-command}
     @var{output-section-command}
@@ -3628,6 +3666,7 @@ remaining section attributes.
 @menu
 * Output Section Type::                Output section type
 * Output Section LMA::         Output section LMA
+* Forced Output Alignment::    Forced Output Alignment
 * Forced Input Alignment::     Forced Input Alignment
 * Output Section Region::      Output section region
 * Output Section Phdr::                Output section phdr
@@ -3741,6 +3780,13 @@ for (dst = &_bstart; dst< &_bend; dst++)
 @end group
 @end smallexample
 
+@node Forced Output Alignment
+@subsubsection Forced Output Alignment
+@kindex ALIGN(@var{section_align})
+@cindex forcing output section alignment
+@cindex output section alignment
+You can increase an output section's alignment by using ALIGN.
+
 @node Forced Input Alignment
 @subsubsection Forced Input Alignment
 @kindex SUBALIGN(@var{subsection_align})
@@ -4251,6 +4297,10 @@ VERS_1.2 @{
 
 VERS_2.0 @{
                 bar1; bar2;
+        extern "C++" @{       
+                ns::*;
+                "int f(int, double)";
+         @}         
 @} VERS_1.2;
 @end smallexample
 
@@ -4262,6 +4312,8 @@ of the shared library; this is done using wildcard patterns, so that any
 symbol whose name begins with @samp{old}, @samp{original}, or @samp{new}
 is matched.  The wildcard patterns available are the same as those used
 in the shell when matching filenames (also known as ``globbing'').
+However, if you specify the symbol name inside double quotes, then the
+name is treated as literal, rather than as a glob pattern.
 
 Next, the version script defines node @samp{VERS_1.2}.  This node
 depends upon @samp{VERS_1.1}.  The script binds the symbol @samp{foo2}
@@ -4371,6 +4423,16 @@ The linker will iterate over the list of symbols at the link time and
 demangle them according to @samp{lang} before matching them to the
 patterns specified in @samp{version-script-commands}.
 
+Demangled names may contains spaces and other special characters.  As
+described above, you can use a glob pattern to match demangled names,
+or you can use a double-quoted string to match the string exactly.  In
+the latter case, be aware that minor differences (such as differing
+whitespace) between the version script and the demangler output will
+cause a mismatch.  As the exact string generated by the demangler
+might change in the future, even if the mangled name does not, you
+should check that all of your version directives are behaving as you
+expect when you upgrade.
+
 @node Expressions
 @section Expressions in Linker Scripts
 @cindex expressions
@@ -4388,6 +4450,7 @@ expressions.
 @menu
 * Constants::                  Constants
 * Symbols::                    Symbol Names
+* Orphan Sections::            Orphan Sections
 * Location Counter::           The Location Counter
 * Operators::                  Operators
 * Evaluation::                 Evaluation
@@ -4449,6 +4512,22 @@ Since symbols can contain many non-alphabetic characters, it is safest
 to delimit symbols with spaces.  For example, @samp{A-B} is one symbol,
 whereas @samp{A - B} is an expression involving subtraction.
 
+@node Orphan Sections
+@subsection Orphan Sections
+@cindex orphan
+Orphan sections are sections present in the input files which
+are not explicitly placed into the output file by the linker
+script.  The linker will still copy these sections into the
+output file, but it has to guess as to where they should be
+placed.  The linker uses a simple heuristic to do this.  It
+attempts to place orphan sections after non-orphan sections of the
+same attribute, such as code vs data, loadable vs non-loadable, etc.
+If there is not enough room to do this then it places
+at the end of the file.
+
+For ELF targets, the attribute of the section includes section type as
+well as section flag.
+
 @node Location Counter
 @subsection The Location Counter
 @kindex .
@@ -5508,17 +5587,85 @@ Using a DEF file turns off the normal auto-export behavior, unless the
 Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
 
 @example
-LIBRARY "xyz.dll" BASE=0x10000000
+LIBRARY "xyz.dll" BASE=0x20000000
 
 EXPORTS
 foo
 bar
 _bar = bar
+another_foo = abc.dll.afoo
+var1 DATA
+@end example 
+
+This example defines a DLL with a non-default base address and five
+symbols in the export table. The third exported symbol @code{_bar} is an
+alias for the second. The fourth symbol, @code{another_foo} is resolved
+by "forwarding" to another module and treating it as an alias for
+@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol
+@code{var1} is declared to be a data object.
+
+The optional @code{LIBRARY <name>} command indicates the @emph{internal}
+name of the output DLL. If @samp{<name>} does not include a suffix,
+the default library suffix, @samp{.DLL} is appended.
+
+When the .DEF file is used to build an application. rather than a
+library, the @code{NAME <name>} command shoud be used instead of
+@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default
+executable suffix, @samp{.EXE} is appended. 
+
+With either @code{LIBRARY <name>} or @code{NAME <name>} the optional
+specification @code{BASE = <number>} may be used to specify a
+non-default base address for the image. 
+
+If neither @code{LIBRARY <name>} nor  @code{NAME <name>} is specified,
+or they specify an empty string, the internal name is the same as the
+filename specified on the command line.
+
+The complete specification of an export symbol is:
+
+@example
+EXPORTS
+  ( (  ( <name1> [ = <name2> ] )
+     | ( <name1> = <module-name> . <external-name>))
+  [ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
 @end example 
 
-This example defines a base address and three symbols.  The third
-symbol is an alias for the second.  For the complete format
-specification see ld/deffilep.y in the binutils sources.
+Declares @samp{<name1>} as an exported symbol from the DLL, or declares
+@samp{<name1>} as an exported alias for @samp{<name2>}; or declares
+@samp{<name1>} as a "forward" alias for the symbol
+@samp{<external-name>} in the DLL @samp{<module-name>}.
+Optionally, the symbol may be exported by the specified ordinal
+@samp{<integer>} alias.
+
+The optional keywords that follow the declaration indicate:
+
+@code{NONAME}: Do not put the symbol name in the DLL's export table.  It
+will still be exported by its ordinal alias (either the value specified
+by the .def specification or, otherwise, the value assigned by the
+linker). The symbol name, however, does remain visible in the import
+library (if any), unless @code{PRIVATE} is also specified.
+
+@code{DATA}: The symbol is a variable or object, rather than a function.
+The import lib will export only an indirect reference to @code{foo} as
+the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as
+@code{*_imp__foo}).
+
+@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as
+well as @code{_imp__foo} into the import library. Both refer to the
+read-only import address table's pointer to the variable, not to the
+variable itself. This can be dangerous. If the user code fails to add
+the @code{dllimport} attribute and also fails to explicitly add the
+extra indirection that the use of the attribute enforces, the
+application will behave unexpectedly.
+
+@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put
+it into the static import library used to resolve imports at link time. The
+symbol can still be imported using the @code{LoadLibrary/GetProcAddress}
+API at runtime or by by using the GNU ld extension of linking directly to
+the DLL without an import library.
+See ld/deffilep.y in the binutils sources for the full specification of
+other DEF file statements
 
 @cindex creating a DEF file
 While linking a shared dll, @command{ld} is able to create a DEF file
This page took 0.027489 seconds and 4 git commands to generate.