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, 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
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,
55
56 static bool MagicBytesMatch(lldb::DataBufferSP &data_sp, lldb::addr_t offset,
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, 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:
102 MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,
103 uint64_t Offset);
104
105private:
106 bool CreateBinary();
107
108 std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;
109};
110
111#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILE_H
Generic XCOFF object file reader.
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()
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.
static void Terminate()
static lldb_private::ObjectFile * CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp, lldb::offset_t data_offset, const lldb_private::FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length)
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.
std::unique_ptr< llvm::object::XCOFFObjectFile > m_binary
An architecture specification class.
Definition: ArchSpec.h:31
A file collection class.
Definition: FileSpecList.h:91
A file utility class.
Definition: FileSpec.h:56
A plug-in interface definition class for object file parsers.
Definition: ObjectFile.h:44
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
uint64_t offset_t
Definition: lldb-types.h:85
std::shared_ptr< lldb_private::Process > ProcessSP
Definition: lldb-forward.h:389
ByteOrder
Byte ordering definitions.
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
Definition: lldb-forward.h:336
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
Definition: lldb-forward.h:337
uint64_t addr_t
Definition: lldb-types.h:80
std::shared_ptr< lldb_private::Module > ModuleSP
Definition: lldb-forward.h:373