summaryrefslogtreecommitdiff
path: root/external/gpl3/binutils/dist/elfcpp/elfcpp.h
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2016-01-29 12:44:10 +0000
committerchristos <christos@NetBSD.org>2016-01-29 12:44:10 +0000
commit5ba6b03c2d637a5877ae06b6f7e41441a2d03e7a (patch)
tree772d094b44144f5de752249f6df558033bf9cb69 /external/gpl3/binutils/dist/elfcpp/elfcpp.h
parente4c5d08e50e3a43ecaea52639e04de2b7d9b26d9 (diff)
Import binutils-2.26
Diffstat (limited to 'external/gpl3/binutils/dist/elfcpp/elfcpp.h')
-rw-r--r--external/gpl3/binutils/dist/elfcpp/elfcpp.h101
1 files changed, 93 insertions, 8 deletions
diff --git a/external/gpl3/binutils/dist/elfcpp/elfcpp.h b/external/gpl3/binutils/dist/elfcpp/elfcpp.h
index e4f9f1fa731..0e6833f60b3 100644
--- a/external/gpl3/binutils/dist/elfcpp/elfcpp.h
+++ b/external/gpl3/binutils/dist/elfcpp/elfcpp.h
@@ -1,7 +1,6 @@
// elfcpp.h -- main header file for elfcpp -*- C++ -*-
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc.
+// Copyright (C) 2006-2015 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of elfcpp.
@@ -174,7 +173,7 @@ enum EM
EM_386 = 3,
EM_68K = 4,
EM_88K = 5,
- // 6 used to be EM_486
+ EM_IAMCU = 6,
EM_860 = 7,
EM_MIPS = 8,
EM_S370 = 9,
@@ -247,7 +246,7 @@ enum EM
EM_MN10300 = 89,
EM_MN10200 = 90,
EM_PJ = 91,
- EM_OPENRISC = 92,
+ EM_OR1K = 92,
EM_ARC_A5 = 93,
EM_XTENSA = 94,
EM_VIDEOCORE = 95,
@@ -269,6 +268,8 @@ enum EM
EM_UNICORE = 110,
EM_ALTERA_NIOS2 = 113,
EM_CRX = 114,
+ EM_AARCH64 = 183,
+ EM_TILEGX = 191,
// The Morph MT.
EM_MT = 0x2530,
// DLX.
@@ -288,7 +289,7 @@ enum EM
// Old AVR objects used 0x1057 (EM_AVR is correct).
// Old MSP430 objects used 0x1059 (EM_MSP430 is correct).
// Old FR30 objects used 0x3330 (EM_FR30 is correct).
- // Old OpenRISC objects used 0x3426 and 0x8472 (EM_OPENRISC is correct).
+ // Old OpenRISC objects used 0x3426 and 0x8472 (EM_OR1K is correct).
// Old D10V objects used 0x7650 (EM_D10V is correct).
// Old D30V objects used 0x7676 (EM_D30V is correct).
// Old IP2X objects used 0x8217 (EM_IP2K is correct).
@@ -400,9 +401,14 @@ enum SHT
// x86_64 unwind information.
SHT_X86_64_UNWIND = 0x70000001,
- //MIPS-specific section types.
- // Register info section
+ // MIPS-specific section types.
+ // Section contains register usage information.
SHT_MIPS_REGINFO = 0x70000006,
+ // Section contains miscellaneous options.
+ SHT_MIPS_OPTIONS = 0x7000000d,
+
+ // AARCH64-specific section type.
+ SHT_AARCH64_ATTRIBUTES = 0x70000003,
// Link editor is to sort the entries in this section based on the
// address specified in the associated symbol table entry.
@@ -423,6 +429,7 @@ enum SHF
SHF_OS_NONCONFORMING = 0x100,
SHF_GROUP = 0x200,
SHF_TLS = 0x400,
+ SHF_COMPRESSED = 0x800,
SHF_MASKOS = 0x0ff00000,
SHF_MASKPROC = 0xf0000000,
@@ -445,6 +452,17 @@ enum SHF
SHF_X86_64_LARGE = 0x10000000
};
+// Values which appear in the first Elf_WXword of the section data
+// of a SHF_COMPRESSED section.
+enum
+{
+ ELFCOMPRESS_ZLIB = 1,
+ ELFCOMPRESS_LOOS = 0x60000000,
+ ELFCOMPRESS_HIOS = 0x6fffffff,
+ ELFCOMPRESS_LOPROC = 0x70000000,
+ ELFCOMPRESS_HIPROC = 0x7fffffff,
+};
+
// Bit flags which appear in the first 32-bit word of the section data
// of a SHT_GROUP section.
@@ -488,7 +506,13 @@ enum PT
// Runtime procedure table.
PT_MIPS_RTPROC = 0x70000001,
// .MIPS.options section.
- PT_MIPS_OPTIONS = 0x70000002
+ PT_MIPS_OPTIONS = 0x70000002,
+ // .MIPS.abiflags section.
+ PT_MIPS_ABIFLAGS = 0x70000003,
+ // Platform architecture compatibility information
+ PT_AARCH64_ARCHEXT = 0x70000000,
+ // Exception unwind tables
+ PT_AARCH64_UNWIND = 0x70000001
};
// The valid bit flags found in the Phdr p_flags field.
@@ -985,6 +1009,8 @@ struct Elf_sizes
static const int phdr_size = sizeof(internal::Phdr_data<size>);
// Size of ELF section header.
static const int shdr_size = sizeof(internal::Shdr_data<size>);
+ // Size of ELF compression header.
+ static const int chdr_size = sizeof(internal::Chdr_data<size>);
// Size of ELF symbol table entry.
static const int sym_size = sizeof(internal::Sym_data<size>);
// Sizes of ELF reloc entries.
@@ -1260,6 +1286,65 @@ class Shdr_write
internal::Shdr_data<size>* p_;
};
+// Accessor class for an ELF compression header.
+
+template<int size, bool big_endian>
+class Chdr
+{
+ public:
+ Chdr(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Chdr_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Chdr(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Chdr_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_ch_type() const
+ { return Convert<size, big_endian>::convert_host(this->p_->ch_type); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_ch_size() const
+ { return Convert<size, big_endian>::convert_host(this->p_->ch_size); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_ch_addralign() const
+ { return
+ Convert<size, big_endian>::convert_host(this->p_->ch_addralign); }
+
+ private:
+ const internal::Chdr_data<size>* p_;
+};
+
+// Write class for an ELF compression header.
+
+template<int size, bool big_endian>
+class Chdr_write
+{
+ public:
+ Chdr_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Chdr_data<size>*>(p))
+ { }
+
+ void
+ put_ch_type(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->ch_type = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_ch_size(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->ch_size = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_ch_addralign(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->ch_addralign = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Chdr_data<size>* p_;
+};
+
// Accessor class for an ELF segment header.
template<int size, bool big_endian>