*** empty log message ***
[deliverable/binutils-gdb.git] / ld / ld.texinfo
index ccb4b57543e4fae5e6250aa532d9718089598993..172ea7a12130f70237a0b4e4379f547f6ac0c343 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
 
@@ -340,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}
@@ -929,6 +933,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
@@ -967,6 +974,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
@@ -977,6 +990,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.  
@@ -1814,6 +1830,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
@@ -1840,7 +1861,7 @@ linking speed.  This was introduced to 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.
@@ -3048,7 +3069,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}
@@ -3624,7 +3645,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}
@@ -3639,6 +3660,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
@@ -3752,6 +3774,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})
@@ -4262,6 +4291,10 @@ VERS_1.2 @{
 
 VERS_2.0 @{
                 bar1; bar2;
+        extern "C++" @{       
+                ns::*;
+                "int f(int, double)";
+         @}         
 @} VERS_1.2;
 @end smallexample
 
@@ -4273,6 +4306,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}
@@ -4382,6 +4417,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
@@ -4399,6 +4444,7 @@ expressions.
 @menu
 * Constants::                  Constants
 * Symbols::                    Symbol Names
+* Orphan Sections::            Orphan Sections
 * Location Counter::           The Location Counter
 * Operators::                  Operators
 * Evaluation::                 Evaluation
@@ -4460,6 +4506,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 .
This page took 0.025484 seconds and 4 git commands to generate.