1308 lines
44 KiB
HTML
1308 lines
44 KiB
HTML
<html>
|
|
<title>Sections </title><p>
|
|
<h1>Sections</h1><p>
|
|
An object file's section header table lets one
|
|
locate all the file's sections.
|
|
The section header table is an array of <code>Elf32_Shdr</code>
|
|
or <code>Elf64_Shdr</code> structures
|
|
as described below.
|
|
A section header table index is a subscript into this array.
|
|
The ELF header's <code>e_shoff</code>
|
|
member gives the byte offset from the beginning of the
|
|
file to the section header table.
|
|
<code>e_shnum</code> normally tells how many entries the section header table contains.
|
|
<code>e_shentsize</code> gives the size in bytes of each entry.
|
|
<p>
|
|
If the number of sections is greater than or equal to
|
|
<code>SHN_LORESERVE</code> (<code>0xff00</code>), <code>e_shnum</code>
|
|
has the value <code>SHN_UNDEF</code> (<code>0</code>) and the
|
|
actual number of section header table
|
|
entries is contained in the <code>sh_size</code> field of
|
|
the section header at index <code>0</code>
|
|
(otherwise, the <code>sh_size</code> member of the initial entry
|
|
contains <code>0</code>).
|
|
<p>
|
|
Some section header table indexes are reserved in contexts
|
|
where index size is restricted, for example, the <code>st_shndx</code>
|
|
member of a symbol table entry and the <code>e_shnum</code> and
|
|
<code>e_shstrndx</code> members of the ELF header.
|
|
In such contexts, the reserved values do not represent actual
|
|
sections in the object file. Also in such contexts, an escape
|
|
value indicates that the actual section
|
|
index is to be found elsewhere, in a larger field.
|
|
<hr>
|
|
<b>Figure 4-7: Special Section Indexes</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th><b>Name</b></th>
|
|
<th><b>Value</b></th>
|
|
<tr>
|
|
<td><code>SHN_UNDEF</code></td>
|
|
<td align=right><code>0</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_LORESERVE</code></td>
|
|
<td align=right><code>0xff00</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_LOPROC</code></td>
|
|
<td align=right><code>0xff00</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_HIPROC</code></td>
|
|
<td align=right><code>0xff1f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_LOOS</code></td>
|
|
<td align=right><code>0xff20</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_HIOS</code></td>
|
|
<td align=right><code>0xff3f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_ABS</code></td>
|
|
<td align=right><code>0xfff1</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_COMMON</code></td>
|
|
<td align=right><code>0xfff2</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_XINDEX</code></td>
|
|
<td align=right><code>0xffff</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHN_HIRESERVE</code></td>
|
|
<td align=right><code>0xffff</code></td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<p>
|
|
<DL COMPACT>
|
|
<p><dt><code>SHN_UNDEF</code><dd>
|
|
This value marks an undefined, missing, irrelevant, or
|
|
otherwise meaningless section reference.
|
|
For example, a symbol ``defined'' relative to section number
|
|
<code>SHN_UNDEF</code> is an undefined symbol.
|
|
</dl>
|
|
<hr>
|
|
<img src=warning.gif alt="NOTE:">
|
|
Although index 0 is reserved as the undefined value,
|
|
the section header table contains an entry for index 0.
|
|
If the <code>e_shnum</code>
|
|
member of the ELF header says a file has 6 entries
|
|
in the section header table, they have the indexes 0 through 5.
|
|
The contents of the initial entry are specified later in this
|
|
section.
|
|
<hr><p>
|
|
<DL COMPACT>
|
|
<p><dt><code>SHN_LORESERVE</code><dd>
|
|
This value specifies the lower bound of the
|
|
range of reserved indexes.
|
|
<p><dt><code>SHN_LOPROC</code> through <code>SHN_HIPROC</code><dd>
|
|
Values in this inclusive range
|
|
are reserved for processor-specific semantics.
|
|
<p><dt><code>SHN_LOOS</code> through <code>SHN_HIOS</code><dd>
|
|
Values in this inclusive range
|
|
are reserved for operating system-specific semantics.
|
|
<p><dt><code>SHN_ABS</code><dd>
|
|
This value specifies absolute values for the corresponding reference.
|
|
For example, symbols defined relative to section number <code>SHN_ABS</code>
|
|
have absolute values and are not affected by relocation.
|
|
<p><dt><code>SHN_COMMON</code><dd>
|
|
Symbols defined relative to this section are common symbols,
|
|
such as FORTRAN
|
|
<code>COMMON</code>
|
|
or unallocated C external variables.
|
|
<p><dt><code>SHN_XINDEX</code><dd>
|
|
This value is an escape value.
|
|
It indicates that the actual section header index is too large to fit
|
|
in the containing field and is to be found in another location
|
|
(specific to the structure where it appears).
|
|
<p><dt><code>SHN_HIRESERVE</code><dd>
|
|
This value specifies the upper bound of the
|
|
range of reserved indexes.
|
|
The system reserves indexes between <code>SHN_LORESERVE</code>
|
|
and <code>SHN_HIRESERVE</code>,
|
|
inclusive; the values do not reference the section header table.
|
|
The section header table does not
|
|
contain entries for the reserved indexes.
|
|
</dl>
|
|
<p>
|
|
Sections contain all information in an object file
|
|
except the ELF header, the program header table,
|
|
and the section header table.
|
|
Moreover, object files' sections satisfy several conditions.
|
|
<ul>
|
|
<p><li>
|
|
Every section in an object file has exactly one
|
|
section header describing it.
|
|
Section headers may exist that do not have a section.
|
|
<p><li>
|
|
Each section occupies one contiguous (possibly empty)
|
|
sequence of bytes within a file.
|
|
<p><li>
|
|
Sections in a file may not overlap.
|
|
No byte in a file resides in more than one section.
|
|
<p><li>
|
|
An object file may have inactive space.
|
|
The various headers and the sections might not
|
|
``cover'' every byte in an object file.
|
|
The contents of the inactive data are unspecified.
|
|
</ul>
|
|
A section header has the following structure.
|
|
<hr>
|
|
<a name="section_header"></a>
|
|
<pre>
|
|
<b>Figure 4-8: Section Header</b>
|
|
<p>
|
|
<code>
|
|
typedef struct {
|
|
Elf32_Word sh_name;
|
|
Elf32_Word sh_type;
|
|
Elf32_Word sh_flags;
|
|
Elf32_Addr sh_addr;
|
|
Elf32_Off sh_offset;
|
|
Elf32_Word sh_size;
|
|
Elf32_Word sh_link;
|
|
Elf32_Word sh_info;
|
|
Elf32_Word sh_addralign;
|
|
Elf32_Word sh_entsize;
|
|
} Elf32_Shdr;
|
|
|
|
typedef struct {
|
|
Elf64_Word sh_name;
|
|
Elf64_Word sh_type;
|
|
Elf64_Xword sh_flags;
|
|
Elf64_Addr sh_addr;
|
|
Elf64_Off sh_offset;
|
|
Elf64_Xword sh_size;
|
|
Elf64_Word sh_link;
|
|
Elf64_Word sh_info;
|
|
Elf64_Xword sh_addralign;
|
|
Elf64_Xword sh_entsize;
|
|
} Elf64_Shdr;
|
|
</code>
|
|
</pre>
|
|
<hr>
|
|
<p>
|
|
<DL COMPACT>
|
|
<p><dt><code>sh_name</code><dd>
|
|
This member specifies the name of the section.
|
|
Its value is an index into the section header
|
|
string table section [see
|
|
<a href=ch4.strtab.html>``String Table''</a> below],
|
|
giving the location of a null-terminated string.
|
|
<p><dt><code>sh_type</code><dd>
|
|
This member categorizes the section's contents and semantics.
|
|
Section types and their descriptions appear
|
|
<a href="#sh_type">below</a>.
|
|
<p>
|
|
<p><dt><code>sh_flags</code><dd>
|
|
Sections support 1-bit flags that describe miscellaneous attributes.
|
|
Flag definitions appear
|
|
<a href=#sh_flags>below</a>.
|
|
<p>
|
|
<p><dt><code>sh_addr</code><dd>
|
|
If the section will appear in the memory image of a process,
|
|
this member gives the address at which the section's first
|
|
byte should reside.
|
|
Otherwise, the member contains 0.
|
|
<p><dt><code>sh_offset</code><dd>
|
|
This member's value gives the byte offset from the beginning of the file
|
|
to the first byte in the section.
|
|
One section type, <code>SHT_NOBITS</code>
|
|
described
|
|
<a href=#sh_type>below</a>,
|
|
occupies no space in the file, and its
|
|
<code>sh_offset</code> member locates the conceptual placement in the file.
|
|
<p><dt><code>sh_size</code><dd>
|
|
This member gives the section's size in bytes.
|
|
Unless the section type is
|
|
<code>SHT_NOBITS</code>, the section occupies <code>sh_size</code>
|
|
bytes in the file.
|
|
A section of type <code>SHT_NOBITS</code>
|
|
may have a non-zero size, but it occupies no space in the file.
|
|
<p><dt><code>sh_link</code><dd>
|
|
This member holds a section header table index link,
|
|
whose interpretation depends on the section type.
|
|
A <a href=#sh_link>table </a> below
|
|
describes the values.
|
|
<p><dt><code>sh_info</code><dd>
|
|
This member holds extra information,
|
|
whose interpretation depends on the section type.
|
|
A <a href=#sh_link>table</a> below
|
|
describes the values. If the <code>sh_flags</code> field for this
|
|
section header includes the attribute <a href=#shf_info_link><code>SHF_INFO_LINK</code></a>, then this member represents a section header table index.
|
|
<p><dt><code>sh_addralign</code><dd>
|
|
Some sections have address alignment constraints.
|
|
For example, if a section holds a doubleword,
|
|
the system must ensure doubleword alignment for the entire section.
|
|
The value of <code>sh_addr</code>
|
|
must be congruent to 0, modulo the value of <code>sh_addralign</code>.
|
|
Currently, only 0 and positive integral powers of two are allowed.
|
|
Values 0 and 1 mean the section has no alignment constraints.
|
|
<p><dt><code>sh_entsize</code><dd>
|
|
Some sections hold a table of fixed-size entries,
|
|
such as a symbol table.
|
|
For such a section, this member gives the size in bytes of each entry.
|
|
The member contains 0 if the section does not hold a table
|
|
of fixed-size entries.
|
|
</dl>
|
|
<p>
|
|
A section header's <code>sh_type</code> member specifies the section's semantics.
|
|
<hr>
|
|
<a name="sh_type"</a>
|
|
<b>Figure 4-9: Section Types,</b><code>sh_type</code></b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th><b>Name</b></th>
|
|
<th><b>Value</b></th>
|
|
<tr>
|
|
<td><code>SHT_NULL</code></td>
|
|
<td align=right><code>0</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td align=right><code>1</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_SYMTAB</code></td>
|
|
<td align=right><code>2</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_STRTAB</code></td>
|
|
<td align=right><code>3</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_RELA</code></td>
|
|
<td align=right><code>4</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_HASH</code></td>
|
|
<td align=right><code>5</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_DYNAMIC</code></td>
|
|
<td align=right><code>6</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_NOTE</code></td>
|
|
<td align=right><code>7</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_NOBITS</code></td>
|
|
<td align=right><code>8</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_REL</code></td>
|
|
<td align=right><code>9</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_SHLIB</code></td>
|
|
<td align=right><code>10</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_DYNSYM</code></td>
|
|
<td align=right><code>11</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_INIT_ARRAY</code></td>
|
|
<td align=right><code>14</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_FINI_ARRAY</code></td>
|
|
<td align=right><code>15</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_PREINIT_ARRAY</code></td>
|
|
<td align=right><code>16</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_GROUP</code></td>
|
|
<td align=right><code>17</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_SYMTAB_SHNDX</code></td>
|
|
<td align=right><code>18</code></td>
|
|
</tr>
|
|
<td><code>SHT_LOOS</code></td>
|
|
<td align=right><code>0x60000000</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_HIOS</code></td>
|
|
<td align=right><code>0x6fffffff</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_LOPROC</code></td>
|
|
<td align=right><code>0x70000000</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_HIPROC</code></td>
|
|
<td align=right><code>0x7fffffff</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_LOUSER</code></td>
|
|
<td align=right><code>0x80000000</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_HIUSER</code></td>
|
|
<td align=right><code>0xffffffff</code></td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<p>
|
|
<DL COMPACT>
|
|
<p><dt><code>SHT_NULL</code><dd>
|
|
This value marks the section header as inactive;
|
|
it does not have an associated section.
|
|
Other members of the section header have undefined values.
|
|
<p><dt><code>SHT_PROGBITS</code><dd>
|
|
The section holds information defined by the program,
|
|
whose format and meaning are determined solely by the program.
|
|
<p><dt><code>SHT_SYMTAB</code> and <code>SHT_DYNSYM</code><dd>
|
|
These sections hold a symbol table.
|
|
Currently, an object file may have only one section of each type,
|
|
but this restriction may be relaxed in the future.
|
|
Typically, <code>SHT_SYMTAB</code>
|
|
provides symbols for link editing, though it may also be
|
|
used for dynamic linking.
|
|
As a complete symbol table, it may contain many symbols unnecessary
|
|
for dynamic linking.
|
|
Consequently, an object file may also contain a <code>SHT_DYNSYM</code>
|
|
section, which holds a minimal set of dynamic linking symbols,
|
|
to save space.
|
|
See <a href=ch4.symtab.html>``Symbol Table''</a> below
|
|
for details.
|
|
<p><dt><code>SHT_STRTAB</code><dd>
|
|
The section holds a string table.
|
|
An object file may have multiple string table sections.
|
|
See <a href=ch4.strtab.html>``String Table''</a>
|
|
below for details.
|
|
<p><dt><code>SHT_RELA</code><dd>
|
|
The section holds relocation entries
|
|
with explicit addends, such as type
|
|
<code>Elf32_Rela</code> for the 32-bit class of object files
|
|
or type <code>Elf64_Rela</code> for the 64-bit class of object files.
|
|
An object file may have multiple relocation sections.
|
|
<a href=ch4.reloc.html>``Relocation''</a>
|
|
below for details.
|
|
<p><dt><code>SHT_HASH</code><dd>
|
|
The section holds a symbol hash table.
|
|
Currently, an object file may have only one hash table,
|
|
but this restriction may be relaxed in the future.
|
|
See
|
|
<a href=ch5.dynamic.html#hash>``Hash Table''</a>
|
|
in the Chapter 5 for details.
|
|
<p><dt><code>SHT_DYNAMIC</code><dd>
|
|
The section holds information for dynamic linking.
|
|
Currently, an object file may have only one dynamic section,
|
|
but this restriction may be relaxed in the future.
|
|
See
|
|
<a href=ch5.dynamic.html#dynamic_section>``Dynamic Section''</a>
|
|
in Chapter 5 for details.
|
|
<p><dt><code>SHT_NOTE</code><dd>
|
|
The section holds information that marks the file in some way.
|
|
See
|
|
<a href=ch5.pheader.html#note_section>``Note Section''</a>
|
|
in Chapter 5 for details.
|
|
<p><dt><code>SHT_NOBITS</code><dd>
|
|
A section of this type occupies no space in the file but
|
|
otherwise resembles
|
|
<code>SHT_PROGBITS</code>.
|
|
Although this section contains no bytes, the <code>sh_offset</code>
|
|
member contains the conceptual file offset.
|
|
<p><dt><code>SHT_REL</code><dd>
|
|
The section holds relocation entries
|
|
without explicit addends, such as type
|
|
<code>Elf32_Rel</code> for the 32-bit class of object files or
|
|
type <code>Elf64_Rel</code> for the 64-bit class of object files.
|
|
An object file may have multiple relocation sections.
|
|
See <a href=ch4.reloc.html>``Relocation''</a>
|
|
below for details.
|
|
<p><dt><code>SHT_SHLIB</code><dd>
|
|
This section type is reserved but has unspecified semantics.
|
|
<a name=init_array></a>
|
|
<p><dt><code>SHT_INIT_ARRAY</code><dd>
|
|
This section contains an array of pointers to initialization functions,
|
|
as described in <a href=ch5.dynamic.html#init_fini>``Initialization and
|
|
Termination Functions''</a> in Chapter 5. Each pointer in the array
|
|
is taken as a parameterless procedure with a void return.
|
|
<p><dt><code>SHT_FINI_ARRAY</code><dd>
|
|
This section contains an array of pointers to termination functions,
|
|
as described in <a href=ch5.dynamic.html#init_fini>``Initialization and
|
|
Termination Functions''</a> in Chapter 5. Each pointer in the array
|
|
is taken as a parameterless procedure with a void return.
|
|
<p><dt><code>SHT_PREINIT_ARRAY</code><dd>
|
|
This section contains an array of pointers to functions that are
|
|
invoked before all other initialization functions,
|
|
as described in <a href=ch5.dynamic.html#init_fini>``Initialization and
|
|
Termination Functions''</a> in Chapter 5. Each pointer in the array
|
|
is taken as a parameterless procedure with a void return.
|
|
<p><dt><code>SHT_GROUP</code><dd>
|
|
This section defines a section group. A section group
|
|
is a set of sections that are related and that must be treated
|
|
specially by the linker (see <a href=#section_groups>below</a> for further
|
|
details). Sections of type <code>SHT_GROUP</code> may appear only
|
|
in relocatable objects (objects with the ELF header <code>e_type</code>
|
|
member set to <code>ET_REL</code>). The section header table entry
|
|
for a group section must appear in the section header table
|
|
before the entries for any of the sections that are members of
|
|
the group.
|
|
<p><dt><code>SHT_SYMTAB_SHNDX</code><dd>
|
|
<a name=many_sections></a>
|
|
This section is associated with a section of type <code>SHT_SYMTAB</code>
|
|
and is required if any of the section header indexes referenced
|
|
by that symbol table contain the escape value <code>SHN_XINDEX</code>.
|
|
The section is an array of <code>Elf32_Word</code> values.
|
|
Each value corresponds one to one with a symbol table entry
|
|
and appear in the same order as those entries.
|
|
The values represent the section header indexes against which
|
|
the symbol table entries are defined.
|
|
Only if corresponding symbol table entry's <code>st_shndx</code> field
|
|
contains the escape value <code>SHN_XINDEX</code>
|
|
will the matching <code>Elf32_Word</code> hold the actual section header index;
|
|
otherwise, the entry must be <code>SHN_UNDEF</code> (<code>0</code>).
|
|
<p><dt><code>SHT_LOOS</code> through <code>SHT_HIOS</code><dd>
|
|
Values in this inclusive range
|
|
are reserved for operating system-specific semantics.
|
|
<p><dt><code>SHT_LOPROC</code> through <code>SHT_HIPROC</code><dd>
|
|
Values in this inclusive range
|
|
are reserved for processor-specific semantics.
|
|
<p><dt><code>SHT_LOUSER</code><dd>
|
|
This value specifies the lower bound of the range of
|
|
indexes reserved for application programs.
|
|
<p><dt><code>SHT_HIUSER</code><dd>
|
|
This value specifies the upper bound of the range of
|
|
indexes reserved for application programs.
|
|
Section types between <code>SHT_LOUSER</code> and
|
|
<code>SHT_HIUSER</code> may be used by the application, without conflicting with
|
|
current or future system-defined section types.
|
|
</dl>
|
|
<p>
|
|
Other section type values are reserved.
|
|
As mentioned before, the section header for index 0 (<code>SHN_UNDEF</code>)
|
|
exists, even though the index marks undefined section references.
|
|
This entry holds the following.
|
|
<hr>
|
|
<b>Figure 4-10: Section Header Table Entry:Index 0</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th><b>Name</b></th>
|
|
<th><b>Value</b></th>
|
|
<th><b>Note</b></th>
|
|
<tr>
|
|
<td><code>sh_name</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No name</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_type</code></td>
|
|
<td align=center><code>SHT_NULL</code></td>
|
|
<td>Inactive</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_flags</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No flags</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_addr</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No address</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_offset</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No offset</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_size</code></td>
|
|
<td align=center>Unspecified</td>
|
|
<td>If non-zero, the actual number of section header entries</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_link</code></td>
|
|
<td align=center>Unspecified</td>
|
|
<td>If non-zero, the index of the section header string table section</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_info</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No auxiliary information</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_addralign</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No alignment</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>sh_entsize</code></td>
|
|
<td align=center><code>0</code></td>
|
|
<td>No entries</td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<p>
|
|
A section header's <code>sh_flags</code>
|
|
member holds 1-bit flags that describe the section's attributes.
|
|
Defined values appear in the following table;
|
|
other values are reserved.
|
|
<a name="sh_flags"</a>
|
|
<hr>
|
|
<b>Figure 4-11: Section Attribute Flags</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th>Name</th>
|
|
<th>Value</th>
|
|
<tr>
|
|
<td><code>SHF_WRITE</code></td>
|
|
<td align=right><code>0x1</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_ALLOC</code></td>
|
|
<td align=right><code>0x2</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_EXECINSTR</code></td>
|
|
<td align=right><code>0x4</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_MERGE</code></td>
|
|
<td align=right><code>0x10</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_STRINGS</code></td>
|
|
<td align=right><code>0x20</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_INFO_LINK</code></td>
|
|
<td align=right><code>0x40</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_LINK_ORDER</code></td>
|
|
<td align=right><code>0x80</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_OS_NONCONFORMING</code></td>
|
|
<td align=right><code>0x100</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_GROUP</code></td>
|
|
<td align=right><code>0x200</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_TLS</code></td>
|
|
<td align=right><code>0x400</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_MASKOS</code></td>
|
|
<td align=right><code>0x0ff00000</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHF_MASKPROC</code></td>
|
|
<td align=right><code>0xf0000000</code></td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<p>
|
|
If a flag bit is set in <code>sh_flags</code>,
|
|
the attribute is ``on'' for the section.
|
|
Otherwise, the attribute is ``off'' or does not apply.
|
|
Undefined attributes are set to zero.
|
|
<DL COMPACT>
|
|
<p><dt><code>SHF_WRITE</code><dd>
|
|
The section contains data that should be writable during
|
|
process execution.
|
|
<p><dt><code>SHF_ALLOC</code><dd>
|
|
The section occupies memory during process execution.
|
|
Some control sections do not reside in the memory image
|
|
of an object file; this attribute is off for those sections.
|
|
<p><dt><code>SHF_EXECINSTR</code><dd>
|
|
The section contains executable machine instructions.
|
|
<a name=shf_merge></a>
|
|
<p><dt><code>SHF_MERGE</code><dd>
|
|
The data in the section may be merged to eliminate duplication.
|
|
Unless the <code>SHF_STRINGS</code> flag is also set,
|
|
the data elements in the section are of a uniform size.
|
|
The size of each element is specified in the section
|
|
header's <code>sh_entsize</code> field.
|
|
If the <code>SHF_STRINGS</code> flag is also set,
|
|
the data elements consist of null-terminated character strings.
|
|
The size of each character is specified in the section
|
|
header's <code>sh_entsize</code> field.
|
|
<p>
|
|
Each element in the section is compared against other elements
|
|
in sections with the same name, type and flags.
|
|
Elements that would have identical values at program run-time
|
|
may be merged.
|
|
Relocations referencing elements of such sections must be
|
|
resolved to the merged locations of the referenced values.
|
|
Note that any relocatable values, including
|
|
values that would result in run-time relocations, must be
|
|
analyzed to determine whether the run-time values would actually
|
|
be identical. An ABI-conforming object file may not depend
|
|
on specific elements being merged, and an ABI-conforming
|
|
link editor may choose not to merge specific elements.
|
|
<a name=shf_strings></a>
|
|
<p><dt><code>SHF_STRINGS</code><dd>
|
|
The data elements in the section consist of null-terminated character
|
|
strings. The size of each character is specified in the section
|
|
header's <code>sh_entsize</code> field.
|
|
<a name=shf_info_link></a>
|
|
<p><dt><code>SHF_INFO_LINK</code><dd>
|
|
The <code>sh_info</code> field of this section header holds a section
|
|
header table index.
|
|
<a name=shf_link_order></a>
|
|
<p><dt><code>SHF_LINK_ORDER</code><dd>
|
|
This flag adds special ordering requirements for link editors.
|
|
The requirements apply if the
|
|
<code>sh_link</code> field of this section's header references
|
|
another section (the linked-to section).
|
|
If this section is combined with other
|
|
sections in the output file, it must appear in the same
|
|
relative order with respect to those sections, as the linked-to section
|
|
appears with respect to sections the linked-to section is combined with.
|
|
<p>
|
|
<hr>
|
|
<img src=warning.gif alt="NOTE:">
|
|
A typical use of this flag is to build a table that references text or
|
|
data sections in address order.
|
|
<hr>
|
|
<a name=shf_os_nonconforming></a>
|
|
<p><dt><code>SHF_OS_NONCONFORMING</code><dd>
|
|
This section requires special OS-specific processing
|
|
(beyond the standard <a href=#linking_rules>linking rules</a>)
|
|
to avoid incorrect behavior.
|
|
If this section has either an <code>sh_type</code> value
|
|
or contains <code>sh_flags</code> bits in the OS-specific ranges for
|
|
those fields, and a link editor processing this section does not
|
|
recognize those values, then the link editor should reject
|
|
the object file containing this section with an error.
|
|
<p><dt><code>SHF_GROUP</code><dd>
|
|
This section is a member (perhaps the only one) of a section group.
|
|
The section must be referenced by a section of type <code>SHT_GROUP</code>.
|
|
The <code>SHF_GROUP</code> flag may be set only for sections contained
|
|
in relocatable objects (objects with the ELF header <code>e_type</code>
|
|
member set to <code>ET_REL</code>).
|
|
See <a href=#section_groups>below</a> for further details.
|
|
<a name=shf_tls></a>
|
|
<p><dt><code>SHF_TLS</code><dd>
|
|
This section holds <i>Thread-Local Storage</i>,
|
|
meaning that each separate execution flow
|
|
has its own distinct instance of this data.
|
|
Implementations need not support this flag.
|
|
<p><dt><code>SHF_MASKOS</code><dd>
|
|
All bits included in this mask
|
|
are reserved for operating system-specific semantics.
|
|
<p><dt><code>SHF_MASKPROC</code><dd>
|
|
All bits included in this mask
|
|
are reserved for processor-specific semantics.
|
|
If meanings are specified, the processor supplement explains
|
|
them.
|
|
</dl>
|
|
<p>
|
|
Two members in the section header,
|
|
<code>sh_link</code> and <code>sh_info</code>,
|
|
hold special information, depending on section type.
|
|
<hr>
|
|
<a name="sh_link"></a>
|
|
<b>Figure 4-12:</b> <code>sh_link</code> <b>and</b> <code>sh_info</code> <b>Interpretation</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th><code>sh_type</code></th>
|
|
<th><code>sh_link</code></th>
|
|
<th><code>sh_info</code></th>
|
|
<tr>
|
|
<td><code>SHT_DYNAMIC</code></td>
|
|
<td>The section header index of
|
|
the string table used by
|
|
entries in the section.</td>
|
|
<td><code>0</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_HASH</code></td>
|
|
<td>The section header index of
|
|
the symbol table to which
|
|
the hash table applies.</td>
|
|
<td><code>0</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_REL</code><br><code>SHT_RELA</code></td>
|
|
<td>The section header index of
|
|
the associated symbol table.</td>
|
|
<td>The section header index of
|
|
the section to which the
|
|
relocation applies.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_SYMTAB</code><br><code>SHT_DYNSYM</code></td>
|
|
<td>The section header index of
|
|
the associated string table.</td>
|
|
<td>One greater than the symbol table index of the last local
|
|
symbol (binding <code>STB_LOCAL</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SHT_GROUP</code></td>
|
|
<td>The section header index of
|
|
the associated symbol table.</td>
|
|
<td>The symbol table index of an entry in the
|
|
associated symbol table. The name of the specified symbol table
|
|
entry provides a signature for the section group.</td>
|
|
</tr>
|
|
<td><code>SHT_SYMTAB_SHNDX</code></td>
|
|
<td>The section header index of
|
|
the associated symbol table section.</td>
|
|
<td><code>0</code></td>
|
|
</tr>
|
|
<tr>
|
|
</table>
|
|
<hr>
|
|
<a name="linking_rules"></a>
|
|
<h2>Rules for Linking Unrecognized Sections</h2>
|
|
If a link editor encounters sections whose headers contain OS-specific
|
|
values it does not recognize in the <code>sh_type</code>
|
|
or <code>sh_flags</code> fields, the link editor should combine those
|
|
sections as described below.
|
|
<p>
|
|
If the section's <code>sh_flags</code> bits include the attribute
|
|
<code>SHF_OS_NONCONFORMING</code>, then the section requires
|
|
special knowledge to be correctly processed, and the link editor should
|
|
reject the object containing the section with an error.
|
|
<p>
|
|
Unrecognized sections that do not have the
|
|
<code>SHF_OS_NONCONFORMING</code> attribute, are combined in a two-phase
|
|
process. As the link editor combines sections using this process,
|
|
it must honor the alignment constraints of the
|
|
input sections (asserted by the <code>sh_addralign</code> field),
|
|
padding between sections with zero bytes, if necessary, and producing
|
|
a combination with the maximum alignment constraint of its
|
|
component input sections.
|
|
<p>
|
|
<ol>
|
|
<li>
|
|
In the first phase, input sections that match in name, type
|
|
and attribute flags should be concatenated into single sections.
|
|
The concatenation order should satisfy the requirements of
|
|
any known input section attributes (e.g, <code>SHF_MERGE</code>
|
|
and <code>SHF_LINK_ORDER</code>). When not otherwise constrained,
|
|
sections should be emitted in input order.
|
|
<li>
|
|
In the second phase, sections should be assigned to segments or
|
|
other units based on their attribute flags. Sections of each particular
|
|
unrecognized type should be assigned to the same unit unless
|
|
prevented by incompatible flags, and within a unit, sections
|
|
of the same unrecognized type should be placed together
|
|
if possible.
|
|
</ol>
|
|
<p>
|
|
Non OS-specific processing (e.g. relocation) should be applied
|
|
to unrecognized section types. An output section header table,
|
|
if present, should contain entries for unknown sections.
|
|
Any unrecognized section attribute flags should be removed.
|
|
<hr>
|
|
<img src=warning.gif alt="NOTE:">
|
|
It is recommended that link editors follow the same two-phase
|
|
ordering approach described above when linking sections of
|
|
known types. Padding between such sections may have values
|
|
different from zero, where appropriate.
|
|
<hr>
|
|
<a name="section_groups"></a>
|
|
<h2>Section Groups</h2>
|
|
Some sections occur in interrelated groups. For example, an out-of-line
|
|
definition of an inline function might require, in addition to the
|
|
section containing its executable instructions, a read-only data
|
|
section containing literals referenced, one or more debugging information
|
|
sections and other informational sections. Furthermore, there may be
|
|
internal references among these sections that would not make sense
|
|
if one of the sections were removed or replaced by a duplicate from
|
|
another object. Therefore, such groups must be
|
|
included or omitted from the linked object as a unit.
|
|
A section cannot be a member of more than one group.
|
|
<p>
|
|
A section of type <code>SHT_GROUP</code> 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 <code>SHT_GROUP</code> section specifies
|
|
the identifying symbol entry, as described above:
|
|
the <code>sh_link</code> member contains the section header index
|
|
of the symbol table section that contains the entry.
|
|
The <code>sh_info</code> member contains the symbol table index of
|
|
the identifying entry. The <code>sh_flags</code>
|
|
member of the section header contains <code>0</code>.
|
|
The name of the section (<code>sh_name</code>) is not specified.
|
|
<p>
|
|
The referenced signature symbol is not restricted.
|
|
Its containing symbol table section need not be a member of the group,
|
|
for example.
|
|
<p>
|
|
The section data of a <code>SHT_GROUP</code> section is an array
|
|
of <code>Elf32_Word</code> entries. The first entry is a flag word.
|
|
The remaining entries are a sequence of section header indices.
|
|
<p>
|
|
The following flags are currently defined:
|
|
<hr>
|
|
<a name="section_group_flags"></a>
|
|
<b>Figure 4-13: Section Group Flags</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th>Name</th>
|
|
<th>Value</th>
|
|
<tr>
|
|
<td><code>GRP_COMDAT</code></td>
|
|
<td align=right><code>0x1</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>GRP_MASKOS</code></td>
|
|
<td align=right><code>0x0ff00000</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>GRP_MASKPROC</code></td>
|
|
<td align=right><code>0xf0000000</code></td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<DL COMPACT>
|
|
<p><dt><code>GRP_COMDAT</code><dd>
|
|
This is a COMDAT group. It may duplicate another COMDAT group
|
|
in another object file, where duplication is defined as having the
|
|
same group signature. In such cases, only one of the
|
|
duplicate groups may be retained by the linker, and the
|
|
members of the remaining groups must be discarded.
|
|
<p><dt><code>GRP_MASKOS</code><dd>
|
|
All bits included in this mask
|
|
are reserved for operating system-specific semantics.
|
|
<p><dt><code>GRP_MASKPROC</code><dd>
|
|
All bits included in this mask
|
|
are reserved for processor-specific semantics.
|
|
If meanings are specified, the processor supplement explains
|
|
them.
|
|
</dl>
|
|
<p>
|
|
The section header indices in the <code>SHT_GROUP</code> section
|
|
identify the sections that make up the group. Each such section
|
|
must have the <code>SHF_GROUP</code> flag set in its <code>sh_flags</code>
|
|
section header member. If the linker decides to remove the section
|
|
group, it must remove all members of the group.
|
|
<hr>
|
|
<img src=warning.gif alt="NOTE:">
|
|
This requirement is not intended to imply that special case behavior
|
|
like removing debugging information requires removing the sections
|
|
to which that information refers, even if they are part of the same
|
|
group.
|
|
<hr>
|
|
<p>
|
|
<a name="section_group_rules"></a>
|
|
To facilitate removing a group without leaving dangling references
|
|
and with only minimal processing of the symbol table,
|
|
the following rules must be followed:
|
|
<ul>
|
|
<p><li>
|
|
A symbol table entry with <code>STB_GLOBAL</code> or <code>STB_WEAK</code>
|
|
binding that is defined relative to one of a group's sections,
|
|
and that is contained in a symbol table section
|
|
that is not part of the group,
|
|
must be converted to an undefined symbol
|
|
(its section index must be changed to <code>SHN_UNDEF</code>)
|
|
if the group members are discarded.
|
|
References to this symbol table entry from outside the group are allowed.
|
|
<p><li>
|
|
A symbol table entry with <code>STB_LOCAL</code> binding
|
|
that is defined relative to one of a group's sections,
|
|
and that is contained in a symbol table section
|
|
that is not part of the group,
|
|
must be discarded if the group members are discarded.
|
|
References to this symbol table entry from outside the group are not allowed.
|
|
<p><li>
|
|
An undefined symbol that is referenced only from one or more sections
|
|
that are part of a particular group,
|
|
and that is contained in a symbol table section
|
|
that is not part of the group,
|
|
is not removed when the group members are discarded.
|
|
In other words,
|
|
the undefined symbol is not removed
|
|
even if no references to that symbol remain.
|
|
<p><li>
|
|
There may not be non-symbol references to the sections comprising
|
|
a group from outside the group, for example, use of a group
|
|
member's section header index in an <code>sh_link</code> or
|
|
<code>sh_info</code> member.
|
|
</ul>
|
|
<a name="special_sections"></a>
|
|
<h2>Special Sections</h2>
|
|
Various sections hold program and control information.
|
|
<p>
|
|
The following table
|
|
shows sections that are used by the system
|
|
and have the indicated types and attributes.
|
|
<hr>
|
|
<b>Figure 4-14: Special Sections</b>
|
|
<p>
|
|
<table border cellspacing=0>
|
|
<th><b>Name</b></th>
|
|
<th><b>Type</b></th>
|
|
<th><b>Attributes</b></th>
|
|
<tr>
|
|
<td><code>.bss</code> </td>
|
|
<td><code>SHT_NOBITS</code> </td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.comment</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>none</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.data</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.data1</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.debug</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>none</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.dynamic</code> </td>
|
|
<td><code>SHT_DYNAMIC</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.dynstr</code> </td>
|
|
<td><code>SHT_STRTAB</code> </td>
|
|
<td><code>SHF_ALLOC</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.dynsym</code> </td>
|
|
<td><code>SHT_DYNSYM</code> </td>
|
|
<td><code>SHF_ALLOC</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.fini</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_EXECINSTR</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.fini_array</code> </td>
|
|
<td><code>SHT_FINI_ARRAY</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.got</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.hash</code> </td>
|
|
<td><code>SHT_HASH</code> </td>
|
|
<td><code>SHF_ALLOC</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.init</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_EXECINSTR</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.init_array</code> </td>
|
|
<td><code>SHT_INIT_ARRAY</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.interp</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.line</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>none</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.note</code> </td>
|
|
<td><code>SHT_NOTE</code> </td>
|
|
<td>none</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.plt</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.preinit_array</code> </td>
|
|
<td><code>SHT_PREINIT_ARRAY</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.rel</code><i>name</i> </td>
|
|
<td><code>SHT_REL</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.rela</code><i>name</i> </td>
|
|
<td><code>SHT_RELA</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.rodata</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.rodata1</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.shstrtab</code> </td>
|
|
<td><code>SHT_STRTAB</code> </td>
|
|
<td>none</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.strtab</code> </td>
|
|
<td><code>SHT_STRTAB</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.symtab</code> </td>
|
|
<td><code>SHT_SYMTAB</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.symtab_shndx</code></td>
|
|
<td><code>SHT_SYMTAB_SHNDX</code> </td>
|
|
<td>see below</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.tbss</code> </td>
|
|
<td><code>SHT_NOBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE+SHF_TLS</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.tdata</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE+SHF_TLS</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.tdata1</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_WRITE+SHF_TLS</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.text</code> </td>
|
|
<td><code>SHT_PROGBITS</code></td>
|
|
<td><code>SHF_ALLOC+SHF_EXECINSTR</code> </td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<p>
|
|
<dl>
|
|
<p><dt><code>.bss</code><dd>
|
|
This section holds uninitialized data that contribute
|
|
to the program's memory image.
|
|
By definition, the system initializes the data with zeros
|
|
when the program begins to run.
|
|
The section occupies no file space, as indicated by the section type,
|
|
<code>SHT_NOBITS</code>.
|
|
<p><dt><code>.comment</code><dd>
|
|
This section holds version control information.
|
|
<p><dt><code>.data</code> and <code>.data1</code><dd>
|
|
These sections hold initialized data that contribute
|
|
to the program's memory image.
|
|
<p><dt><code>.debug</code><dd>
|
|
This section holds information for symbolic debugging.
|
|
The contents are unspecified. All section names with the
|
|
prefix <code>.debug</code> are reserved for future use in the
|
|
ABI.
|
|
<p><dt><code>.dynamic</code><dd>
|
|
This section holds dynamic linking information.
|
|
The section's attributes will include the <code>SHF_ALLOC</code> bit.
|
|
Whether the <code>SHF_WRITE</code> bit is set is processor specific.
|
|
See Chapter 5 for more information.
|
|
<p><dt><code>.dynstr</code><dd>
|
|
This section holds strings needed for dynamic linking,
|
|
most commonly the strings
|
|
that represent the names associated with symbol table entries.
|
|
See Chapter 5 for more information.
|
|
<p><dt><code>.dynsym</code><dd>
|
|
This section holds the dynamic linking symbol table,
|
|
as described in
|
|
<a href=ch4.symtab.html>``Symbol Table''</a>.
|
|
See Chapter 5 for more information.
|
|
<p><dt><code>.fini</code><dd>
|
|
This section holds executable instructions that contribute
|
|
to the process termination code.
|
|
That is, when a program exits normally, the system arranges
|
|
to execute the code in this section.
|
|
<p><dt><code>.fini_array</code><dd>
|
|
This section holds an array of function pointers that contributes
|
|
to a single termination array for the executable or shared
|
|
object containing the section.
|
|
<p><dt><code>.got</code><dd>
|
|
This section holds the global offset table.
|
|
See ``Coding Examples'' in Chapter 3, ``Special Sections'' in
|
|
Chapter 4, and ``Global Offset Table'' in Chapter 5 of the
|
|
processor supplement for more information.
|
|
<p><dt><code>.hash</code><dd>
|
|
This section holds a symbol hash table.
|
|
See
|
|
<a href=ch5.dynamic.html#hash>``Hash Table''</a>
|
|
in Chapter 5 for more information.
|
|
<p><dt><code>.init</code><dd>
|
|
This section holds executable instructions that contribute
|
|
to the process initialization code.
|
|
When a program starts to run, the system arranges
|
|
to execute the code in this section before calling the
|
|
main program entry point (called <code>main</code> for C programs).
|
|
<p><dt><code>.init_array</code><dd>
|
|
This section holds an array of function pointers that contributes
|
|
to a single initialization array for the executable or shared
|
|
object containing the section.
|
|
<p><dt><code>.interp</code><dd>
|
|
This section holds the path name of a program interpreter.
|
|
If the file has a loadable segment that includes
|
|
relocation, the sections' attributes will include the
|
|
<code>SHF_ALLOC</code> bit; otherwise, that bit will be off.
|
|
See Chapter 5 for more information.
|
|
<p><dt><code>.line</code><dd>
|
|
This section holds line number information for symbolic
|
|
debugging, which describes
|
|
the correspondence between the source program and the
|
|
machine code.
|
|
The contents are unspecified.
|
|
<p><dt><code>.note</code><dd>
|
|
This section holds information in the format that
|
|
<a href=ch5.pheader.html#note_section>``Note Section''</a>.
|
|
in Chapter 5 describes.
|
|
<p><dt><code>.plt</code><dd>
|
|
This section holds the procedure linkage table.
|
|
See ``Special Sections'' in Chapter 4 and ``Procedure Linkage
|
|
Table'' in Chapter 5 of the processor supplement for more
|
|
information.
|
|
<p><dt><code>.preinit_array</code><dd>
|
|
This section holds an array of function pointers that contributes
|
|
to a single pre-initialization array for the executable or shared
|
|
object containing the section.
|
|
<p><dt><code>.rel</code><i>name</i> and <code>.rela</code><i>name</i><dd>
|
|
These sections hold relocation information, as described in
|
|
<a href=ch4.reloc.html>``Relocation''</a>.
|
|
If the file has a loadable segment that includes
|
|
relocation, the sections' attributes will include the
|
|
<code>SHF_ALLOC</code> bit; otherwise, that bit will be off.
|
|
Conventionally, <i>name</i>
|
|
is supplied by the section to which the relocations apply.
|
|
Thus a relocation section for <code>.text</code>
|
|
normally would have the name <code>.rel.text</code> or <code>.rela.text</code>.
|
|
<p><dt><code>.rodata</code> and <code>.rodata1</code><dd>
|
|
These sections hold read-only data that
|
|
typically contribute to a non-writable segment
|
|
in the process image.
|
|
See
|
|
<a href=ch5.pheader.html>``Program Header''</a>
|
|
in Chapter 5 for more information.
|
|
<p><dt><code>.shstrtab</code><dd>
|
|
This section holds section names.
|
|
<p><dt><code>.strtab</code><dd>
|
|
This section holds strings, most commonly the strings
|
|
that represent the names associated with symbol table entries.
|
|
If the file has a loadable segment that includes the
|
|
symbol string table, the section's attributes will include the
|
|
<code>SHF_ALLOC</code>
|
|
bit; otherwise, that bit will be off.
|
|
<p><dt><code>.symtab</code><dd>
|
|
This section holds a symbol table, as
|
|
<a href=ch4.symtab.html>``Symbol Table''</a>.
|
|
in this chapter describes.
|
|
If the file has a loadable segment that includes the
|
|
symbol table, the section's attributes will include the
|
|
<code>SHF_ALLOC</code> bit; otherwise, that bit will be off.
|
|
<p><dt><code>.symtab_shndx</code><dd>
|
|
This section holds the special symbol table section index
|
|
array, as described above. The section's attributes will include
|
|
the <code>SHF_ALLOC</code> bit if the associated symbol table
|
|
section does; otherwise that bit will be off.
|
|
<a name=tbss></a>
|
|
<p><dt><code>.tbss</code><dd>
|
|
This section holds uninitialized <i>thread-local data</i> that contribute
|
|
to the program's memory image.
|
|
By definition,
|
|
the system initializes the data with zeros
|
|
when the data is instantiated for each new execution flow.
|
|
The section occupies no file space, as indicated by the section type,
|
|
<code>SHT_NOBITS</code>.
|
|
Implementations need not support thread-local storage.
|
|
<a name=tdata></a>
|
|
<p><dt><code>.tdata</code><dd>
|
|
This section holds initialized <i>thread-local data</i> that contributes
|
|
to the program's memory image.
|
|
A copy of its contents is instantiated by the system
|
|
for each new execution flow.
|
|
Implementations need not support thread-local storage.
|
|
<p><dt><code>.text</code><dd>
|
|
This section holds the ``text,'' or executable
|
|
instructions, of a program.
|
|
</dl>
|
|
<p>
|
|
Section names with a dot (<code>.</code>) prefix
|
|
are reserved for the system,
|
|
although applications may use these sections
|
|
if their existing meanings are satisfactory.
|
|
Applications may use names without the prefix to
|
|
avoid conflicts with system sections.
|
|
The object file format lets one define sections not
|
|
shown in the previous list.
|
|
An object file may have more than one section
|
|
with the same name.
|
|
<p>
|
|
Section names reserved for a processor architecture
|
|
are formed by placing an abbreviation of the architecture
|
|
name ahead of the section name.
|
|
The name should be taken from the
|
|
architecture names used for <code>e_machine</code>.
|
|
For instance <code>.</code>FOO<code>.psect</code> is the <code>psect</code>
|
|
section defined by the FOO architecture.
|
|
Existing extensions are called by their historical names.
|
|
<p>
|
|
<table>
|
|
<caption><b>Pre-existing Extensions</b></caption>
|
|
<tr>
|
|
<td><code>.sdata</code></td>
|
|
<td><code>.tdesc</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.sbss</code></td>
|
|
<td><code>.lit4</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.lit8</code></td>
|
|
<td><code>.reginfo</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.gptab</code></td>
|
|
<td><code>.liblist</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>.conflict</code></td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<img src=warning.gif alt="NOTE:">
|
|
For information on processor-specific sections,
|
|
see the ABI supplement for the desired processor.
|
|
<hr>
|
|
<a href=ch4.eheader.html><img src=previous.gif alt="Previous"></a>
|
|
<a href=contents.html><img src=contents.gif alt="Contents"></a>
|
|
<a href=ch4.strtab.html><img src=next.gif alt="Next"></a>
|
|
<hr>
|
|
<i>
|
|
<small>
|
|
© 1997, 1998, 1999, 2000, 2001 The Santa Cruz Operation, Inc. All rights reserved.
|
|
</small>
|
|
</i>
|
|
</html>
|