Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h
213845 views
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
13
#include "lldb/Symbol/ObjectFile.h"
14
#include "lldb/Utility/ArchSpec.h"
15
#include "lldb/Utility/FileSpec.h"
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.
27
class ObjectFileXCOFF : public lldb_private::ObjectFile {
28
public:
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
40
static lldb_private::ObjectFile *
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
45
static lldb_private::ObjectFile *CreateMemoryInstance(
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,
54
lldb_private::ModuleSpecList &specs);
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
71
lldb_private::AddressClass GetAddressClass(lldb::addr_t file_addr) override;
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
81
lldb_private::ArchSpec GetArchitecture() override;
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
100
protected:
101
static lldb::WritableDataBufferSP
102
MapFileDataWritable(const lldb_private::FileSpec &file, uint64_t Size,
103
uint64_t Offset);
104
105
private:
106
bool CreateBinary();
107
template <typename T>
108
void
109
CreateSectionsWithBitness(lldb_private::SectionList &unified_section_list);
110
111
struct XCOFF32 {
112
using SectionHeader = llvm::object::XCOFFSectionHeader32;
113
static constexpr bool Is64Bit = false;
114
};
115
struct XCOFF64 {
116
using SectionHeader = llvm::object::XCOFFSectionHeader64;
117
static constexpr bool Is64Bit = true;
118
};
119
120
std::unique_ptr<llvm::object::XCOFFObjectFile> m_binary;
121
};
122
123
#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILE_H
124
125