Path: blob/main/contrib/llvm-project/lldb/source/Plugins/ObjectFile/JSON/ObjectFileJSON.h
39642 views
//===-- ObjectFileJSON.h -------------------------------------- -*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_JSON_OBJECTFILEJSON_H9#define LLDB_SOURCE_PLUGINS_OBJECTFILE_JSON_OBJECTFILEJSON_H1011#include "lldb/Symbol/ObjectFile.h"12#include "lldb/Utility/ArchSpec.h"13#include "llvm/Support/JSON.h"1415namespace lldb_private {1617class ObjectFileJSON : public ObjectFile {18public:19static void Initialize();20static void Terminate();2122static llvm::StringRef GetPluginNameStatic() { return "JSON"; }2324static const char *GetPluginDescriptionStatic() {25return "JSON object file reader.";26}2728static ObjectFile *29CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,30lldb::offset_t data_offset, const FileSpec *file,31lldb::offset_t file_offset, lldb::offset_t length);3233static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,34lldb::WritableDataBufferSP data_sp,35const lldb::ProcessSP &process_sp,36lldb::addr_t header_addr);3738static size_t GetModuleSpecifications(const FileSpec &file,39lldb::DataBufferSP &data_sp,40lldb::offset_t data_offset,41lldb::offset_t file_offset,42lldb::offset_t length,43ModuleSpecList &specs);4445llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }4647// LLVM RTTI support48static char ID;49bool isA(const void *ClassID) const override {50return ClassID == &ID || ObjectFile::isA(ClassID);51}52static bool classof(const ObjectFile *obj) { return obj->isA(&ID); }5354bool ParseHeader() override;5556lldb::ByteOrder GetByteOrder() const override {57return m_arch.GetByteOrder();58}5960bool IsExecutable() const override { return false; }6162uint32_t GetAddressByteSize() const override {63return m_arch.GetAddressByteSize();64}6566AddressClass GetAddressClass(lldb::addr_t file_addr) override {67return AddressClass::eInvalid;68}6970void ParseSymtab(lldb_private::Symtab &symtab) override;7172bool IsStripped() override { return false; }7374void CreateSections(SectionList &unified_section_list) override;7576void Dump(Stream *s) override {}7778ArchSpec GetArchitecture() override { return m_arch; }7980UUID GetUUID() override { return m_uuid; }8182uint32_t GetDependentModules(FileSpecList &files) override { return 0; }8384Type CalculateType() override { return m_type; }8586Strata CalculateStrata() override { return eStrataUser; }8788static bool MagicBytesMatch(lldb::DataBufferSP data_sp, lldb::addr_t offset,89lldb::addr_t length);9091struct Header {92std::string triple;93std::string uuid;94std::optional<ObjectFile::Type> type;95};9697struct Body {98std::vector<JSONSection> sections;99std::vector<JSONSymbol> symbols;100};101102private:103ArchSpec m_arch;104UUID m_uuid;105ObjectFile::Type m_type;106std::optional<uint64_t> m_size;107std::vector<JSONSymbol> m_symbols;108std::vector<JSONSection> m_sections;109110ObjectFileJSON(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,111lldb::offset_t data_offset, const FileSpec *file,112lldb::offset_t offset, lldb::offset_t length, ArchSpec arch,113UUID uuid, Type type, std::vector<JSONSymbol> symbols,114std::vector<JSONSection> sections);115};116117bool fromJSON(const llvm::json::Value &value, ObjectFileJSON::Header &header,118llvm::json::Path path);119120bool fromJSON(const llvm::json::Value &value, ObjectFileJSON::Body &body,121llvm::json::Path path);122123} // namespace lldb_private124#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_JSON_OBJECTFILEJSON_H125126127