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/Symbol/ObjectFile.h" 16e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 17e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonclass ObjectFilePECOFF : 18e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton public lldb_private::ObjectFile 19e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton{ 20e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonpublic: 21e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 22e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 23e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // Static Functions 24e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 25e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void 26e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Initialize(); 27e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 28e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void 29e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Terminate(); 30e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 310e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton static lldb_private::ConstString 32e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginNameStatic(); 33e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 34e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static const char * 35e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginDescriptionStatic(); 36e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 37e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static ObjectFile * 383508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton CreateInstance (const lldb::ModuleSP &module_sp, 39cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::DataBufferSP& data_sp, 40cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t data_offset, 41e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton const lldb_private::FileSpec* file, 42cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t offset, 43cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t length); 44e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 45b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton static lldb_private::ObjectFile * 463508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton CreateMemoryInstance (const lldb::ModuleSP &module_sp, 47b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton lldb::DataBufferSP& data_sp, 48b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton const lldb::ProcessSP &process_sp, 49b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton lldb::addr_t header_addr); 5036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 5136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton static size_t 5236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton GetModuleSpecifications (const lldb_private::FileSpec& file, 5336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton lldb::DataBufferSP& data_sp, 5436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton lldb::offset_t data_offset, 5536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton lldb::offset_t file_offset, 5636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton lldb::offset_t length, 5736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton lldb_private::ModuleSpecList &specs); 5836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 59e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static bool 60cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton MagicBytesMatch (lldb::DataBufferSP& data_sp); 61e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 62e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 633508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton ObjectFilePECOFF (const lldb::ModuleSP &module_sp, 64cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::DataBufferSP& data_sp, 65cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t data_offset, 66e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton const lldb_private::FileSpec* file, 67cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t file_offset, 68cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t length); 69e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 70e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual 71e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton ~ObjectFilePECOFF(); 72e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 73e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 74e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton ParseHeader (); 75e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 76e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual lldb::ByteOrder 77e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetByteOrder () const; 78e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 79e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 80e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton IsExecutable () const; 81e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 8236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton virtual uint32_t 83e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetAddressByteSize () const; 84e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 85e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// virtual lldb_private::AddressClass 86e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// GetAddressClass (lldb::addr_t file_addr); 87e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 88e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual lldb_private::Symtab * 897940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton GetSymtab (); 90e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 917940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton virtual bool 927940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton IsStripped (); 937940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton 947940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton virtual void 957940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton CreateSections (lldb_private::SectionList &unified_section_list); 96e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 97e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual void 98e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton Dump (lldb_private::Stream *s); 99e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 100e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 101e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetArchitecture (lldb_private::ArchSpec &arch); 102e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 103e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual bool 104e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetUUID (lldb_private::UUID* uuid); 105e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 106e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual uint32_t 107e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetDependentModules (lldb_private::FileSpecList& files); 108e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 109e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 110e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // PluginInterface protocol 111e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton //------------------------------------------------------------------ 1120e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton virtual lldb_private::ConstString 113e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginName(); 114e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 115e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual uint32_t 116e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton GetPluginVersion(); 117e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// 118e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// virtual lldb_private::Address 119e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton// GetEntryPointAddress (); 120e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 121e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual ObjectFile::Type 122e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton CalculateType(); 123e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 124e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton virtual ObjectFile::Strata 125e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton CalculateStrata(); 126e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 127e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonprotected: 128e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool NeedsEndianSwap() const; 129e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 130e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct dos_header { // DOS .EXE header 131e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_magic; // Magic number 132e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cblp; // Bytes on last page of file 133e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cp; // Pages in file 134e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_crlc; // Relocations 135e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cparhdr; // Size of header in paragraphs 136e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_minalloc; // Minimum extra paragraphs needed 137e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_maxalloc; // Maximum extra paragraphs needed 138e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ss; // Initial (relative) SS value 139e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_sp; // Initial SP value 140e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_csum; // Checksum 141e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ip; // Initial IP value 142e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_cs; // Initial (relative) CS value 143e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_lfarlc; // File address of relocation table 144e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_ovno; // Overlay number 145e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_res[4]; // Reserved words 146e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_oemid; // OEM identifier (for e_oeminfo) 147e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_oeminfo; // OEM information; e_oemid specific 148e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t e_res2[10]; // Reserved words 149e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t e_lfanew; // File address of new exe header 150e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } dos_header_t; 151e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 152e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_header { 153e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t machine; 154e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nsects; 155e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t modtime; 156e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t symoff; 157e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t nsyms; 158e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t hdrsize; 159e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t flags; 160e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_header_t; 161e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 162e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct data_directory { 163e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmaddr; 164e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmsize; 165e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } data_directory_t; 166e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 167e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_opt_header 168e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton { 169e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t magic; 170e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t major_linker_version; 171e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t minor_linker_version; 172e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t code_size; 173e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t data_size; 174e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t bss_size; 175e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t entry; 176e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t code_offset; 177e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t data_offset; 178e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 179e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t image_base; 180e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t sect_alignment; 181e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t file_alignment; 182e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_os_system_version; 183e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_os_system_version; 184e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_image_version; 185e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_image_version; 186e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t major_subsystem_version; 187e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t minor_subsystem_version; 188e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t reserved1; 189e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t image_size; 190e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t header_size; 191707e340b5d5c302ec72cbf4d922cebac0643ed91Greg Clayton uint32_t checksum; 192e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t subsystem; 193e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t dll_flags; 194e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t stack_reserve_size; 195e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t stack_commit_size; 196e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t heap_reserve_size; 197e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint64_t heap_commit_size; 198e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t loader_flags; 199e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton // uint32_t num_data_dir_entries; 200e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton std::vector<data_directory> data_dirs; // will contain num_data_dir_entries entries 201e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_opt_header_t; 202e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 203e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct section_header { 204e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton char name[8]; 205e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmsize; // Virtual Size 206e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t vmaddr; // Virtual Addr 207e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t size; // File size 208e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t offset; // File offset 209e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t reloff; // Offset to relocations 210e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t lineoff;// Offset to line table entries 211e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nreloc; // Number of relocation entries 212e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t nline; // Number of line table entries 213e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t flags; 214e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } section_header_t; 215e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 216e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef struct coff_symbol { 217e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton char name[8]; 218e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint32_t value; 219e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t sect; 220e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint16_t type; 221e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t storage; 222e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton uint8_t naux; 223e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton } coff_symbol_t; 224e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 225e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseDOSHeader (); 22636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton bool ParseCOFFHeader (lldb::offset_t *offset_ptr); 22736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton bool ParseCOFFOptionalHeader (lldb::offset_t *offset_ptr); 228e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool ParseSectionHeaders (uint32_t offset); 229e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 230e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpDOSHeader(lldb_private::Stream *s, const dos_header_t& header); 231e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpCOFFHeader(lldb_private::Stream *s, const coff_header_t& header); 232e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton static void DumpOptCOFFHeader(lldb_private::Stream *s, const coff_opt_header_t& header); 233e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton void DumpSectionHeaders(lldb_private::Stream *s); 234e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton void DumpSectionHeader(lldb_private::Stream *s, const section_header_t& sh); 235e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton bool GetSectionName(std::string& sect_name, const section_header_t& sect); 236e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 237e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef std::vector<section_header_t> SectionHeaderColl; 238e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef SectionHeaderColl::iterator SectionHeaderCollIter; 239e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton typedef SectionHeaderColl::const_iterator SectionHeaderCollConstIter; 240e9f4982716a8b91007af2637bd32e8661e3a9103Greg Claytonprivate: 241e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton dos_header_t m_dos_header; 242e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton coff_header_t m_coff_header; 243e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton coff_opt_header_t m_coff_header_opt; 244e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton SectionHeaderColl m_sect_headers; 245e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton}; 246e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton 247e9f4982716a8b91007af2637bd32e8661e3a9103Greg Clayton#endif // #ifndef liblldb_ObjectFilePECOFF_h_ 248