[llvm-commits] [llvm] r171648 - /llvm/trunk/include/llvm/Object/ELF.h
Michael J. Spencer
bigcheesegs at gmail.com
Sat Jan 5 19:56:27 PST 2013
Author: mspencer
Date: Sat Jan 5 21:56:27 2013
New Revision: 171648
URL: http://llvm.org/viewvc/llvm-project?rev=171648&view=rev
Log:
[Object][ELF] Add program header iterator.
Modified:
llvm/trunk/include/llvm/Object/ELF.h
Modified: llvm/trunk/include/llvm/Object/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELF.h?rev=171648&r1=171647&r2=171648&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELF.h (original)
+++ llvm/trunk/include/llvm/Object/ELF.h Sat Jan 5 21:56:27 2013
@@ -441,10 +441,10 @@
};
template<endianness target_endianness, std::size_t max_alignment, bool is64Bits>
-struct Elf_Phdr;
+struct Elf_Phdr_Impl;
template<endianness target_endianness, std::size_t max_alignment>
-struct Elf_Phdr<target_endianness, max_alignment, false> {
+struct Elf_Phdr_Impl<target_endianness, max_alignment, false> {
LLVM_ELF_IMPORT_TYPES(target_endianness, max_alignment, false)
Elf_Word p_type; // Type of segment
Elf_Off p_offset; // FileOffset where segment is located, in bytes
@@ -457,7 +457,7 @@
};
template<endianness target_endianness, std::size_t max_alignment>
-struct Elf_Phdr<target_endianness, max_alignment, true> {
+struct Elf_Phdr_Impl<target_endianness, max_alignment, true> {
LLVM_ELF_IMPORT_TYPES(target_endianness, max_alignment, true)
Elf_Word p_type; // Type of segment
Elf_Word p_flags; // Segment flags
@@ -477,6 +477,7 @@
typedef Elf_Shdr_Impl<target_endianness, max_alignment, is64Bits> Elf_Shdr;
typedef Elf_Sym_Impl<target_endianness, max_alignment, is64Bits> Elf_Sym;
typedef Elf_Dyn_Impl<target_endianness, max_alignment, is64Bits> Elf_Dyn;
+ typedef Elf_Phdr_Impl<target_endianness, max_alignment, is64Bits> Elf_Phdr;
typedef
Elf_Rel_Impl<target_endianness, max_alignment, is64Bits, false> Elf_Rel;
typedef
@@ -740,6 +741,21 @@
(base() + sec->sh_offset + sec->sh_size));
}
+ /// \brief Iterate over program header table.
+ typedef ELFEntityIterator<const Elf_Phdr> Elf_Phdr_Iter;
+
+ Elf_Phdr_Iter begin_program_headers() const {
+ return Elf_Phdr_Iter(Header->e_phentsize,
+ (const char*)base() + Header->e_phoff);
+ }
+
+ Elf_Phdr_Iter end_program_headers() const {
+ return Elf_Phdr_Iter(Header->e_phentsize,
+ (const char*)base() +
+ Header->e_phoff +
+ (Header->e_phnum * Header->e_phentsize));
+ }
+
virtual uint8_t getBytesInAddress() const;
virtual StringRef getFileFormatName() const;
virtual StringRef getObjectType() const { return "ELF"; }
More information about the llvm-commits
mailing list