15389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Copyright (C) 2007-2010 The Android Open Source Project 25389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** 35389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** This software is licensed under the terms of the GNU General Public 45389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** License version 2, as published by the Free Software Foundation, and 55389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** may be copied, distributed, and modified under those terms. 65389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** 75389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** This program is distributed in the hope that it will be useful, 85389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** but WITHOUT ANY WARRANTY; without even the implied warranty of 95389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** GNU General Public License for more details. 115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine*/ 125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Contains declarations of types, constants and structures 155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * describing ELF file format. 165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 175389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 185389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#ifndef ELFF_ELH_H_ 195389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFF_ELH_H_ 205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 21c6375cb970388a3d4f691350fecdfd528eb334dfDavid 'Digit' Turner#include <stdint.h> 225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#include "elff-common.h" 235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine// ELF file definitions 265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * ELF format documentation uses Elf##_Xxx notation for data types, where 305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * ## stands for CPU architecture (32, or 64 bit), and Xxx stands for a 315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * specific type. For the sake of compliance, we will follow doc's notation 325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * when defining types used in ELF file descriptors. However, for the sake of 335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * code simplicity, we will drop CPU architecture index from the types that 345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * have equal sizes on both, 32 and 64 bit architectures. 355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Architecture independent types. 395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint8_t Elf_Byte; 425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef int8_t Elf_Sbyte; 435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint16_t Elf_Half; 455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef int16_t Elf_Shalf; 465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint32_t Elf_Word; 485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef int32_t Elf_Sword; 495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint64_t Elf_Xword; 515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef int64_t Elf_Sxword; 525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Architecture dependent types. 555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 32-bit ELF address. */ 585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint32_t Elf32_Addr; 595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 32-bit ELF offset. */ 605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint32_t Elf32_Off; 615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 64-bit ELF address. */ 635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint64_t Elf64_Addr; 645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 64-bit ELF offset. */ 655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef uint64_t Elf64_Off; 665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine// ELF file header 695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Byte size of the fixed portion of ELF header. */ 725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define EI_NIDENT 16 735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Common (architecture independent portion of) ELF file header, 755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * that starts at offset 0 in ELF file. 765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef struct Elf_CommonHdr { 785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine union { 795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine struct { 805389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* ei_mag0 - ei_mag3 contain ELF header signature. See ELFMAGx bellow. */ 815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_mag0; 825389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_mag1; 835389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_mag2; 845389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_mag3; 855389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 865389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* File class (32, or 64 bits). See ELFCLASSxxx bellow. */ 875389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_class; 885389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 895389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Data encoding (endianness). See ELFDATAxxx bellow. */ 905389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_data; 915389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 925389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* ELF header version number. */ 935389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte ei_version; 945389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } ei_info; 955389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine unsigned char e_ident[EI_NIDENT]; 965389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine }; 975389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 985389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* File type (executable, shared object, etc.) */ 995389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_type; 1005389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1015389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Processor type. */ 1025389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_machine; 1035389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1045389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* File version. */ 1055389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word e_version; 1065389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} Elf_CommonHdr; 1075389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1085389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1095389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* ELF header signature. */ 1105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFMAG0 0x7f 1115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFMAG1 'E' 1125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFMAG2 'L' 1135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFMAG3 'F' 1145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFMAG "\177ELF" 1155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SELFMAG 4 1165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1175389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 1185389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Possible ei_class values. 1195389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1215389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Invalid. */ 1225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFCLASSNONE 0 1235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* It's 32-bit ELF file. */ 1245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFCLASS32 1 1255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* It's 64-bit ELF file. */ 1265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFCLASS64 2 1275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 1295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Possible ei_data values. 1305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Invalid. */ 1335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFDATANONE 0 1345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* ELF data is formatted in little-endian. */ 1355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFDATA2LSB 1 1365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* ELF data is formatted in big-endian. */ 1375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define ELFDATA2MSB 2 1385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Tempated (architecture dependent) ELF file header. 1405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Template param: 1415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Elf_Addr - Actual type for address encoding (Elf32_Addr, or Elf64_Addr). 1425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Elf_Off - Actual type for offset encoding (Elf32_Off, or Elf64_Off). 1435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetemplate <typename Elf_Addr, typename Elf_Off> 1455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinestruct Elf_FHdr { 1465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Common header. */ 1475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_CommonHdr common; 1485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Module entry point. */ 1505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Addr e_entry; 1515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Programm header table offset (in bytes) from the beginning of the file. 1535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Zero if there is no programm header in this file. 1545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Off e_phoff; 1565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section header table offset (in bytes) from the beginning of the file. 1585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Zero if there is no section header in this file. 1595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Off e_shoff; 1615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Processor-specific flags. */ 1635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word e_flags; 1645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* This header size in bytes. */ 1665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_ehsize; 1675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Byte size of an entry in programm header table. All entries 1695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * in the table are the same size. 1705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_phentsize; 1725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Number of entries in programm header table. */ 1745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_phnum; 1755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Byte size of an entry in section header table. All entries 1775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * in the table are the same size. 1785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_shentsize; 1805389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Number of entries in section header table. */ 1825389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_shnum; 1835389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1845389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Zero-based index of an entry for name string table section in the section 1855389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * header table. If no such section exists in the file this field contains 1865389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * SHN_UNDEF value. 1875389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 1885389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Half e_shstrndx; 1895389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine}; 1905389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 32-bit ELF header. */ 1915389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef Elf_FHdr<Elf32_Addr, Elf32_Off> Elf32_FHdr; 1925389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 64-bit ELF header. */ 1935389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef Elf_FHdr<Elf64_Addr, Elf64_Off> Elf64_FHdr; 1945389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1955389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 1965389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine// ELF section header 1975389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine//============================================================================= 1985389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1995389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Templated (architecture dependent) section header for ELF file. 2005389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Template param: 2015389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Elf_Addr - Actual type for address encoding (Elf32_Addr, or Elf64_Addr). 2025389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Elf_Off - Actual type for offset encoding (Elf32_Off, or Elf64_Off). 2035389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 2045389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetemplate <typename Elf_Addr, typename Elf_Off> 2055389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinestruct Elf_SHdr { 2065389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Index (byte offset) of section name in the name string table section. */ 2075389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_name; 2085389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2095389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section type and semantics. */ 2105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_type; 2115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section flags and attributes. */ 2135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_flags; 2145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section address in the memory image of the process. */ 2165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Addr sh_addr; 2175389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2185389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Byte offset from the beginning of the ELF file to the first 2195389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * byte in the section. 2205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 2215389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Off sh_offset; 2225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section size in bytes. */ 2245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_size; 2255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Section header table index link. Depends on section type. */ 2275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_link; 2285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Extra section information, depending on the section type. */ 2305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_info; 2315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Address alignment constrains. 0 and 1 means that section has no 2335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * alignment constrains. 2345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 2355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_addralign; 2365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine /* Entry size for sections that hold some kind of a table. */ 2385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Word sh_entsize; 2395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine}; 2405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 32-bit section header. */ 2415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef Elf_SHdr<Elf32_Addr, Elf32_Off> Elf32_SHdr; 2425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 64-bit section header. */ 2435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinetypedef Elf_SHdr<Elf64_Addr, Elf64_Off> Elf64_SHdr; 2445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 2465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Special section indices 2475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 2485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_UNDEF 0 2495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_LORESERVE 0xff00 2505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_LOPROC 0xff00 2515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_HIPROC 0xff1f 2525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_LOOS 0xff20 2535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_HIOS 0xff3f 2545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_ABS 0xfff1 2555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_COMMON 0xfff2 2565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_XINDEX 0xffff 2575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHN_HIRESERVE 0xffff 2585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 2605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Values for sh_type 2615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 2625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_NULL 0 2635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_PROGBITS 1 2645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_SYMTAB 2 2655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_STRTAB 3 2665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_RELA 4 2675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_HASH 5 2685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_DYNAMIC 6 2695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_NOTE 7 2705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_NOBITS 8 2715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_REL 9 2725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_SHLIB 10 2735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_DYNSYM 11 2745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_INIT_ARRAY 14 2755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_FINI_ARRAY 15 2765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_PREINIT_ARRAY 16 2775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_GROUP 17 2785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_SYMTAB_SHNDX 18 2795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define SHT_NUM 19 2805389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#endif // ELFF_ELH_H_ 282