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, including spacing,
containing the assembler operation that should precede
instructions and read-only data. Normally `"\t.text"' is right.
`DATA_SECTION_ASM_OP'
A C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data
as writable initialized data. Normally `"\t.data"' is right.
`SHARED_SECTION_ASM_OP'
If defined, a C expression whose value is a string, including
spacing, 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, including
spacing, 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, including
spacing, 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, including
spacing, containing the assembler operation to identify the
following data as initialization code. If not defined, GCC will
assume such a section does not exist.
`FINI_SECTION_ASM_OP'
If defined, a C expression whose value is a string, including
spacing, containing the assembler operation to identify the
following data as finalization code. If not defined, GCC will
assume such a section does not exist.
`CRT_CALL_STATIC_FUNCTION'
If defined, a C statement that calls the function named as the sole
argument of this macro. This is used in `crtstuff.c' if
`INIT_SECTION_ASM_OP' or `FINI_SECTION_ASM_OP' to calls to
initialization and finalization functions from the init and fini
sections. By default, this macro is a simple function call. Some
ports need hand-crafted assembly code to avoid dependencies on
registers initialized in the function prologue or to ensure that
constant pools don't end up too far way in the text section.
`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 nonzero 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, GCC will
use the symbol name prefixed by `.' as the section name. Note -
this macro can now be called for uninitialised data items as well
as initialised data and functions.