Go to main content

Oracle® Solaris 11.4 Linkers and Libraries Guide

Exit Print View

Updated: March 2019
 
 

ELF Identification

ELF provides an object file framework to support multiple processors, multiple data encoding, and multiple classes of machines. To support this object file family, the initial bytes of the file specify how to interpret the file. These bytes are independent of the processor on which the inquiry is made and independent of the file's remaining contents.

The initial bytes of an ELF header and an object file correspond to the e_ident member.

Table 14  ELF Identification Index
Name
Value
Purpose
EI_MAG0
0
File identification
EI_MAG1
1
File identification
EI_MAG2
2
File identification
EI_MAG3
3
File identification
EI_CLASS
4
File class
EI_DATA
5
Data encoding
EI_VERSION
6
File version
EI_OSABI
7
Operating system/ABI identification
EI_ABIVERSION
8
ABI version
EI_PAD
9
Start of padding bytes
EI_NIDENT
16
Size of e_ident[]

These indexes access bytes that hold the following values.

EI_MAG0 - EI_MAG3

A 4-byte magic number, identifying the file as an ELF object file, as listed in the following table.

Name
Value
Position
ELFMAG0
0x7f
e_ident[EI_MAG0]
ELFMAG1
'E'
e_ident[EI_MAG1]
ELFMAG2
'L'
e_ident[EI_MAG2]
ELFMAG3
'F'
e_ident[EI_MAG3]
EI_CLASS

Byte e_ident[EI_CLASS] identifies the file's class, or capacity, as listed in the following table.

Name
Value
Meaning
ELFCLASSNONE
0
Invalid class
ELFCLASS32
1
32-bit objects
ELFCLASS64
2
64-bit objects

The file format is designed to be portable among machines of various sizes, without imposing the sizes of the largest machine on the smallest. The class of the file defines the basic types used by the data structures of the object file container. The data that is contained in object file sections can follow a different programming model.

Class ELFCLASS32 supports machines with files and virtual address spaces up to 4 gigabytes. This class uses the basic types that are defined in Figure 12, Table 12, ELF 32-Bit Data Types.

Class ELFCLASS64 is reserved for 64-bit architectures such as 64-bit SPARC and x64. This class uses the basic types that are defined in Figure 13, Table 13, ELF 64-Bit Data Types.

EI_DATA

Byte e_ident[EI_DATA] specifies the data encoding of the processor-specific data in the object file, as listed in the following table.

Name
Value
Meaning
ELFDATANONE
0
Invalid data encoding
ELFDATA2LSB
1
ELFDATA2MSB
2

More information on these encodings appears in the section Data Encoding. Other values are reserved for future use.

EI_VERSION

Byte e_ident[EI_VERSION] specifies the ELF header version number. Currently, this value must be EV_CURRENT.

EI_OSABI

Byte e_ident[EI_OSABI] identifies the operating system together with the ABI to which the object is targeted. Some fields in other ELF structures have flags and values that have operating system or ABI specific meanings. The interpretation of those fields is determined by the value of this byte. ABI values relevant to Oracle Solaris are listed in the following table

Name
Value
Meaning
ELFOSABI_NONE / ELFOSABI_SYSV
0
No extensions or unspecified
ELFOSABI_SOLARIS
6
Solaris
EI_ABIVERSION

Byte e_ident[EI_ABIVERSION] identifies the version of the ABI to which the object is targeted. This field is used to distinguish among incompatible versions of an ABI. The interpretation of this version number is dependent on the ABI identified by the EI_OSABI field. If no values are specified for the EI_OSABI field for the processor, or no version values are specified for the ABI determined by a particular value of the EI_OSABI byte, the value zero is used to indicate unspecified.

EI_PAD

This value marks the beginning of the unused bytes in e_ident. These bytes are reserved and are set to zero. Programs that read object files should ignore these values.