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.