| Index: courgette/types_elf.h
|
| diff --git a/courgette/types_elf.h b/courgette/types_elf.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..707f481f4e7edaadfe004bea864e2c89913c61f8
|
| --- /dev/null
|
| +++ b/courgette/types_elf.h
|
| @@ -0,0 +1,141 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef COURGETTE_ELF_TYPES_H_
|
| +#define COURGETTE_ELF_TYPES_H_
|
| +
|
| +//
|
| +// This header defines various types from the ELF file spec, but no code
|
| +// related to using them.
|
| +//
|
| +
|
| +typedef uint32 Elf32_Addr; // Unsigned program address
|
| +typedef uint16 Elf32_Half; // Unsigned medium integer
|
| +typedef uint32 Elf32_Off; // Unsigned file offset
|
| +typedef int32 Elf32_Sword; // Signed large integer
|
| +typedef uint32 Elf32_Word; // Unsigned large integer
|
| +
|
| +
|
| +// The header at the top of the file
|
| +struct Elf32_Ehdr {
|
| + unsigned char e_ident[16];
|
| + 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;
|
| +};
|
| +
|
| +// values for header->e_type
|
| +enum e_type_values {
|
| + 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_LOPROC = 0xff00, // Processor-specific
|
| + ET_HIPROC = 0xfff // Processor-specific
|
| +};
|
| +
|
| +// values for header->e_machine
|
| +enum e_machine_values {
|
| + EM_NONE = 0, // No machine
|
| + EM_386 = 3, // Intel Architecture
|
| + EM_x86_64 = 62, // Intel x86-64 Architecture
|
| + // Other values skipped
|
| +};
|
| +
|
| +// A section header in the section header table
|
| +struct Elf32_Shdr {
|
| + Elf32_Word sh_name;
|
| + Elf32_Word sh_type;
|
| + Elf32_Word sh_flags;
|
| + Elf32_Addr sh_addr;
|
| + Elf32_Off sh_offset;
|
| + Elf32_Word sh_size;
|
| + Elf32_Word sh_link;
|
| + Elf32_Word sh_info;
|
| + Elf32_Word sh_addralign;
|
| + Elf32_Word sh_entsize;
|
| +};
|
| +
|
| +// Values for the section type field in a section header
|
| +enum sh_type_values {
|
| + SHT_NULL = 0,
|
| + SHT_PROGBITS = 1,
|
| + SHT_SYMTAB = 2,
|
| + SHT_STRTAB = 3,
|
| + SHT_RELA = 4,
|
| + SHT_HASH = 5,
|
| + SHT_DYNAMIC = 6,
|
| + SHT_NOTE = 7,
|
| + SHT_NOBITS = 8,
|
| + SHT_REL = 9,
|
| + SHT_SHLIB = 10,
|
| + SHT_DYNSYM = 11,
|
| + SHT_LOPROC = 0x70000000,
|
| + SHT_HIPROC = 0x7fffffff,
|
| + SHT_LOUSER = 0x80000000,
|
| + SHT_HIUSER = 0xffffffff,
|
| +};
|
| +
|
| +struct Elf32_Phdr {
|
| + Elf32_Word p_type;
|
| + Elf32_Off p_offset;
|
| + Elf32_Addr p_vaddr;
|
| + Elf32_Addr p_paddr;
|
| + Elf32_Word p_filesz;
|
| + Elf32_Word p_memsz;
|
| + Elf32_Word p_flags;
|
| + Elf32_Word p_align;
|
| +};
|
| +
|
| +// Values for the segment type field in a program segment header
|
| +enum ph_type_values {
|
| + PT_NULL = 0,
|
| + PT_LOAD = 1,
|
| + PT_DYNAMIC = 2,
|
| + PT_INTERP = 3,
|
| + PT_NOTE = 4,
|
| + PT_SHLIB = 5,
|
| + PT_PHDR = 6,
|
| + PT_LOPROC = 0x70000000,
|
| + PT_HIPROC = 0x7fffffff
|
| +};
|
| +
|
| +struct Elf32_Rel {
|
| + Elf32_Addr r_offset;
|
| + Elf32_Word r_info;
|
| +};
|
| +
|
| +struct Elf32_Rela {
|
| + Elf32_Addr r_offset;
|
| + Elf32_Word r_info;
|
| + Elf32_Sword r_addend;
|
| +};
|
| +
|
| +enum elf32_rel_386_type_values {
|
| + R_386_NONE = 0,
|
| + R_386_32 = 1,
|
| + R_386_PC32 = 2,
|
| + R_386_GOT32 = 3,
|
| + R_386_PLT32 = 4,
|
| + R_386_COPY = 5,
|
| + R_386_GLOB_DAT = 6,
|
| + R_386_JMP_SLOT = 7,
|
| + R_386_RELATIVE = 8,
|
| + R_386_GOTOFF = 9,
|
| + R_386_GOTPC = 10,
|
| + R_386_TLS_TPOFF = 14,
|
| +};
|
| +
|
| +#endif // COURGETTE_ELF_TYPES_H_
|
|
|