Group Section
Some sections occur in interrelated groups. For example, an out-of-line definition of an inline function might require additional information besides the section containing executable instructions. This additional information can be a read-only data section containing literals referenced, one or more debugging information sections, or other informational sections.
There can be internal references among group sections. However, these references make no sense if one of the sections were removed, or one of the sections were replaced by a duplicate from another object. Therefore, these groups are included, or these groups are omitted, from the linked object as a unit.
A section of type SHT_GROUP
defines such a grouping of
sections. The name of a symbol from one of the containing object's symbol tables provides a
signature for the section group. The section header of the SHT_GROUP
section specifies the identifying symbol entry. The sh_link
member
contains the section header index of the symbol table section that contains the entry. The
sh_info
member contains the symbol table index of the identifying
entry. The sh_flags
member of the section header contains the value
zero. The name of the section (sh_name
) is not specified.
The section data of a SHT_GROUP
section is an array of
Elf32_Word
entries. The first entry is a flag word. The remaining entries
are a sequence of section header indices.
The following flag is currently defined.
Table 14-14 ELF Group Section Flag
Name | Value |
---|---|
|
|
-
GRP_COMDAT
-
GRP_COMDAT
is aCOMDAT
group. This group can duplicate anotherCOMDAT
group in another object file, where duplication is defined as having the same group signature. In such cases, only one of the duplicate groups is retained by the link-editor. The members of the remaining groups are discarded.
The section header indices in the SHT_GROUP
section, identify
the sections that make up the group. These sections must have the SHF_GROUP
flag set in their sh_flags
section header member. If the
link-editor decides to remove the section group, the link-editor removes all members of the
group.
To facilitate removing a group without leaving dangling references and with only minimal processing of the symbol table, the following rules are followed.
-
References to the sections comprising a group from sections outside of the group must be made through symbol table entries with
STB_GLOBAL
orSTB_WEAK
binding and section indexSHN_UNDEF
. A definition of the same symbol in the object containing the reference must have a separate symbol table entry from the reference. Sections outside of the group can not reference symbols withSTB_LOCAL
binding for addresses that are contained in the group's sections, including symbols with typeSTT_SECTION
. -
Non-symbol references to the sections comprising a group are not allowed from outside the group. For example, you cannot use a group member's section header index in an
sh_link
orsh_info
member. -
A symbol table entry defined relative to one of the group's sections can be removed if the group members are discarded. This removal occurs if the symbol table entry is contained in a symbol table section that is not part of the group.