
- •ABOUT THIS DOCUMENT
- •Change control
- •Current status and anticipated changes
- •Change history
- •References
- •Terms and abbreviations
- •SCOPE
- •GENERIC 32-BIT ELF
- •Introduction
- •File Format
- •Data Representation
- •Character Representations
- •ELF Header
- •ELF Identification
- •Sections
- •Special Sections
- •String Table
- •Symbol Table
- •Symbol Values
- •Relocation
- •Program view
- •Program Header
- •Note Section
- •Program Loading
- •Dynamic Linking
- •Special Sections Names
- •Pre-existing Extensions
- •ELF header
- •Entry points
- •Section names
- •Section headers
- •Common sections
- •Section alignment
- •Link and info fields
- •Symbols
- •Symbol value
- •Symbol size
- •Weak symbols
- •Symbol names
- •Sub-class and super-class symbols
- •Function address constants and pointers to code
- •Mapping and tagging symbols
- •Mapping symbols
- •Tagging symbols
- •Symbol table order
- •Dynamic symbol table entries
- •Relocation types
- •Dynamic relocation types
- •Multiple relocation
- •Field extraction and insertion
- •Relocations that depend on the type of the target location
- •Program headers
- •Dynamic linking and relocation
- •The dynamic segment
- •The dynamic segment program header
- •The dynamic section
- •DT_SYMBOLIC
- •The hash table section
|
|
ARM ELF |
|
Figure 3-11, Section Attribute Flags, sh_flags |
|||
|
|
|
|
Name |
Value |
Meaning |
|
|
|
|
|
SHF_WRITE |
0x1 |
The section contains data that should be writable during process |
|
|
|
execution |
|
|
|
|
|
SHF_ALLOC |
0x2 |
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 |
|
|
|
|
|
SHF_EXECINSTR |
0x4 |
The section contains executable machine instructions. |
|
|
|
|
|
SHF_MASKPROC |
0xf0000000 |
Bits in this mask are reserved for processor-specific semantics. |
|
|
|
|
|
If a flag bit is set in sh_flags, the attribute is on for the section. Otherwise, the attribute is off or does not apply. Reserved attributes are set to zero.
Two section header members, sh_link and sh_info, hold special information, depending on section type.
Figure 3-12, sh_link and sh_info Interpretation
sh_type |
sh_link |
sh_info |
|
|
|
SHT_DYNAMIC |
The section header index of the string |
0 |
|
table used by entries in the section. |
|
|
|
|
SHT_HASH |
The section header index of the symbol |
0 |
|
table to which the hash-table applies. |
|
|
|
|
SHT_REL |
The section header index of the |
The section header index of the section to |
SHT_RELA |
associated symbol table. |
which the relocation applies. |
|
|
|
SHT_SYMTAB |
This information is operating system |
This information is operating system specific. |
SHT_DYNSYM |
specific. |
|
|
|
|
Other |
SHN_UNDEF |
0 |
|
|
|
3.3.1 Special Sections
Various sections in ELF are pre-defined and hold program and control information. These sections are used by the operating system and have different types and attributes for different operating systems.
Executable files are created from individual object files and libraries through the linking process. The linker resolves the references (including subroutines and data references) among the different object files, adjusts the absolute references in the object files, and relocates instructions. The linking and loading processes, which are described in subsections 3.7 onwards, require information defined in the object files and store this information in specific sections such as .dynamic.
Each operating system supports a set of linking models, which fall into two categories:
Static. A set of object files, system libraries and library archives are statically bound, references are resolved, and an executable file is created that is completely self contained.
Dynamic. A set of object files, libraries, system shared resources and other shared libraries are linked together to create the executable. When this executable is loaded, other shared resources and dynamic libraries must be made available in the system for the program to run successfully.
SWS ESPC 0003 B-02 |
Page 16 of 42 |
ARM ELF
The general method used to resolve references at execution time for a dynamically linked executable file is described in the linkage model used by the operating system, and the actual implementation of this linkage model will contain processor-specific components (see section 4, ARMand Thumb-Specific Definitions).
There are also sections that support debugging, such as .debug and .line, and program control, including
.bss, .data, .data1, .rodata, and .rodata1.
Figure 3-13, Special Sections
Name |
Type |
Attributes |
|
|
|
.bss |
SHT_NOBITS |
SHF_ALLOC+SHF_WRITE |
|
|
|
.comment |
SHT_PROGBITS |
none |
|
|
|
.data |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE |
|
|
|
.data1 |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE |
|
|
|
.debug |
SHT_PROGBITS |
none |
|
|
|
.dynamic |
SHT_DYNAMIC |
see below |
|
|
|
.hash |
SHT_HASH |
SHF_ALLOC |
|
|
|
.line |
SHT_PROGBITS |
none |
|
|
|
.note |
SHT_NOTE |
None |
|
|
|
.rodata |
SHT_PROGBITS |
SHF_ALLOC |
|
|
|
.rodata1 |
SHT_PROGBITS |
SHF_ALLOC |
|
|
|
.shstrtab |
SHT_STRTAB |
None |
|
|
|
.strtab |
SHT_STRTAB |
see below |
|
|
|
.symtab |
SHT_SYMTAB |
see below |
|
|
|
.text |
SHT_PROGBITS |
SHF_ALLOC + SHF_EXECINSTR |
|
|
|
.bss—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, SHT_NOBITS.
.comment—This section holds version control information.
.data and .data1—These sections hold initialized data that contribute to the program's memory image.
.debug—This section holds information for symbolic debugging. The contents are unspecified. All section names with the prefix .debug are reserved for future use.
.dynamic—This section holds dynamic linking information and has attributes such as SHF_ALLOC and SHF_WRITE. The operating system and processor determine whether the SHF_WRITE bit is set.
.hash—This section holds a symbol hash table.
.line—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.
.note—This section holds information in the format that is described in section 3.7.2, Note Section, below.
SWS ESPC 0003 B-02 |
Page 17 of 42 |