(ld) Output Section Keywords

(ld) Output Section Data (ld) SECTIONS (ld) Output Section Discarding
 
 Output section keywords
 -----------------------
 
 There are a couple of keywords which can appear as output section
 commands.
 
 `CREATE_OBJECT_SYMBOLS'
      The command tells the linker to create a symbol for each input
      file.  The name of each symbol will be the name of the
      corresponding input file.  The section of each symbol will be the
      output section in which the `CREATE_OBJECT_SYMBOLS' command
      appears.
 
      This is conventional for the a.out object file format.  It is not
      normally used for any other object file format.
 
 `CONSTRUCTORS'
      When linking using the a.out object file format, the linker uses an
      unusual set construct to support C++ global constructors and
      destructors.  When linking object file formats which do not support
      arbitrary sections, such as ECOFF and XCOFF, the linker will
      automatically recognize C++ global constructors and destructors by
      name.  For these object file formats, the `CONSTRUCTORS' command
      tells the linker to place constructor information in the output
      section where the `CONSTRUCTORS' command appears.  The
      `CONSTRUCTORS' command is ignored for other object file formats.
 
      The symbol `__CTOR_LIST__' marks the start of the global
      constructors, and the symbol `__DTOR_LIST' marks the end.  The
      first word in the list is the number of entries, followed by the
      address of each constructor or destructor, followed by a zero
      word.  The compiler must arrange to actually run the code.  For
      these object file formats GNU C++ normally calls constructors from
      a subroutine `__main'; a call to `__main' is automatically
      inserted into the startup code for `main'.  GNU C++ normally runs
      destructors either by using `atexit', or directly from the function
      `exit'.
 
      For object file formats such as `COFF' or `ELF' which support
      arbitrary section names, GNU C++ will normally arrange to put the
      addresses of global constructors and destructors into the `.ctors'
      and `.dtors' sections.  Placing the following sequence into your
      linker script will build the sort of table which the GNU C++
      runtime code expects to see.
 
                 __CTOR_LIST__ = .;
                 LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
                 *(.ctors)
                 LONG(0)
                 __CTOR_END__ = .;
                 __DTOR_LIST__ = .;
                 LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
                 *(.dtors)
                 LONG(0)
                 __DTOR_END__ = .;
 
      If you are using the GNU C++ support for initialization priority,
      which provides some control over the order in which global
      constructors are run, you must sort the constructors at link time
      to ensure that they are executed in the correct order.  When using
      the `CONSTRUCTORS' command, use `SORT(CONSTRUCTORS)' instead.
      When using the `.ctors' and `.dtors' sections, use
      `*(SORT(.ctors))' and `*(SORT(.dtors))' instead of just
      `*(.ctors)' and `*(.dtors)'.
 
      Normally the compiler and linker will handle these issues
      automatically, and you will not need to concern yourself with
      them.  However, you may need to consider this if you are using C++
      and writing your own linker scripts.
 
 
(ld) Output Section Data (ld) SECTIONS (ld) Output Section Discarding
automatically generated by info2html