LLDB mainline
ObjectFileXCOFF.h
Go to the documentation of this file.
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-exception
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H
11#define LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H
12
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 ObjectFileXCOFF
23/// Generic XCOFF object file reader.
24///
25/// This class provides a generic XCOFF (32/64 bit) reader plugin implementing
26/// the ObjectFile protocol.
28public:
29 // Static Functions
30 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
41 CreateInstance(const lldb::ModuleSP &module_sp,
42 lldb::DataExtractorSP extractor_sp, lldb::offset_t data_offset,
43 const lldb_private::FileSpec *file, lldb::offset_t file_offset,
44 lldb::offset_t length);
45
47 const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp,
48 const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
49
50 static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,
51 lldb::DataBufferSP &data_sp,
52 lldb::offset_t data_offset,
53 lldb::offset_t file_offset,
54 lldb::offset_t length,
56
57 static bool MagicBytesMatch(lldb::DataBufferSP &data_sp, lldb::addr_t offset,
58 lldb::addr_t length);
59
60 // PluginInterface protocol
61 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
62
63 // ObjectFile Protocol.
64 bool ParseHeader() override;
65
66 lldb::ByteOrder GetByteOrder() const override;
67
68 bool IsExecutable() const override;
69
70 uint32_t GetAddressByteSize() const override;
71
73
74 void ParseSymtab(lldb_private::Symtab &symtab) override;
75
76 bool IsStripped() override;
77
78 void CreateSections(lldb_private::SectionList &unified_section_list) override;
79
80 void Dump(lldb_private::Stream *s) override;
81
83
84 lldb_private::UUID GetUUID() override;
85
86 uint32_t GetDependentModules(lldb_private::FileSpecList &files) override;
87
88 ObjectFile::Type CalculateType() override;
89
90 ObjectFile::Strata CalculateStrata() override;
91
92 ObjectFileXCOFF(const lldb::ModuleSP &module_sp,
93 lldb::DataExtractorSP extractor_sp,
94 lldb::offset_t data_offset,
95 const lldb_private::FileSpec *file, lldb::offset_t offset,
96 lldb::offset_t length);
97
98 ObjectFileXCOFF(const lldb::ModuleSP &module_sp,
99 lldb::DataBufferSP header_data_sp,
100 const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
101
102protected:
104 MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,
105 uint64_t Offset);
106
107private:
108 bool CreateBinary();
109 template <typename T>
110 void
112
113 struct XCOFF32 {
114 using SectionHeader = llvm::object::XCOFFSectionHeader32;
115 static constexpr bool Is64Bit = false;
116 };
117 struct XCOFF64 {
118 using SectionHeader = llvm::object::XCOFFSectionHeader64;
119 static constexpr bool Is64Bit = true;
120 };
121
122 std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;
123};
124
125#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILE_H
ObjectFile::Type CalculateType() override
The object file should be able to calculate its type by looking at its file header and possibly the s...
llvm::StringRef GetPluginName() override
bool ParseHeader() override
Attempts to parse the object header.
uint32_t GetAddressByteSize() const override
Gets the address size in bytes for the current object file.
static lldb::WritableDataBufferSP MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size, uint64_t Offset)
lldb_private::ArchSpec GetArchitecture() override
Get the ArchSpec for this object file.
uint32_t GetDependentModules(lldb_private::FileSpecList &files) override
Extract the dependent modules from an object file.
void ParseSymtab(lldb_private::Symtab &symtab) override
Parse the symbol table into the provides symbol table object.
static llvm::StringRef GetPluginNameStatic()
ObjectFile::Strata CalculateStrata() override
The object file should be able to calculate the strata of the object file.
static lldb_private::ObjectFile * CreateMemoryInstance(const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp, const lldb::ProcessSP &process_sp, lldb::addr_t header_addr)
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset, lldb::offset_t file_offset, lldb::offset_t length, lldb_private::ModuleSpecList &specs)
static bool MagicBytesMatch(lldb::DataBufferSP &data_sp, lldb::addr_t offset, lldb::addr_t length)
lldb::ByteOrder GetByteOrder() const override
Gets whether endian swapping should occur when extracting data from this object file.
void CreateSections(lldb_private::SectionList &unified_section_list) override
lldb_private::AddressClass GetAddressClass(lldb::addr_t file_addr) override
Get the address type given a file address in an object file.
static llvm::StringRef GetPluginDescriptionStatic()
static void Initialize()
static lldb_private::ObjectFile * CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataExtractorSP extractor_sp, lldb::offset_t data_offset, const lldb_private::FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length)
bool IsExecutable() const override
Tells whether this object file is capable of being the main executable for a process.
lldb_private::UUID GetUUID() override
Gets the UUID for this object file.
void CreateSectionsWithBitness(lldb_private::SectionList &unified_section_list)
static void Terminate()
bool IsStripped() override
Detect if this object file has been stripped of local symbols.
void Dump(lldb_private::Stream *s) override
Dump a description of this object to a Stream.
ObjectFileXCOFF(const lldb::ModuleSP &module_sp, lldb::DataExtractorSP extractor_sp, lldb::offset_t data_offset, const lldb_private::FileSpec *file, lldb::offset_t offset, lldb::offset_t length)
std::unique_ptr< llvm::object::XCOFFObjectFile > m_binary
An architecture specification class.
Definition ArchSpec.h:31
A file collection class.
A file utility class.
Definition FileSpec.h:57
A plug-in interface definition class for object file parsers.
Definition ObjectFile.h:46
A stream class that can stream formatted output to a file.
Definition Stream.h:28
Represents UUID's of various sizes.
Definition UUID.h:27
uint64_t offset_t
Definition lldb-types.h:85
std::shared_ptr< lldb_private::Process > ProcessSP
ByteOrder
Byte ordering definitions.
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
uint64_t addr_t
Definition lldb-types.h:80
std::shared_ptr< lldb_private::DataExtractor > DataExtractorSP
std::shared_ptr< lldb_private::Module > ModuleSP
static constexpr bool Is64Bit
llvm::object::XCOFFSectionHeader32 SectionHeader
llvm::object::XCOFFSectionHeader64 SectionHeader
static constexpr bool Is64Bit