|
|
Some object file control structures can grow, because the ELF header contains their actual sizes. If the object file format changes, a program may encounter control structures that are larger or smaller than expected. Programs might therefore ignore ``extra'' information. The treatment of ``missing'' information depends on context and will be specified when and if extensions are defined.
#define EI_NIDENT 16typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr;
typedef struct { unsigned char e_ident[EI_NIDENT]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; } Elf64_Ehdr;
ELF header
e_idente_type| Name | Value | Meaning |
|---|---|---|
| ET_NONE | 0 | No file type |
| ET_REL | 1 | Relocatable file |
| ET_EXEC | 2 | Executable file |
| ET_DYN | 3 | Shared object file |
| ET_CORE | 4 | Core file |
| ET_LOOS | 0xff00 | Operating system-specific |
| ET_HIOS | 0xff00 | Operating system-specific |
| ET_LOPROC | 0xff00 | Processor-specific |
| ET_HIPROC | 0xffff | Processor-specific |
Although the core file contents are unspecified, type ET_CORE is reserved to mark the file. Values from ET_LOOS through ET_HIOS (inclusive) are reserved for operating system-specific semantics. Values from ET_LOPROC through ET_HIPROC (inclusive) are reserved for processor-specific semantics. If meanings are specified, the processor supplement explains them. Other values are reserved and will be assigned to new object file types as necessary.
e_machine| Name | Value | Meaning |
|---|---|---|
| EM_NONE | 0 | No machine |
| EM_M32 | 1 | AT&T WE 32100 |
| EM_SPARC | 2 | SPARC |
| EM_386 | 3 | Intel 80386 |
| EM_68K | 4 | Motorola 68000 |
| EM_88K | 5 | Motorola 88000 |
| RESERVED | 6 | Reserved for future use |
| EM_860 | 7 | Intel 80860 |
| EM_MIPS | 8 | MIPS I Architecture |
| EM_S370 | 9 | IBM System/370 Processor |
| EM_MIPS_RS3_LE | 10 | MIPS RS3000 Little-endian |
| RESERVED | 11-14 | Reserved for future use |
| EM_PARISC | 15 | Hewlett-Packard PA-RISC |
| RESERVED | 16 | Reserved for future use |
| EM_VPP500 | 17 | Fujitsu VPP500 |
| EM_SPARC32PLUS | 18 | Enhanced instruction set SPARC |
| EM_960 | 19 | Intel 80960 |
| EM_PPC | 20 | PowerPC |
| EM_PPC64 | 21 | 64-bit PowerPC |
| RESERVED | 22-35 | Reserved for future use |
| EM_V800 | 36 | NEC V800 |
| EM_FR20 | 37 | Fujitsu FR20 |
| EM_RH32 | 38 | TRW RH-32 |
| EM_RCE | 39 | Motorola RCE |
| EM_ARM | 40 | Advanced RISC Machines ARM |
| EM_ALPHA | 41 | Digital Alpha |
| EM_SH | 42 | Hitachi SH |
| EM_SPARCV9 | 43 | SPARC Version 9 |
| EM_TRICORE | 44 | Siemens Tricore embedded processor |
| EM_ARC | 45 | Argonaut RISC Core, Argonaut Technologies Inc. |
| EM_H8_300 | 46 | Hitachi H8/300 |
| EM_H8_300H | 47 | Hitachi H8/300H |
| EM_H8S | 48 | Hitachi H8S |
| EM_H8_500 | 49 | Hitachi H8/500 |
| EM_IA_64 | 50 | Intel IA-64 processor architecture |
| EM_MIPS_X | 51 | Stanford MIPS-X |
| EM_COLDFIRE | 52 | Motorola ColdFire |
| EM_68HC12 | 53 | Motorola M68HC12 |
| EM_MMA | 54 | Fujitsu MMA Multimedia Accelerator |
| EM_PCP | 55 | Siemens PCP |
| EM_NCPU | 56 | Sony nCPU embedded RISC processor |
| EM_NDR1 | 57 | Denso NDR1 microprocessor |
| EM_STARCORE | 58 | Motorola Star*Core processor |
| EM_ME16 | 59 | Toyota ME16 processor |
| EM_ST100 | 60 | STMicroelectronics ST100 processor |
| EM_TINYJ | 61 | Advanced Logic Corp. TinyJ embedded processor family |
| Reserved | 62-65 | Reserved for future use |
| EM_FX66 | 66 | Siemens FX66 microcontroller |
| EM_ST9PLUS | 67 | STMicroelectronics ST9+ 8/16 bit microcontroller |
| EM_ST7 | 68 | STMicroelectronics ST7 8-bit microcontroller |
| EM_68HC16 | 69 | Motorola MC68HC16 Microcontroller |
| EM_68HC11 | 70 | Motorola MC68HC11 Microcontroller |
| EM_68HC08 | 71 | Motorola MC68HC08 Microcontroller |
| EM_68HC05 | 72 | Motorola MC68HC05 Microcontroller |
| EM_SVX | 73 | Silicon Graphics SVx |
| EM_ST19 | 74 | STMicroelectronics ST19 8-bit microcontroller |
| EM_VAX | 75 | Digital VAX |
| EM_CRIS | 76 | Axis Communications 32-bit embedded processor |
| EM_JAVELIN | 77 | Infineon Technologies 32-bit embedded processor |
| EM_FIREPATH | 78 | Element 14 64-bit DSP Processor |
| EM_ZSP | 79 | LSI Logic 16-bit DSP Processor |
Other values are reserved and will be assigned to new machines as necessary. Processor-specific ELF names use the machine name to distinguish them. For example, the flags mentioned in the next table use the prefix EF_; a flag named WIDGET for the EM_XYZ machine would be called EM_XYZ_WIDGET.
e_version| Name | Value | Meaning |
|---|---|---|
| EV_NONE | 0 | Invalid version |
| EV_CURRENT | 1 | Current version |
The value ``1'' signifies the original file format; extensions will create new versions with higher numbers. Although the value of ``EV_CURRENT'' is shown as 1 in the previous table, it will change as necessary to reflect the current version number.
e_entrye_phoffe_shoffe_flagse_ehsizee_phentsizee_phnume_shentsizee_shnume_shstrndx