Update the description of the linker script's TYPE directive.
authorNick Clifton <nickc@redhat.com>
Thu, 8 Dec 2022 13:06:31 +0000 (13:06 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 8 Dec 2022 13:06:31 +0000 (13:06 +0000)
PR 29861
* ld.texi (Output Section Type): Note that setting the output
section type only works if the section contains untyped data.

ld/ChangeLog
ld/ld.texi

index e8dc0908cfa2497faedc24cceed23c248d3b0b70..8cff90b559bca6bb7b2f9d03e21683f2a53d4218 100644 (file)
@@ -1,3 +1,9 @@
+2022-12-08  Nick Clifton  <nickc@redhat.com>
+
+       PR 29861
+       * ld.texi (Output Section Type): Note that setting the output
+       section type only works if the section contains untyped data.
+
 2022-12-05  Nick Clifton  <nickc@redhat.com>
 
        PR 29849
index 3836465730cf4a31123b72d7d4960491e5dafcfe..9b937f0c0725c924ef177cbba58c25135d3eab30 100644 (file)
@@ -5548,11 +5548,14 @@ Each output section may have a type.  The type is a keyword in
 parentheses.  The following types are defined:
 
 @table @code
+
 @item NOLOAD
 The section should be marked as not loadable, so that it will not be
 loaded into memory when the program is run.
+
 @item READONLY
 The section should be marked as read-only.
+
 @item DSECT
 @item COPY
 @item INFO
@@ -5561,6 +5564,7 @@ These type names are supported for backward compatibility, and are
 rarely used.  They all have the same effect: the section should be
 marked as not allocatable, so that no memory is allocated for the
 section when the program is run.
+
 @item TYPE = @var{type}
 Set the section type to the integer @var{type}. When generating an ELF
 output file, type names @code{SHT_PROGBITS}, @code{SHT_STRTAB},
@@ -5568,9 +5572,29 @@ output file, type names @code{SHT_PROGBITS}, @code{SHT_STRTAB},
 @code{SHT_FINI_ARRAY}, and @code{SHT_PREINIT_ARRAY} are also allowed
 for @var{type}.  It is the user's responsibility to ensure that any
 special requirements of the section type are met.
+
+Note - the TYPE only is used if some or all of the contents of the
+section do not have an implicit type of their own.  So for example:
+@smallexample
+  .foo . TYPE = SHT_PROGBITS @{ *(.bar) @}
+@end smallexample
+will set the type of section @samp{.foo} to the type of the section
+@samp{.bar} in the input files, which may not be the SHT_PROGBITS
+type.  Whereas:
+@smallexample
+  .foo . TYPE = SHT_PROGBITS @{ BYTE(1) @}
+@end smallexample
+will set the type of @samp{.foo} to SHT_PROGBBITS.  If it is necessary
+to override the type of incoming sections and force the output section
+type then an extra piece of untyped data will be needed:
+@smallexample
+  .foo . TYPE = SHT_PROGBITS @{ BYTE(1); *(.bar) @}
+@end smallexample
+
 @item READONLY ( TYPE = @var{type} )
 This form of the syntax combines the @var{READONLY} type with the
 type specified by @var{type}.
+
 @end table
 
 @kindex NOLOAD