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
"\t.text"
is right.
TEXT_SECTION
TEXT_SECTION_ASM_OP
is enough. The MIPS port uses this to sort all functions after all data
declarations.
DATA_SECTION_ASM_OP
"\t.data"
is right.
SHARED_SECTION_ASM_OP
DATA_SECTION_ASM_OP
will be used.
BSS_SECTION_ASM_OP
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
BSS_SECTION_ASM_OP
is, the latter will be used.
INIT_SECTION_ASM_OP
FINI_SECTION_ASM_OP
CRT_CALL_STATIC_FUNCTION (
section_op,
function)
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 uses 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.
FORCE_CODE_SECTION_ALIGN
.init
and .fini
sections to have to same alignment
and thus prevent the linker from having to add any padding.
EXTRA_SECTIONS
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
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
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,
align)
VAR_DECL
node or a constant of some sort. reloc
indicates whether the initial value of exp requires link-time
relocations. Bit 1 is set when variable contains local relocations
only, while bit 2 is set for global relocations.
Select the section by calling text_section
or one
of the alternatives for other sections. align is the constant
alignment in bits.
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,
align)
const_int
rtx. Select the section by
calling text_section
or one of the alternatives for other
sections. align is the constant alignment in bits.
Do not define this macro if you put all constants in the read-only
data section.
JUMP_TABLES_IN_TEXT_SECTION
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)
The macro definition, if any, is executed under two circumstances. One
is immediately after the rtl for decl that represents a variable
or a function 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 other is immediately after the rtl for
decl that represents a constant has been created and stored in
TREE_CST_RTL (
decl)
. The macro is called once for each
distinct constant in a source file.
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)
ENCODE_SECTION_INFO
alters the symbol's name string.
UNIQUE_SECTION (
decl,
reloc)
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 uninitialized data items as well as
initialized data and functions.