brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 2cecd03 Raw
124 lines · c
1//===-- ObjectFileXCOFF.h --------------------------------------- -*- C++2//-*-===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H11#define LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H12 13#include "lldb/Symbol/ObjectFile.h"14#include "lldb/Utility/ArchSpec.h"15#include "lldb/Utility/FileSpec.h"16#include "lldb/Utility/UUID.h"17#include "lldb/lldb-private.h"18#include "llvm/Object/XCOFFObjectFile.h"19#include <cstdint>20#include <vector>21 22/// \class ObjectFileXCOFF23/// Generic XCOFF object file reader.24///25/// This class provides a generic XCOFF (32/64 bit) reader plugin implementing26/// the ObjectFile protocol.27class ObjectFileXCOFF : public lldb_private::ObjectFile {28public:29  // Static Functions30  static void Initialize();31 32  static void Terminate();33 34  static llvm::StringRef GetPluginNameStatic() { return "xcoff"; }35 36  static llvm::StringRef GetPluginDescriptionStatic() {37    return "XCOFF object file reader.";38  }39 40  static lldb_private::ObjectFile *41  CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,42                 lldb::offset_t data_offset, const lldb_private::FileSpec *file,43                 lldb::offset_t file_offset, lldb::offset_t length);44 45  static lldb_private::ObjectFile *CreateMemoryInstance(46      const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp,47      const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);48 49  static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,50                                        lldb::DataBufferSP &data_sp,51                                        lldb::offset_t data_offset,52                                        lldb::offset_t file_offset,53                                        lldb::offset_t length,54                                        lldb_private::ModuleSpecList &specs);55 56  static bool MagicBytesMatch(lldb::DataBufferSP &data_sp, lldb::addr_t offset,57                              lldb::addr_t length);58 59  // PluginInterface protocol60  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }61 62  // ObjectFile Protocol.63  bool ParseHeader() override;64 65  lldb::ByteOrder GetByteOrder() const override;66 67  bool IsExecutable() const override;68 69  uint32_t GetAddressByteSize() const override;70 71  lldb_private::AddressClass GetAddressClass(lldb::addr_t file_addr) override;72 73  void ParseSymtab(lldb_private::Symtab &symtab) override;74 75  bool IsStripped() override;76 77  void CreateSections(lldb_private::SectionList &unified_section_list) override;78 79  void Dump(lldb_private::Stream *s) override;80 81  lldb_private::ArchSpec GetArchitecture() override;82 83  lldb_private::UUID GetUUID() override;84 85  uint32_t GetDependentModules(lldb_private::FileSpecList &files) override;86 87  ObjectFile::Type CalculateType() override;88 89  ObjectFile::Strata CalculateStrata() override;90 91  ObjectFileXCOFF(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,92                  lldb::offset_t data_offset,93                  const lldb_private::FileSpec *file, lldb::offset_t offset,94                  lldb::offset_t length);95 96  ObjectFileXCOFF(const lldb::ModuleSP &module_sp,97                  lldb::DataBufferSP header_data_sp,98                  const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);99 100protected:101  static lldb::WritableDataBufferSP102  MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,103                      uint64_t Offset);104 105private:106  bool CreateBinary();107  template <typename T>108  void109  CreateSectionsWithBitness(lldb_private::SectionList &unified_section_list);110 111  struct XCOFF32 {112    using SectionHeader = llvm::object::XCOFFSectionHeader32;113    static constexpr bool Is64Bit = false;114  };115  struct XCOFF64 {116    using SectionHeader = llvm::object::XCOFFSectionHeader64;117    static constexpr bool Is64Bit = true;118  };119 120  std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;121};122 123#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILE_H124