ObjectFilePECOFF.h revision 707e340b5d5c302ec72cbf4d922cebac0643ed91
1e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton//===-- ObjectFilePECOFF.h --------------------------------------*- C++ -*-===// 2e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 3e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// The LLVM Compiler Infrastructure 4e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 5e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// This file is distributed under the University of Illinois Open Source 6e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// License. See LICENSE.TXT for details. 7e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 8e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton//===----------------------------------------------------------------------===// 9e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 10e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#ifndef liblldb_ObjectFilePECOFF_h_ 11e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#define liblldb_ObjectFilePECOFF_h_ 12e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 13e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#include <vector> 14e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 15e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#include "lldb/Host/Mutex.h" 16e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#include "lldb/Symbol/ObjectFile.h" 17e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 18e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonclass ObjectFilePECOFF : 19e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton public lldb_private::ObjectFile 20e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton{ 21e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonpublic: 22e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 23e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 24e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // Static Functions 25e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 26e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void 27e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Initialize(); 28e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 29e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void 30e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Terminate(); 31e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 32e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static const char * 33e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginNameStatic(); 34e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 35e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static const char * 36e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginDescriptionStatic(); 37e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 38e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static ObjectFile * 39e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton CreateInstance (lldb_private::Module* module, 40e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::DataBufferSP& dataSP, 41e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton const lldb_private::FileSpec* file, 42e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::addr_t offset, 43e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::addr_t length); 44e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 45e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static bool 46e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton MagicBytesMatch (lldb::DataBufferSP& dataSP); 47e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 48e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 49e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton ObjectFilePECOFF (lldb_private::Module* module, 50e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::DataBufferSP& dataSP, 51e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton const lldb_private::FileSpec* file, 52e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::addr_t offset, 53e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton lldb::addr_t length); 54e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 55e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual 56e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton ~ObjectFilePECOFF(); 57e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 58e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 59e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton ParseHeader (); 60e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 61e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual lldb::ByteOrder 62e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetByteOrder () const; 63e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 64e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 65e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton IsExecutable () const; 66e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 67e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual size_t 68e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetAddressByteSize () const; 69e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 70e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// virtual lldb_private::AddressClass 71e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// GetAddressClass (lldb::addr_t file_addr); 72e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 73e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual lldb_private::Symtab * 74e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetSymtab(); 75e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 76e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual lldb_private::SectionList * 77e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetSectionList(); 78e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 79e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual void 80e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Dump (lldb_private::Stream *s); 81e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 82e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 83e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetArchitecture (lldb_private::ArchSpec &arch); 84e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 85e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 86e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetUUID (lldb_private::UUID* uuid); 87e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 88e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual uint32_t 89e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetDependentModules (lldb_private::FileSpecList& files); 90e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 91e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 92e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // PluginInterface protocol 93e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 94e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual const char * 95e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginName(); 96e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 97e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual const char * 98e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetShortPluginName(); 99e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 100e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual uint32_t 101e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginVersion(); 102e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 103e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// virtual lldb_private::Address 104e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// GetEntryPointAddress (); 105e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 106e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual ObjectFile::Type 107e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton CalculateType(); 108e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 109e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual ObjectFile::Strata 110e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton CalculateStrata(); 111e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 112e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonprotected: 113e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool NeedsEndianSwap() const; 114e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 115e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct dos_header { // DOS .EXE header 116e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_magic; // Magic number 117e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cblp; // Bytes on last page of file 118e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cp; // Pages in file 119e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_crlc; // Relocations 120e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cparhdr; // Size of header in paragraphs 121e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_minalloc; // Minimum extra paragraphs needed 122e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_maxalloc; // Maximum extra paragraphs needed 123e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ss; // Initial (relative) SS value 124e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_sp; // Initial SP value 125e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_csum; // Checksum 126e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ip; // Initial IP value 127e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cs; // Initial (relative) CS value 128e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_lfarlc; // File address of relocation table 129e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ovno; // Overlay number 130e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_res[4]; // Reserved words 131e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_oemid; // OEM identifier (for e_oeminfo) 132e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_oeminfo; // OEM information; e_oemid specific 133e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_res2[10]; // Reserved words 134e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t e_lfanew; // File address of new exe header 135e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } dos_header_t; 136e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 137e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_header { 138e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t machine; 139e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nsects; 140e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t modtime; 141e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t symoff; 142e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t nsyms; 143e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t hdrsize; 144e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t flags; 145e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_header_t; 146e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 147e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct data_directory { 148e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmaddr; 149e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmsize; 150e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } data_directory_t; 151e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 152e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_opt_header 153e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton { 154e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t magic; 155e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t major_linker_version; 156e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t minor_linker_version; 157e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t code_size; 158e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t data_size; 159e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t bss_size; 160e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t entry; 161e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t code_offset; 162e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t data_offset; 163e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 164e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t image_base; 165e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t sect_alignment; 166e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t file_alignment; 167e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_os_system_version; 168e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_os_system_version; 169e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_image_version; 170e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_image_version; 171e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_subsystem_version; 172e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_subsystem_version; 173e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t reserved1; 174e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t image_size; 175e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t header_size; 176707e340b5d5c302ec72cbf4d922cebac0643ed91Greg Clayton uint32_t checksum; 177e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t subsystem; 178e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t dll_flags; 179e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t stack_reserve_size; 180e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t stack_commit_size; 181e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t heap_reserve_size; 182e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t heap_commit_size; 183e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t loader_flags; 184e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // uint32_t num_data_dir_entries; 185e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton std::vector<data_directory> data_dirs; // will contain num_data_dir_entries entries 186e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_opt_header_t; 187e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 188e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct section_header { 189e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton char name[8]; 190e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmsize; // Virtual Size 191e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmaddr; // Virtual Addr 192e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t size; // File size 193e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t offset; // File offset 194e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t reloff; // Offset to relocations 195e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t lineoff;// Offset to line table entries 196e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nreloc; // Number of relocation entries 197e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nline; // Number of line table entries 198e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t flags; 199e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } section_header_t; 200e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 201e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_symbol { 202e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton char name[8]; 203e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t value; 204e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t sect; 205e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t type; 206e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t storage; 207e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t naux; 208e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_symbol_t; 209e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 210e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseDOSHeader (); 211e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseCOFFHeader (uint32_t* offset_ptr); 212e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseCOFFOptionalHeader (uint32_t* offset_ptr); 213e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseSectionHeaders (uint32_t offset); 214e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 215e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpDOSHeader(lldb_private::Stream *s, const dos_header_t& header); 216e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpCOFFHeader(lldb_private::Stream *s, const coff_header_t& header); 217e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpOptCOFFHeader(lldb_private::Stream *s, const coff_opt_header_t& header); 218e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton void DumpSectionHeaders(lldb_private::Stream *s); 219e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton void DumpSectionHeader(lldb_private::Stream *s, const section_header_t& sh); 220e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool GetSectionName(std::string& sect_name, const section_header_t& sect); 221e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 222e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef std::vector<section_header_t> SectionHeaderColl; 223e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef SectionHeaderColl::iterator SectionHeaderCollIter; 224e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef SectionHeaderColl::const_iterator SectionHeaderCollConstIter; 225e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonprivate: 226e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton mutable lldb_private::Mutex m_mutex; 227e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton mutable std::auto_ptr<lldb_private::SectionList> m_sections_ap; 228e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton mutable std::auto_ptr<lldb_private::Symtab> m_symtab_ap; 229e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton dos_header_t m_dos_header; 230e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton coff_header_t m_coff_header; 231e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton coff_opt_header_t m_coff_header_opt; 232e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton SectionHeaderColl m_sect_headers; 233e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton}; 234e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 235e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#endif // #ifndef liblldb_ObjectFilePECOFF_h_ 236