Dynamic section
If an object file participates in dynamic linking, its
program header table will have an element of type
PT_DYNAMIC. This segment contains the
.dynamic
section. A special symbol,
_DYNAMIC, labels the section, which contains an
array of the following structures.
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
extern Elf32_Dyn _DYNAMIC[];
Dynamic Structure
For each object with this type, d_tag
controls the interpretation of d_un
.
d_val
-
These Elf32_Word objects represent integer values
with various interpretations.
d_ptr
-
These Elf32_Addr objects represent program
virtual addresses. As mentioned previously, a file's
virtual addresses might not match the memory virtual
addresses during execution. When interpreting addresses
contained in the dynamic structure, the dynamic linker
computes actual addresses, based on the original file value
and the memory base address. For consistency, files do not
contain relocation entries to correct addresses
in the dynamic structure.
``Dynamic array tags, d_tag''
summarizes the tag requirements for executable and shared
object files. If a tag is marked mandatory, the
dynamic linking array must have an entry of that type.
Likewise, optional means an entry for the tag may
appear but is not required.
Dynamic array tags, d_tag
Name
|
Value
|
d_un
|
Executable
|
Shared object
|
DT_NULL
|
0
|
ignored
|
mandatory
|
mandatory
|
DT_NEEDED
|
1
|
d_val
|
optional
|
optional
|
DT_PLTRELSZ
|
2
|
d_val
|
optional
|
optional
|
DT_PLTGOT
|
3
|
d_ptr
|
optional
|
optional
|
DT_HASH
|
4
|
d_ptr
|
mandatory
|
mandatory
|
DT_STRTAB
|
5
|
d_ptr
|
mandatory
|
mandatory
|
DT_SYMTAB
|
6
|
d_ptr
|
mandatory
|
mandatory
|
DT_RELA
|
7
|
d_ptr
|
mandatory
|
optional
|
DT_RELASZ
|
8
|
d_val
|
mandatory
|
optional
|
DT_RELAENT
|
9
|
d_val
|
mandatory
|
optional
|
DT_STRSZ
|
10
|
d_val
|
mandatory
|
mandatory
|
DT_SYMENT
|
11
|
d_val
|
mandatory
|
mandatory
|
DT_INIT
|
12
|
d_ptr
|
optional
|
optional
|
DT_FINI
|
13
|
d_ptr
|
optional
|
optional
|
DT_SONAME
|
14
|
d_val
|
ignored
|
optional
|
DT_RPATH
|
15
|
d_val
|
optional
|
ignored
|
DT_SYMBOLIC
|
16
|
ignored
|
ignored
|
optional
|
DT_REL
|
17
|
d_ptr
|
mandatory
|
optional
|
DT_RELSZ
|
18
|
d_val
|
mandatory
|
optional
|
DT_RELENT
|
19
|
d_val
|
mandatory
|
optional
|
DT_PLTREL
|
20
|
d_val
|
optional
|
optional
|
DT_DEBUG
|
21
|
d_ptr
|
optional
|
ignored
|
DT_TEXTREL
|
22
|
ignored
|
optional
|
optional
|
DT_JMPREL
|
23
|
d_ptr
|
optional
|
optional
|
DT_LOPROC
|
0x70000000
|
unspecified
|
unspecified
|
unspecified
|
DT_HIPROC
|
0x7fffffff
|
unspecified
|
unspecified
|
unspecified
|
DT_NULL-
An entry with a DT_NULL tag marks the end of the
_DYNAMIC array.
DT_NEEDED-
This element holds the string table offset of a
null-terminated string, giving the name of a needed
library. The offset is an index into the table recorded in
the DT_STRTAB entry. See
``Shared object dependencies''
for more information about these names. The
dynamic array may contain multiple entries with this type.
These entries' relative order is significant, though their
relation to entries of other types is not.
DT_PLTRELSZ-
This element holds the total size, in bytes, of the
relocation entries associated with the procedure linkage
table. If an entry of type DT_JMPREL is present,
a DT_PLTRELSZ must accompany it.
DT_PLTGOT-
This element holds an address associated with the procedure
linkage table and/or the global offset table. Semantics
are processor specific.
DT_HASH-
This element holds the address of the symbol hash table,
described in
``Hash table''.
DT_STRTAB-
This element holds the address of the string table,
described in the first part of this chapter.
Symbol names, library names, and other strings reside
in this table.
DT_SYMTAB-
This element holds the address of the symbol table,
described in the first part of this chapter, with
Elf32_Sym entries for the 32-bit class of files.
DT_RELA-
This element holds the address of a relocation table,
described in the first part of this chapter. Entries in
the table have explicit addends, such as
Elf32_Rela for the 32-bit file class. An object
file may have multiple relocation sections. When building
the relocation table for an executable or shared object
file, the link editor catenates those sections to form a
single table. Although the sections remain independent in
the object file, the dynamic linker sees a single table.
When the dynamic linker creates the process image for an
executable file or adds a shared object to the process
image, it reads the relocation table and performs the
associated actions.
If this element is present, the dynamic structure must also
have DT_RELASZ and DT_RELAENT
elements. When relocation is ``mandatory'' for a file,
either DT_RELA or DT_REL may occur
(both are permitted but not required).
DT_RELASZ-
This element holds the total size, in bytes, of the
DT_RELA relocation table.
DT_RELAENT-
This element holds the size, in bytes, of the
DT_RELA relocation entry.
DT_STRSZ-
This element holds the size, in bytes, of the string table.
DT_SYMENT-
This element holds the size, in bytes, of a symbol table entry.
DT_INIT-
This element holds the address of the initialization
function. See
``Initialization and termination functions''
for more information.
DT_FINI-
This element holds the address of the termination
function.
See
``Initialization and termination functions''
for more information.
DT_SONAME-
This element holds the string table offset of a
null-terminated string, giving the name of the shared
object. The offset is an index into the table recorded in
the DT_STRTAB entry.
NOTE:
See
``Shared object dependencies''
for more
information about these names.
DT_RPATH-
This element holds the string table offset of a null-terminated search
library search path string.
The offset is an index into the table recorded in the
DT_STRTAB entry.
DT_SYMBOLIC-
This element's presence in a shared object library alters
the dynamic linker's symbol resolution algorithm for
references within the library. Instead of starting a
symbol search with the executable file, the dynamic linker
starts from the shared object itself. If the shared object
fails to supply the referenced symbol, the dynamic linker
then searches the executable file and other shared objects
as usual.
DT_REL-
This element is similar to DT_RELA, except its
table has implicit addends, such as Elf32_Rel for
the 32-bit file class. If this element is present, the
dynamic structure must also have DT_RELSZ and
DT_RELENT elements.
DT_RELSZ-
This element holds the total size, in bytes, of the
DT_REL relocation table.
DT_RELENT-
This element holds the size, in bytes, of the
DT_REL relocation entry.
DT_PLTREL-
This member specifies the type of relocation entry to which
the procedure linkage table refers. The
d_val
member holds DT_REL or DT_RELA, as
appropriate. All relocations in a procedure linkage table
must use the same relocation.
DT_DEBUG-
This member is used for debugging.
DT_TEXTREL-
This member's absence signifies that no relocation entry
should cause a modification to a non-writable segment, as
specified by the segment permissions in the program header
table. If this member is present, one or more relocation
entries might request modifications to a non-writable
segment, and the dynamic linker can prepare accordingly.
DT_JMPREL-
If present, this entry's
d_ptr
member holds the
address of relocation entries associated solely with the
procedure linkage table. Separating these relocation
entries lets the dynamic linker ignore them during process
initialization, if lazy binding is enabled. If this entry
is present, the related entries of types
DT_PLTRELSZ and DT_PLTREL must also be
present.
DT_LOPROC through DT_HIPROC-
Values in this inclusive range
are reserved for processor-specific semantics.
Except for the DT_NULL element at the end of the
array, and the relative order of DT_NEEDED
elements, entries may appear in any order. Tag values not
appearing in the table are reserved.
Next topic:
Shared object dependencies
Previous topic:
Dynamic linker
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003