GNU Info

Info Node: (gcc-295.info)Sections

(gcc-295.info)Sections


Next: PIC Prev: Costs Up: Target Macros
Enter node , (file) or (file)node

Dividing the Output into Sections (Texts, Data, ...)
====================================================

   An object file is divided into sections containing different types of
data.  In the most common case, there are three sections: the "text
section", which holds instructions and read-only data; the "data
section", which holds initialized writable data; and the "bss section",
which holds uninitialized data.  Some systems have other kinds of
sections.

   The compiler must tell the assembler when to switch sections.  These
macros control what commands to output to tell the assembler this.  You
can also define additional sections.

`TEXT_SECTION_ASM_OP'
     A C expression whose value is a string containing the assembler
     operation that should precede instructions and read-only data.
     Normally `".text"' is right.

`DATA_SECTION_ASM_OP'
     A C expression whose value is a string containing the assembler
     operation to identify the following data as writable initialized
     data.  Normally `".data"' is right.

`SHARED_SECTION_ASM_OP'
     If defined, a C expression whose value is a string containing the
     assembler operation to identify the following data as shared data.
     If not defined, `DATA_SECTION_ASM_OP' will be used.

`BSS_SECTION_ASM_OP'
     If defined, a C expression whose value is a string containing the
     assembler operation to identify the following data as
     uninitialized global data.  If not defined, and neither
     `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
     uninitialized global data will be output in the data section if
     `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
     used.

`SHARED_BSS_SECTION_ASM_OP'
     If defined, a C expression whose value is a string containing the
     assembler operation to identify the following data as
     uninitialized global shared data.  If not defined, and
     `BSS_SECTION_ASM_OP' is, the latter will be used.

`INIT_SECTION_ASM_OP'
     If defined, a C expression whose value is a string containing the
     assembler operation to identify the following data as
     initialization code.  If not defined, GNU CC will assume such a
     section does not exist.

`EXTRA_SECTIONS'
     A list of names for sections other than the standard two, which are
     `in_text' and `in_data'.  You need not define this macro on a
     system with no other sections (that GCC needs to use).

`EXTRA_SECTION_FUNCTIONS'
     One or more functions to be defined in `varasm.c'.  These
     functions should do jobs analogous to those of `text_section' and
     `data_section', for your additional sections.  Do not define this
     macro if you do not define `EXTRA_SECTIONS'.

`READONLY_DATA_SECTION'
     On most machines, read-only variables, constants, and jump tables
     are placed in the text section.  If this is not the case on your
     machine, this macro should be defined to be the name of a function
     (either `data_section' or a function defined in `EXTRA_SECTIONS')
     that switches to the section to be used for read-only items.

     If these items should be placed in the text section, this macro
     should not be defined.

`SELECT_SECTION (EXP, RELOC)'
     A C statement or statements to switch to the appropriate section
     for output of EXP.  You can assume that EXP is either a `VAR_DECL'
     node or a constant of some sort.  RELOC indicates whether the
     initial value of EXP requires link-time relocations.  Select the
     section by calling `text_section' or one of the alternatives for
     other sections.

     Do not define this macro if you put all read-only variables and
     constants in the read-only data section (usually the text section).

`SELECT_RTX_SECTION (MODE, RTX)'
     A C statement or statements to switch to the appropriate section
     for output of RTX in mode MODE.  You can assume that RTX is some
     kind of constant in RTL.  The argument MODE is redundant except in
     the case of a `const_int' rtx.  Select the section by calling
     `text_section' or one of the alternatives for other sections.

     Do not define this macro if you put all constants in the read-only
     data section.

`JUMP_TABLES_IN_TEXT_SECTION'
     Define this macro to be an expression with a non-zero value if jump
     tables (for `tablejump' insns) should be output in the text
     section, along with the assembler instructions.  Otherwise, the
     readonly data section is used.

     This macro is irrelevant if there is no separate readonly data
     section.

`ENCODE_SECTION_INFO (DECL)'
     Define this macro if references to a symbol must be treated
     differently depending on something about the variable or function
     named by the symbol (such as what section it is in).

     The macro definition, if any, is executed immediately after the
     rtl for DECL has been created and stored in `DECL_RTL (DECL)'.
     The value of the rtl will be a `mem' whose address is a
     `symbol_ref'.

     The usual thing for this macro to do is to record a flag in the
     `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
     name string in the `symbol_ref' (if one bit is not enough
     information).

`STRIP_NAME_ENCODING (VAR, SYM_NAME)'
     Decode SYM_NAME and store the real name part in VAR, sans the
     characters that encode section info.  Define this macro if
     `ENCODE_SECTION_INFO' alters the symbol's name string.

`UNIQUE_SECTION_P (DECL)'
     A C expression which evaluates to true if DECL should be placed
     into a unique section for some target-specific reason.  If you do
     not define this macro, the default is `0'.  Note that the flag
     `-ffunction-sections' will also cause functions to be placed into
     unique sections.

`UNIQUE_SECTION (DECL, RELOC)'
     A C statement to build up a unique section name, expressed as a
     STRING_CST node, and assign it to `DECL_SECTION_NAME (DECL)'.
     RELOC indicates whether the initial value of EXP requires
     link-time relocations.  If you do not define this macro, GNU CC
     will use the symbol name prefixed by `.' as the section name.


automatically generated by info2www version 1.2.2.9