[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