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, defined in sys/link.h:
typedef struct { Elf32_Sword d_tag; union { Elf32_Word d_val; Elf32_Addr d_ptr; Elf32_Off d_off; } d_un; } Elf32_Dyn; typedef struct { Elf64_Xword d_tag; union { Elf64_Xword d_val; Elf64_Addr d_ptr; } d_un; } Elf64_Dyn; |
For each object with this type, d_tag controls the interpretation of d_un.
- d_val
These objects represent integer values with various interpretations.
- d_ptr
These objects represent program virtual addresses. A file's virtual addresses might not match the memory virtual addresses during execution. When interpreting addresses contained in the dynamic structure, the runtime 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.
To make interpreting the contents of dynamic section entries simpler for tools, the value of each tag, except for those in two special compatibility ranges, will determine the interpretation of the d_un union. A tag whose value is an even number indicates a dynamic section entry that uses d_ptr. A tag whose value is an odd number indicates a dynamic section entry that uses d_val or that uses neither d_ptr nor d_val. Tags whose values are less than the special value DT_ENCODING and tags whose values fall between DT_HIOS and DT_LOPROC do not follow these rules.
The following table summarizes the tag requirements for executable and shared object files. If a tag is marked mandatory, then the dynamic linking array must have an entry of that type. Likewise, optional means an entry for the tag can appear but is not required.
Table 7-42 ELF Dynamic Array Tags
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 | Optional |
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_BIND_NOW | 24 | Ignored | Optional | Optional |
DT_INIT_ARRAY | 25 | d_ptr | Optional | Optional |
DT_FINI_ARRAY | 26 | d_ptr | Optional | Optional |
DT_INIT_ARRAYSZ | 27 | d_val | Optional | Optional |
DT_FINI_ARRAYSZ | 28 | d_val | Optional | Optional |
DT_RUNPATH | 29 | d_val | Optional | Optional |
DT_FLAGS | 30 | d_val | Optional | Optional |
DT_ENCODING | 32 | Unspecified | Unspecified | Unspecified |
DT_PREINIT_ARRAY | 32 | d_ptr | Optional | Ignored |
DT_PREINIT_ARRAYSZ | 33 | d_val | Optional | Ignored |
DT_LOOS | 0x6000000d | Unspecified | Unspecified | Unspecified |
DT_SUNW_RTLDINF | 0x6000000e | d_ptr | Optional | Optional |
DT_HIOS | 0x6ffff000 | Unspecified | Unspecified | Unspecified |
DT_VALRNGLO | 0x6ffffd00 | Unspecified | Unspecified | Unspecified |
DT_CHECKSUM | 0x6ffffdf8 | d_val | Optional | Optional |
DT_PLTPADSZ | 0x6ffffdf9 | d_val | Optional | Optional |
DT_MOVEENT | 0x6ffffdfa | d_val | Optional | Optional |
DT_MOVESZ | 0x6ffffdfb | d_val | Optional | Optional |
DT_FEATURE_1 | 0x6ffffdfc | d_val | Optional | Optional |
DT_POSFLAG_1 | 0x6ffffdfd | d_val | Optional | Optional |
DT_SYMINSZ | 0x6ffffdfe | d_val | Optional | Optional |
DT_SYMINENT | 0x6ffffdff | d_val | Optional | Optional |
DT_VALRNGHI | 0x6ffffdff | Unspecified | Unspecified | Unspecified |
DT_ADDRRNGLO | 0x6ffffe00 | Unspecified | Unspecified | Unspecified |
DT_CONFIG | 0x6ffffefa | d_ptr | Optional | Optional |
DT_DEPAUDIT | 0x6ffffefb | d_ptr | Optional | Optional |
DT_AUDIT | 0x6ffffefc | d_ptr | Optional | Optional |
DT_PLTPAD | 0x6ffffefd | d_ptr | Optional | Optional |
DT_MOVETAB | 0x6ffffefe | d_ptr | Optional | Optional |
DT_SYMINFO | 0x6ffffeff | d_ptr | Optional | Optional |
DT_ADDRRNGHI | 0x6ffffeff | Unspecified | Unspecified | Unspecified |
DT_RELACOUNT | 0x6ffffff9 | d_val | Optional | Optional |
DT_RELCOUNT | 0x6ffffffa | d_val | Optional | Optional |
DT_FLAGS_1 | 0x6ffffffb | d_val | Optional | Optional |
DT_VERDEF | 0x6ffffffc | d_ptr | Optional | Optional |
DT_VERDEFNUM | 0x6ffffffd | d_val | Optional | Optional |
DT_VERNEED | 0x6ffffffe | d_ptr | Optional | Optional |
DT_VERNEEDNUM | 0x6fffffff | d_val | Optional | Optional |
DT_LOPROC | 0x70000000 | Unspecified | Unspecified | Unspecified |
DT_SPARC_REGISTER | 0x70000001 | d_val | Optional | Optional |
DT_AUXILIARY | 0x7ffffffd | d_val | Unspecified | Optional |
DT_USED | 0x7ffffffe | d_val | Optional | Optional |
DT_FILTER | 0x7fffffff | d_val | Unspecified | Optional |
DT_HIPROC | 0x7fffffff | Unspecified | Unspecified | Unspecified |
- DT_NULL
Marks the end of the _DYNAMIC array.
- DT_NEEDED
The DT_STRTAB string table offset of a null-terminated string, giving the name of a needed dependency.The dynamic array can contain multiple entries of this type. The relative order of these entries is significant, though their relation to entries of other types is not. See "Shared Object Dependencies".
- DT_PLTRELSZ
The total size, in bytes, of the relocation entries associated with the procedure linkage table. See "Procedure Linkage Table (Processor-Specific)".
- DT_PLTGOT
An address associated with the procedure linkage table or the global offset table. See "Procedure Linkage Table (Processor-Specific)" and "Global Offset Table (Processor-Specific)".
- DT_HASH
The address of the symbol hash table. This table refers to the symbol table indicated by the DT_SYMTAB element. See "Hash Table".
- DT_STRTAB
The address of the string table. Symbol names, dependency names, and other strings required by the runtime linker reside in this table. See "String Table".
- DT_SYMTAB
The address of the symbol table. See "Symbol Table".
- DT_RELA
The address of a relocation table. See "Relocation".
An object file can have multiple relocation sections. When creating the relocation table for an executable or shared object file, the link-editor catenates those sections to form a single table. Although the sections may remain independent in the object file, the runtime linker sees a single table. When the runtime 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.
This element requires the DT_RELASZ and DT_RELAENT elements also be present. When relocation is mandatory for a file, either DT_RELA or DT_REL can occur.
- DT_RELASZ
The total size, in bytes, of the DT_RELA relocation table.
- DT_RELAENT
The size, in bytes, of the DT_RELA relocation entry.
- DT_STRSZ
The total size, in bytes, of the DT_STRTAB string table.
- DT_SYMENT
The size, in bytes, of the DT_SYMTAB symbol entry.
- DT_INIT
The address of an initialization function. See "Initialization and Termination Sections".
- DT_FINI
The address of a termination function. See "Initialization and Termination Sections".
- DT_SONAME
The DT_STRTAB string table offset of a null-terminated string, identifying the name of the shared object. See "Recording a Shared Object Name".
- DT_RPATH
The DT_STRTAB string table offset of a null-terminated library search path string. This element's use has been superseded by DT_RUNPATH. See "Directories Searched by the Runtime Linker".
- DT_SYMBOLIC
Indicates the object contains symbolic bindings that were applied during its link-edit. This elements use has been superseded by the DF_SYMBOLIC flag. See "Using -Bsymbolic".
- DT_REL
Similar to DT_RELA, except its table has implicit addends. This element requires that the DT_RELSZ and DT_RELENT elements also be present.
- DT_RELSZ
The total size, in bytes, of the DT_REL relocation table.
- DT_RELENT
The size, in bytes, of the DT_REL relocation entry.
- DT_PLTREL
Indicates the type of relocation entry to which the procedure linkage table refers, either DT_REL or DT_RELA. All relocations in a procedure linkage table must use the same relocation. See "Procedure Linkage Table (Processor-Specific)". This element requires a DT_JMPREL element also be present.
- DT_DEBUG
Used for debugging.
- DT_TEXTREL
Indicates that one or more relocation entries might request modifications to a non-writable segment, and the runtime linker can prepare accordingly. This element's use has been superseded by the DF_TEXTREL flag. See "Position-Independent Code".
- DT_JMPREL
The address of relocation entries associated solely with the procedure linkage table. See "Procedure Linkage Table (Processor-Specific)". Separating these relocation entries enables the runtime linker to ignore them when the object is loaded if lazy binding is enabled. This element requires the DT_PLTRELSZ and DT_PLTREL elements also be present.
- DT_POSFLAG_1
Various state flags which are applied to the DT_ element immediately following. See Table 7-45.
- DT_BIND_NOW
Indicates that all relocations for this object must be processed before returning control to the program. The presence of this entry takes precedence over a directive to use lazy binding when specified through the environment or via dlopen(3DL). This element's use has been superseded by the DF_BIND_NOW flag. See "When Relocations Are Performed".
- DT_INIT_ARRAY
The address of an array of pointers to initialization functions. This element requires that a DT_INIT_ARRAYSZ element also be present. See "Initialization and Termination Sections".
- DT_FINI_ARRAY
The address of an array of pointers to termination functions. This element requires that a DT_FINI_ARRAYSZ element also be present. See "Initialization and Termination Sections".
- DT_INIT_ARRAYSZ
The total size, in bytes, of the DT_INIT_ARRAY array.
- DT_FINI_ARRAYSZ
The total size, in bytes, of the DT_FINI_ARRAY array.
- DT_RUNPATH
The DT_STRTAB string table offset of a null-terminated library search path string. See "Directories Searched by the Runtime Linker".
- DT_FLAGS
Flag values specific to this object. See Table 7-43.
- DT_ENCODING
Values greater than or equal to DT_ENCODING and less than or equal to DT_LOOS follow the rules for the interpretation of the d_un union.
- DT_PREINIT_ARRAY
The address of an array of pointers to pre-initialization functions. This element requires that a DT_PREINIT_ARRAYSZ element also be present. This array is processed only in an executable file. It is ignored if contained in a shared object. See "Initialization and Termination Sections".
- DT_PREINIT_ARRAYSZ
The total size, in bytes, of the DT_PREINIT_ARRAY array.
- DT_LOOS - DT_HIOS
Values in this inclusive range are reserved for operating system-specific semantics. All such values follow the rules for the interpretation of the d_un union.
- DT_SUNW_RTLDINF
Reserved for internal use by the runtime-linker.
- DT_SYMINFO
The address of the symbol information table. This element requires that the DT_SYMINENT and DT_SYMINSZ elements also be present. See "Syminfo Table".
- DT_SYMINENT
The size, in bytes, of the DT_SYMINFO information entry.
- DT_SYMINSZ
The total size, in bytes, of the DT_SYMINFO table.
- DT_VERDEF
The address of the version definition table. Elements within this table contain indexes into the string table DT_STRTAB. This element requires that the DT_VERDEFNUM element also be present. See "Version Definition Section".
- DT_VERDEFNUM
The number of entries in the DT_VERDEF table.
- DT_VERNEED
The address of the version dependency table. Elements within this table contain indexes into the string table DT_STRTAB. This element requires that the DT_VERNEEDNUM element also be present. See "Version Dependency Section".
- DT_VERNEEDNUM
The number of entries in the DT_VERNEEDNUM table.
- DT_RELACOUNT
Indicates that all Elf32_Rela (or Elf64_Rela) RELATIVE relocations have been concatenated together, and specifies the RELATIVE relocation count. See "Combined Relocation Sections".
- DT_RELCOUNT
Indicates that all Elf32_Rel RELATIVE relocations have been concatenated together, and specifies the RELATIVE relocation count. See "Combined Relocation Sections".
- DT_AUXILIARY
The DT_STRTAB string table offset of a null-terminated string that names one or more auxiliary filtees. See "Generating an Auxiliary Filter".
- DT_FILTER
The DT_STRTAB string table offset of a null-terminated string that names one or more standard filtees. See "Generating a Standard Filter".
- DT_CHECKSUM
A simple checksum of selected sections of the object. See gelf_checksum(3ELF).
- DT_MOVEENT
The size, in bytes, of the DT_MOVETAB move entries.
- DT_MOVESZ
The total size, in bytes, of the DT_MOVETAB table.
- DT_MOVETAB
The address of a move table. This element requires that the DT_MOVEENT and DT_MOVESZ elements also be present. See "Move Section".
- DT_CONFIG
The DT_STRTAB string table offset of a null-terminated string defining a configuration file. The configuration file is only meaningful in an executable, and is typically unique to this object. See "Configuring the Default Search Paths".
- DT_DEPAUDIT
The DT_STRTAB string table offset of a null-terminated string defining one or more audit libraries. See "Runtime Linker Auditing Interface".
- DT_AUDIT
The DT_STRTAB string table offset of a null-terminated string defining one or more audit libraries. See "Runtime Linker Auditing Interface".
- DT_FLAGS_1
Flag values specific to this object. See Table 7-44.
- DT_FEATURE_1
Feature values specific to this object. See "Feature Checking".
- DT_VALRNGLO - DT_VALRNGHI
Values in this inclusive range use the d_un.d_val field of the dynamic structure.
- DT_ADDRRNGLO - DT_ADDRRNGHI
Values in this inclusive range use the d_un.d_ptr field of the dynamic structure. If any adjustment is made to the ELF object after it has been built, these entries must be updated accordingly.
- DT_SPARC_REGISTER
The index of an STT_SPARC_REGISTER symbol within the DT_SYMTAB symbol table. There is one entry for every STT_SPARC_REGISTER symbol in the symbol table. See "Register Symbols".
- DT_LOPROC - DT_HIPROC
Values in this inclusive range are reserved for processor-specific semantics.