Path: blob/main/contrib/llvm-project/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h
213845 views
//===-- ObjectFileXCOFF.h --------------------------------------- -*- C++1//-*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//89#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H10#define LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H1112#include "lldb/Symbol/ObjectFile.h"13#include "lldb/Utility/ArchSpec.h"14#include "lldb/Utility/FileSpec.h"15#include "lldb/Utility/UUID.h"16#include "lldb/lldb-private.h"17#include "llvm/Object/XCOFFObjectFile.h"18#include <cstdint>19#include <vector>2021/// \class ObjectFileXCOFF22/// Generic XCOFF object file reader.23///24/// This class provides a generic XCOFF (32/64 bit) reader plugin implementing25/// the ObjectFile protocol.26class ObjectFileXCOFF : public lldb_private::ObjectFile {27public:28// Static Functions29static void Initialize();3031static void Terminate();3233static llvm::StringRef GetPluginNameStatic() { return "xcoff"; }3435static llvm::StringRef GetPluginDescriptionStatic() {36return "XCOFF object file reader.";37}3839static lldb_private::ObjectFile *40CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,41lldb::offset_t data_offset, const lldb_private::FileSpec *file,42lldb::offset_t file_offset, lldb::offset_t length);4344static lldb_private::ObjectFile *CreateMemoryInstance(45const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp,46const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);4748static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,49lldb::DataBufferSP &data_sp,50lldb::offset_t data_offset,51lldb::offset_t file_offset,52lldb::offset_t length,53lldb_private::ModuleSpecList &specs);5455static bool MagicBytesMatch(lldb::DataBufferSP &data_sp, lldb::addr_t offset,56lldb::addr_t length);5758// PluginInterface protocol59llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }6061// ObjectFile Protocol.62bool ParseHeader() override;6364lldb::ByteOrder GetByteOrder() const override;6566bool IsExecutable() const override;6768uint32_t GetAddressByteSize() const override;6970lldb_private::AddressClass GetAddressClass(lldb::addr_t file_addr) override;7172void ParseSymtab(lldb_private::Symtab &symtab) override;7374bool IsStripped() override;7576void CreateSections(lldb_private::SectionList &unified_section_list) override;7778void Dump(lldb_private::Stream *s) override;7980lldb_private::ArchSpec GetArchitecture() override;8182lldb_private::UUID GetUUID() override;8384uint32_t GetDependentModules(lldb_private::FileSpecList &files) override;8586ObjectFile::Type CalculateType() override;8788ObjectFile::Strata CalculateStrata() override;8990ObjectFileXCOFF(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,91lldb::offset_t data_offset,92const lldb_private::FileSpec *file, lldb::offset_t offset,93lldb::offset_t length);9495ObjectFileXCOFF(const lldb::ModuleSP &module_sp,96lldb::DataBufferSP header_data_sp,97const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);9899protected:100static lldb::WritableDataBufferSP101MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,102uint64_t Offset);103104private:105bool CreateBinary();106template <typename T>107void108CreateSectionsWithBitness(lldb_private::SectionList &unified_section_list);109110struct XCOFF32 {111using SectionHeader = llvm::object::XCOFFSectionHeader32;112static constexpr bool Is64Bit = false;113};114struct XCOFF64 {115using SectionHeader = llvm::object::XCOFFSectionHeader64;116static constexpr bool Is64Bit = true;117};118119std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;120};121122#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILE_H123124125