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