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
52 lldb::DataExtractorSP &extractor_sp,
53 lldb::offset_t file_offset, lldb::offset_t length);
54
55 static std::optional<llvm::XCOFF::MagicNumber>
57 lldb::addr_t length);
58
59 // PluginInterface protocol
60 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
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
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,
92 lldb::DataExtractorSP extractor_sp,
93 lldb::offset_t data_offset,
94 const lldb_private::FileSpec *file, lldb::offset_t offset,
95 lldb::offset_t length);
96
97 ObjectFileXCOFF(const lldb::ModuleSP &module_sp,
98 lldb::DataBufferSP header_data_sp,
99 const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
100
101protected:
103 MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,
104 uint64_t Offset);
105
106private:
107 bool CreateBinary();
108 template <typename T>
109 void
111
112 struct XCOFF32 {
113 using SectionHeader = llvm::object::XCOFFSectionHeader32;
114 static constexpr bool Is64Bit = false;
115 };
116 struct XCOFF64 {
117 using SectionHeader = llvm::object::XCOFFSectionHeader64;
118 static constexpr bool Is64Bit = true;
119 };
120
121 std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;
122};
123
124#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_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()
static std::optional< llvm::XCOFF::MagicNumber > GetMagicBytes(lldb::DataExtractorSP &extractor_sp, lldb::addr_t offset, lldb::addr_t length)
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)
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.
static lldb_private::ModuleSpecList GetModuleSpecifications(const lldb_private::FileSpec &file, lldb::DataExtractorSP &extractor_sp, lldb::offset_t file_offset, lldb::offset_t length)
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:32
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