mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 22:30:13 +00:00
[Object] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
llvm-svn: 300779
This commit is contained in:
parent
c5d3d49034
commit
d341c93268
@ -14,15 +14,20 @@
|
||||
#ifndef LLVM_OBJECT_ARCHIVE_H
|
||||
#define LLVM_OBJECT_ARCHIVE_H
|
||||
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Support/Chrono.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace llvm {
|
||||
namespace object {
|
||||
@ -32,25 +37,28 @@ class Archive;
|
||||
class ArchiveMemberHeader {
|
||||
public:
|
||||
friend class Archive;
|
||||
|
||||
ArchiveMemberHeader(Archive const *Parent, const char *RawHeaderPtr,
|
||||
uint64_t Size, Error *Err);
|
||||
// ArchiveMemberHeader() = default;
|
||||
|
||||
/// Get the name without looking up long names.
|
||||
Expected<llvm::StringRef> getRawName() const;
|
||||
Expected<StringRef> getRawName() const;
|
||||
|
||||
/// Get the name looking up long names.
|
||||
Expected<llvm::StringRef> getName(uint64_t Size) const;
|
||||
Expected<StringRef> getName(uint64_t Size) const;
|
||||
|
||||
/// Members are not larger than 4GB.
|
||||
Expected<uint32_t> getSize() const;
|
||||
|
||||
Expected<sys::fs::perms> getAccessMode() const;
|
||||
Expected<sys::TimePoint<std::chrono::seconds>> getLastModified() const;
|
||||
llvm::StringRef getRawLastModified() const {
|
||||
|
||||
StringRef getRawLastModified() const {
|
||||
return StringRef(ArMemHdr->LastModified,
|
||||
sizeof(ArMemHdr->LastModified)).rtrim(' ');
|
||||
}
|
||||
|
||||
Expected<unsigned> getUID() const;
|
||||
Expected<unsigned> getGID() const;
|
||||
|
||||
@ -75,11 +83,13 @@ private:
|
||||
|
||||
class Archive : public Binary {
|
||||
virtual void anchor();
|
||||
|
||||
public:
|
||||
class Child {
|
||||
friend Archive;
|
||||
const Archive *Parent;
|
||||
friend ArchiveMemberHeader;
|
||||
|
||||
const Archive *Parent;
|
||||
ArchiveMemberHeader Header;
|
||||
/// \brief Includes header but not padding byte.
|
||||
StringRef Data;
|
||||
@ -103,17 +113,22 @@ public:
|
||||
Expected<StringRef> getName() const;
|
||||
Expected<std::string> getFullName() const;
|
||||
Expected<StringRef> getRawName() const { return Header.getRawName(); }
|
||||
|
||||
Expected<sys::TimePoint<std::chrono::seconds>> getLastModified() const {
|
||||
return Header.getLastModified();
|
||||
}
|
||||
|
||||
StringRef getRawLastModified() const {
|
||||
return Header.getRawLastModified();
|
||||
}
|
||||
|
||||
Expected<unsigned> getUID() const { return Header.getUID(); }
|
||||
Expected<unsigned> getGID() const { return Header.getGID(); }
|
||||
|
||||
Expected<sys::fs::perms> getAccessMode() const {
|
||||
return Header.getAccessMode();
|
||||
}
|
||||
|
||||
/// \return the size of the archive member without the header or padding.
|
||||
Expected<uint64_t> getSize() const;
|
||||
/// \return the size in the archive header for this member.
|
||||
@ -130,11 +145,12 @@ public:
|
||||
|
||||
class child_iterator {
|
||||
Child C;
|
||||
Error *E;
|
||||
Error *E = nullptr;
|
||||
|
||||
public:
|
||||
child_iterator() : C(Child(nullptr, nullptr, nullptr)), E(nullptr) {}
|
||||
child_iterator() : C(Child(nullptr, nullptr, nullptr)) {}
|
||||
child_iterator(const Child &C, Error *E) : C(C), E(E) {}
|
||||
|
||||
const Child *operator->() const { return &C; }
|
||||
const Child &operator*() const { return C; }
|
||||
|
||||
@ -171,14 +187,15 @@ public:
|
||||
uint32_t StringIndex; // Extra index to the string.
|
||||
|
||||
public:
|
||||
bool operator ==(const Symbol &other) const {
|
||||
return (Parent == other.Parent) && (SymbolIndex == other.SymbolIndex);
|
||||
}
|
||||
|
||||
Symbol(const Archive *p, uint32_t symi, uint32_t stri)
|
||||
: Parent(p)
|
||||
, SymbolIndex(symi)
|
||||
, StringIndex(stri) {}
|
||||
|
||||
bool operator ==(const Symbol &other) const {
|
||||
return (Parent == other.Parent) && (SymbolIndex == other.SymbolIndex);
|
||||
}
|
||||
|
||||
StringRef getName() const;
|
||||
Expected<Child> getMember() const;
|
||||
Symbol getNext() const;
|
||||
@ -186,8 +203,10 @@ public:
|
||||
|
||||
class symbol_iterator {
|
||||
Symbol symbol;
|
||||
|
||||
public:
|
||||
symbol_iterator(const Symbol &s) : symbol(s) {}
|
||||
|
||||
const Symbol *operator->() const { return &symbol; }
|
||||
const Symbol &operator*() const { return symbol; }
|
||||
|
||||
@ -264,7 +283,7 @@ private:
|
||||
mutable std::vector<std::unique_ptr<MemoryBuffer>> ThinBuffers;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
} // end namespace object
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
||||
#endif // LLVM_OBJECT_ARCHIVE_H
|
||||
|
@ -15,10 +15,11 @@
|
||||
#define LLVM_OBJECT_BINARY_H
|
||||
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -29,9 +30,6 @@ namespace object {
|
||||
|
||||
class Binary {
|
||||
private:
|
||||
Binary() = delete;
|
||||
Binary(const Binary &other) = delete;
|
||||
|
||||
unsigned int TypeID;
|
||||
|
||||
protected:
|
||||
@ -80,6 +78,8 @@ protected:
|
||||
}
|
||||
|
||||
public:
|
||||
Binary() = delete;
|
||||
Binary(const Binary &other) = delete;
|
||||
virtual ~Binary();
|
||||
|
||||
StringRef getData() const;
|
||||
@ -173,7 +173,7 @@ OwningBinary<T>::OwningBinary(std::unique_ptr<T> Bin,
|
||||
std::unique_ptr<MemoryBuffer> Buf)
|
||||
: Bin(std::move(Bin)), Buf(std::move(Buf)) {}
|
||||
|
||||
template <typename T> OwningBinary<T>::OwningBinary() {}
|
||||
template <typename T> OwningBinary<T>::OwningBinary() = default;
|
||||
|
||||
template <typename T>
|
||||
OwningBinary<T>::OwningBinary(OwningBinary &&Other)
|
||||
@ -201,7 +201,9 @@ template <typename T> const T* OwningBinary<T>::getBinary() const {
|
||||
}
|
||||
|
||||
Expected<OwningBinary<Binary>> createBinary(StringRef Path);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
} // end namespace object
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#endif // LLVM_OBJECT_BINARY_H
|
||||
|
@ -14,28 +14,39 @@
|
||||
#ifndef LLVM_OBJECT_COFF_H
|
||||
#define LLVM_OBJECT_COFF_H
|
||||
|
||||
#include "llvm/ADT/PointerUnion.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/DebugInfo/CodeView/CVDebugRecord.h"
|
||||
#include "llvm/MC/SubtargetFeature.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Support/COFF.h"
|
||||
#include "llvm/Support/Endian.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <system_error>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
template <typename T> class ArrayRef;
|
||||
|
||||
namespace object {
|
||||
class ImportDirectoryEntryRef;
|
||||
|
||||
class BaseRelocRef;
|
||||
class DelayImportDirectoryEntryRef;
|
||||
class ExportDirectoryEntryRef;
|
||||
class ImportDirectoryEntryRef;
|
||||
class ImportedSymbolRef;
|
||||
class BaseRelocRef;
|
||||
typedef content_iterator<ImportDirectoryEntryRef> import_directory_iterator;
|
||||
typedef content_iterator<DelayImportDirectoryEntryRef>
|
||||
delay_import_directory_iterator;
|
||||
typedef content_iterator<ExportDirectoryEntryRef> export_directory_iterator;
|
||||
typedef content_iterator<ImportedSymbolRef> imported_symbol_iterator;
|
||||
typedef content_iterator<BaseRelocRef> base_reloc_iterator;
|
||||
|
||||
using import_directory_iterator = content_iterator<ImportDirectoryEntryRef>;
|
||||
using delay_import_directory_iterator =
|
||||
content_iterator<DelayImportDirectoryEntryRef>;
|
||||
using export_directory_iterator = content_iterator<ExportDirectoryEntryRef>;
|
||||
using imported_symbol_iterator = content_iterator<ImportedSymbolRef>;
|
||||
using base_reloc_iterator = content_iterator<BaseRelocRef>;
|
||||
|
||||
/// The DOS compatible header at the front of all PE/COFF executables.
|
||||
struct dos_header {
|
||||
@ -190,10 +201,10 @@ struct import_lookup_table_entry {
|
||||
}
|
||||
};
|
||||
|
||||
typedef import_lookup_table_entry<support::little32_t>
|
||||
import_lookup_table_entry32;
|
||||
typedef import_lookup_table_entry<support::little64_t>
|
||||
import_lookup_table_entry64;
|
||||
using import_lookup_table_entry32 =
|
||||
import_lookup_table_entry<support::little32_t>;
|
||||
using import_lookup_table_entry64 =
|
||||
import_lookup_table_entry<support::little64_t>;
|
||||
|
||||
struct delay_import_directory_table_entry {
|
||||
// dumpbin reports this field as "Characteristics" instead of "Attributes".
|
||||
@ -226,8 +237,8 @@ union export_address_table_entry {
|
||||
support::ulittle32_t ForwarderRVA;
|
||||
};
|
||||
|
||||
typedef support::ulittle32_t export_name_pointer_table_entry;
|
||||
typedef support::ulittle16_t export_ordinal_table_entry;
|
||||
using export_name_pointer_table_entry = support::ulittle32_t;
|
||||
using export_ordinal_table_entry = support::ulittle16_t;
|
||||
|
||||
struct StringTableOffset {
|
||||
support::ulittle32_t Zeroes;
|
||||
@ -250,8 +261,8 @@ struct coff_symbol {
|
||||
uint8_t NumberOfAuxSymbols;
|
||||
};
|
||||
|
||||
typedef coff_symbol<support::ulittle16_t> coff_symbol16;
|
||||
typedef coff_symbol<support::ulittle32_t> coff_symbol32;
|
||||
using coff_symbol16 = coff_symbol<support::ulittle16_t>;
|
||||
using coff_symbol32 = coff_symbol<support::ulittle32_t>;
|
||||
|
||||
// Contains only common parts of coff_symbol16 and coff_symbol32.
|
||||
struct coff_symbol_generic {
|
||||
@ -264,9 +275,9 @@ struct coff_symbol_generic {
|
||||
|
||||
class COFFSymbolRef {
|
||||
public:
|
||||
COFFSymbolRef(const coff_symbol16 *CS) : CS16(CS), CS32(nullptr) {}
|
||||
COFFSymbolRef(const coff_symbol32 *CS) : CS16(nullptr), CS32(CS) {}
|
||||
COFFSymbolRef() : CS16(nullptr), CS32(nullptr) {}
|
||||
COFFSymbolRef() = default;
|
||||
COFFSymbolRef(const coff_symbol16 *CS) : CS16(CS) {}
|
||||
COFFSymbolRef(const coff_symbol32 *CS) : CS32(CS) {}
|
||||
|
||||
const void *getRawPtr() const {
|
||||
return CS16 ? static_cast<const void *>(CS16) : CS32;
|
||||
@ -396,8 +407,8 @@ public:
|
||||
private:
|
||||
bool isSet() const { return CS16 || CS32; }
|
||||
|
||||
const coff_symbol16 *CS16;
|
||||
const coff_symbol32 *CS32;
|
||||
const coff_symbol16 *CS16 = nullptr;
|
||||
const coff_symbol32 *CS32 = nullptr;
|
||||
};
|
||||
|
||||
struct coff_section {
|
||||
@ -418,6 +429,7 @@ struct coff_section {
|
||||
return (Characteristics & COFF::IMAGE_SCN_LNK_NRELOC_OVFL) &&
|
||||
NumberOfRelocations == UINT16_MAX;
|
||||
}
|
||||
|
||||
uint32_t getAlignment() const {
|
||||
// The IMAGE_SCN_TYPE_NO_PAD bit is a legacy way of getting to
|
||||
// IMAGE_SCN_ALIGN_1BYTES.
|
||||
@ -508,6 +520,7 @@ struct coff_import_header {
|
||||
support::ulittle32_t SizeOfData;
|
||||
support::ulittle16_t OrdinalHint;
|
||||
support::ulittle16_t TypeInfo;
|
||||
|
||||
int getType() const { return TypeInfo & 0x3; }
|
||||
int getNameType() const { return (TypeInfo >> 2) & 0x7; }
|
||||
};
|
||||
@ -518,6 +531,7 @@ struct coff_import_directory_table_entry {
|
||||
support::ulittle32_t ForwarderChain;
|
||||
support::ulittle32_t NameRVA;
|
||||
support::ulittle32_t ImportAddressTableRVA;
|
||||
|
||||
bool isNull() const {
|
||||
return ImportLookupTableRVA == 0 && TimeDateStamp == 0 &&
|
||||
ForwarderChain == 0 && NameRVA == 0 && ImportAddressTableRVA == 0;
|
||||
@ -532,6 +546,7 @@ struct coff_tls_directory {
|
||||
IntTy AddressOfCallBacks;
|
||||
support::ulittle32_t SizeOfZeroFill;
|
||||
support::ulittle32_t Characteristics;
|
||||
|
||||
uint32_t getAlignment() const {
|
||||
// Bit [20:24] contains section alignment.
|
||||
uint32_t Shift = (Characteristics & 0x00F00000) >> 20;
|
||||
@ -541,8 +556,8 @@ struct coff_tls_directory {
|
||||
}
|
||||
};
|
||||
|
||||
typedef coff_tls_directory<support::little32_t> coff_tls_directory32;
|
||||
typedef coff_tls_directory<support::little64_t> coff_tls_directory64;
|
||||
using coff_tls_directory32 = coff_tls_directory<support::little32_t>;
|
||||
using coff_tls_directory64 = coff_tls_directory<support::little64_t>;
|
||||
|
||||
struct coff_load_configuration32 {
|
||||
support::ulittle32_t Characteristics;
|
||||
@ -603,6 +618,7 @@ struct coff_base_reloc_block_header {
|
||||
|
||||
struct coff_base_reloc_block_entry {
|
||||
support::ulittle16_t Data;
|
||||
|
||||
int getType() const { return Data >> 12; }
|
||||
int getOffset() const { return Data & ((1 << 12) - 1); }
|
||||
};
|
||||
@ -652,6 +668,7 @@ public:
|
||||
return reinterpret_cast<uintptr_t>(SymbolTable32);
|
||||
return uintptr_t(0);
|
||||
}
|
||||
|
||||
uint16_t getMachine() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->Machine;
|
||||
@ -659,6 +676,7 @@ public:
|
||||
return COFFBigObjHeader->Machine;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint16_t getSizeOfOptionalHeader() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->isImportLibrary() ? 0
|
||||
@ -668,6 +686,7 @@ public:
|
||||
return 0;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint16_t getCharacteristics() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->isImportLibrary() ? 0 : COFFHeader->Characteristics;
|
||||
@ -677,6 +696,7 @@ public:
|
||||
return 0;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint32_t getTimeDateStamp() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->TimeDateStamp;
|
||||
@ -684,6 +704,7 @@ public:
|
||||
return COFFBigObjHeader->TimeDateStamp;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint32_t getNumberOfSections() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->isImportLibrary() ? 0 : COFFHeader->NumberOfSections;
|
||||
@ -691,6 +712,7 @@ public:
|
||||
return COFFBigObjHeader->NumberOfSections;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint32_t getPointerToSymbolTable() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->isImportLibrary() ? 0
|
||||
@ -699,6 +721,7 @@ public:
|
||||
return COFFBigObjHeader->PointerToSymbolTable;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint32_t getRawNumberOfSymbols() const {
|
||||
if (COFFHeader)
|
||||
return COFFHeader->isImportLibrary() ? 0 : COFFHeader->NumberOfSymbols;
|
||||
@ -706,11 +729,13 @@ public:
|
||||
return COFFBigObjHeader->NumberOfSymbols;
|
||||
llvm_unreachable("no COFF header!");
|
||||
}
|
||||
|
||||
uint32_t getNumberOfSymbols() const {
|
||||
if (!SymbolTable16 && !SymbolTable32)
|
||||
return 0;
|
||||
return getRawNumberOfSymbols();
|
||||
}
|
||||
|
||||
protected:
|
||||
void moveSymbolNext(DataRefImpl &Symb) const override;
|
||||
Expected<StringRef> getSymbolName(DataRefImpl Symb) const override;
|
||||
@ -746,6 +771,7 @@ protected:
|
||||
|
||||
public:
|
||||
COFFObjectFile(MemoryBufferRef Object, std::error_code &EC);
|
||||
|
||||
basic_symbol_iterator symbol_begin() const override;
|
||||
basic_symbol_iterator symbol_end() const override;
|
||||
section_iterator section_begin() const override;
|
||||
@ -797,6 +823,7 @@ public:
|
||||
std::error_code getDataDirectory(uint32_t index,
|
||||
const data_directory *&Res) const;
|
||||
std::error_code getSection(int32_t index, const coff_section *&Res) const;
|
||||
|
||||
template <typename coff_symbol_type>
|
||||
std::error_code getSymbol(uint32_t Index,
|
||||
const coff_symbol_type *&Res) const {
|
||||
@ -821,6 +848,7 @@ public:
|
||||
}
|
||||
return object_error::parse_failed;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::error_code getAuxSymbol(uint32_t index, const T *&Res) const {
|
||||
ErrorOr<COFFSymbolRef> s = getSymbol(index);
|
||||
@ -829,6 +857,7 @@ public:
|
||||
Res = reinterpret_cast<const T *>(s->getRawPtr());
|
||||
return std::error_code();
|
||||
}
|
||||
|
||||
std::error_code getSymbolName(COFFSymbolRef Symbol, StringRef &Res) const;
|
||||
std::error_code getSymbolName(const coff_symbol_generic *Symbol,
|
||||
StringRef &Res) const;
|
||||
@ -885,7 +914,7 @@ public:
|
||||
// The iterator for the import directory table.
|
||||
class ImportDirectoryEntryRef {
|
||||
public:
|
||||
ImportDirectoryEntryRef() : OwningObject(nullptr) {}
|
||||
ImportDirectoryEntryRef() = default;
|
||||
ImportDirectoryEntryRef(const coff_import_directory_table_entry *Table,
|
||||
uint32_t I, const COFFObjectFile *Owner)
|
||||
: ImportTable(Table), Index(I), OwningObject(Owner) {}
|
||||
@ -911,12 +940,12 @@ public:
|
||||
private:
|
||||
const coff_import_directory_table_entry *ImportTable;
|
||||
uint32_t Index;
|
||||
const COFFObjectFile *OwningObject;
|
||||
const COFFObjectFile *OwningObject = nullptr;
|
||||
};
|
||||
|
||||
class DelayImportDirectoryEntryRef {
|
||||
public:
|
||||
DelayImportDirectoryEntryRef() : OwningObject(nullptr) {}
|
||||
DelayImportDirectoryEntryRef() = default;
|
||||
DelayImportDirectoryEntryRef(const delay_import_directory_table_entry *T,
|
||||
uint32_t I, const COFFObjectFile *Owner)
|
||||
: Table(T), Index(I), OwningObject(Owner) {}
|
||||
@ -936,13 +965,13 @@ public:
|
||||
private:
|
||||
const delay_import_directory_table_entry *Table;
|
||||
uint32_t Index;
|
||||
const COFFObjectFile *OwningObject;
|
||||
const COFFObjectFile *OwningObject = nullptr;
|
||||
};
|
||||
|
||||
// The iterator for the export directory table entry.
|
||||
class ExportDirectoryEntryRef {
|
||||
public:
|
||||
ExportDirectoryEntryRef() : OwningObject(nullptr) {}
|
||||
ExportDirectoryEntryRef() = default;
|
||||
ExportDirectoryEntryRef(const export_directory_table_entry *Table, uint32_t I,
|
||||
const COFFObjectFile *Owner)
|
||||
: ExportTable(Table), Index(I), OwningObject(Owner) {}
|
||||
@ -962,12 +991,12 @@ public:
|
||||
private:
|
||||
const export_directory_table_entry *ExportTable;
|
||||
uint32_t Index;
|
||||
const COFFObjectFile *OwningObject;
|
||||
const COFFObjectFile *OwningObject = nullptr;
|
||||
};
|
||||
|
||||
class ImportedSymbolRef {
|
||||
public:
|
||||
ImportedSymbolRef() : OwningObject(nullptr) {}
|
||||
ImportedSymbolRef() = default;
|
||||
ImportedSymbolRef(const import_lookup_table_entry32 *Entry, uint32_t I,
|
||||
const COFFObjectFile *Owner)
|
||||
: Entry32(Entry), Entry64(nullptr), Index(I), OwningObject(Owner) {}
|
||||
@ -987,12 +1016,12 @@ private:
|
||||
const import_lookup_table_entry32 *Entry32;
|
||||
const import_lookup_table_entry64 *Entry64;
|
||||
uint32_t Index;
|
||||
const COFFObjectFile *OwningObject;
|
||||
const COFFObjectFile *OwningObject = nullptr;
|
||||
};
|
||||
|
||||
class BaseRelocRef {
|
||||
public:
|
||||
BaseRelocRef() : OwningObject(nullptr) {}
|
||||
BaseRelocRef() = default;
|
||||
BaseRelocRef(const coff_base_reloc_block_header *Header,
|
||||
const COFFObjectFile *Owner)
|
||||
: Header(Header), Index(0), OwningObject(Owner) {}
|
||||
@ -1006,7 +1035,7 @@ public:
|
||||
private:
|
||||
const coff_base_reloc_block_header *Header;
|
||||
uint32_t Index;
|
||||
const COFFObjectFile *OwningObject;
|
||||
const COFFObjectFile *OwningObject = nullptr;
|
||||
};
|
||||
|
||||
// Corresponds to `_FPO_DATA` structure in the PE/COFF spec.
|
||||
@ -1034,6 +1063,7 @@ struct FpoData {
|
||||
};
|
||||
|
||||
} // end namespace object
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
||||
#endif // LLVM_OBJECT_COFF_H
|
||||
|
@ -14,39 +14,46 @@
|
||||
#ifndef LLVM_OBJECT_OBJECTFILE_H
|
||||
#define LLVM_OBJECT_OBJECTFILE_H
|
||||
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/MC/SubtargetFeature.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/SymbolicFile.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <cstring>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class ARMAttributeParser;
|
||||
|
||||
namespace object {
|
||||
|
||||
class ObjectFile;
|
||||
class COFFObjectFile;
|
||||
class MachOObjectFile;
|
||||
class WasmObjectFile;
|
||||
|
||||
class ObjectFile;
|
||||
class SectionRef;
|
||||
class SymbolRef;
|
||||
class symbol_iterator;
|
||||
class SectionRef;
|
||||
typedef content_iterator<SectionRef> section_iterator;
|
||||
class WasmObjectFile;
|
||||
|
||||
using section_iterator = content_iterator<SectionRef>;
|
||||
|
||||
/// This is a value type class that represents a single relocation in the list
|
||||
/// of relocations in the object file.
|
||||
class RelocationRef {
|
||||
DataRefImpl RelocationPimpl;
|
||||
const ObjectFile *OwningObject;
|
||||
const ObjectFile *OwningObject = nullptr;
|
||||
|
||||
public:
|
||||
RelocationRef() : OwningObject(nullptr) { }
|
||||
|
||||
RelocationRef() = default;
|
||||
RelocationRef(DataRefImpl RelocationP, const ObjectFile *Owner);
|
||||
|
||||
bool operator==(const RelocationRef &Other) const;
|
||||
@ -65,18 +72,19 @@ public:
|
||||
DataRefImpl getRawDataRefImpl() const;
|
||||
const ObjectFile *getObject() const;
|
||||
};
|
||||
typedef content_iterator<RelocationRef> relocation_iterator;
|
||||
|
||||
using relocation_iterator = content_iterator<RelocationRef>;
|
||||
|
||||
/// This is a value type class that represents a single section in the list of
|
||||
/// sections in the object file.
|
||||
class SectionRef {
|
||||
friend class SymbolRef;
|
||||
|
||||
DataRefImpl SectionPimpl;
|
||||
const ObjectFile *OwningObject;
|
||||
const ObjectFile *OwningObject = nullptr;
|
||||
|
||||
public:
|
||||
SectionRef() : OwningObject(nullptr) { }
|
||||
|
||||
SectionRef() = default;
|
||||
SectionRef(DataRefImpl SectionP, const ObjectFile *Owner);
|
||||
|
||||
bool operator==(const SectionRef &Other) const;
|
||||
@ -119,8 +127,6 @@ class SymbolRef : public BasicSymbolRef {
|
||||
friend class SectionRef;
|
||||
|
||||
public:
|
||||
SymbolRef() : BasicSymbolRef() {}
|
||||
|
||||
enum Type {
|
||||
ST_Unknown, // Type not specified
|
||||
ST_Data,
|
||||
@ -130,6 +136,7 @@ public:
|
||||
ST_Other
|
||||
};
|
||||
|
||||
SymbolRef() = default;
|
||||
SymbolRef(DataRefImpl SymbolP, const ObjectFile *Owner);
|
||||
SymbolRef(const BasicSymbolRef &B) : BasicSymbolRef(B) {
|
||||
assert(isa<ObjectFile>(BasicSymbolRef::getObject()));
|
||||
@ -179,8 +186,6 @@ public:
|
||||
/// to create.
|
||||
class ObjectFile : public SymbolicFile {
|
||||
virtual void anchor();
|
||||
ObjectFile() = delete;
|
||||
ObjectFile(const ObjectFile &other) = delete;
|
||||
|
||||
protected:
|
||||
ObjectFile(unsigned int Type, MemoryBufferRef Source);
|
||||
@ -198,6 +203,7 @@ protected:
|
||||
// Implementations assume that the DataRefImpl is valid and has not been
|
||||
// modified externally. It's UB otherwise.
|
||||
friend class SymbolRef;
|
||||
|
||||
virtual Expected<StringRef> getSymbolName(DataRefImpl Symb) const = 0;
|
||||
std::error_code printSymbolName(raw_ostream &OS,
|
||||
DataRefImpl Symb) const override;
|
||||
@ -211,6 +217,7 @@ protected:
|
||||
|
||||
// Same as above for SectionRef.
|
||||
friend class SectionRef;
|
||||
|
||||
virtual void moveSectionNext(DataRefImpl &Sec) const = 0;
|
||||
virtual std::error_code getSectionName(DataRefImpl Sec,
|
||||
StringRef &Res) const = 0;
|
||||
@ -242,12 +249,15 @@ protected:
|
||||
uint64_t getSymbolValue(DataRefImpl Symb) const;
|
||||
|
||||
public:
|
||||
ObjectFile() = delete;
|
||||
ObjectFile(const ObjectFile &other) = delete;
|
||||
|
||||
uint64_t getCommonSymbolSize(DataRefImpl Symb) const {
|
||||
assert(getSymbolFlags(Symb) & SymbolRef::SF_Common);
|
||||
return getCommonSymbolSizeImpl(Symb);
|
||||
}
|
||||
|
||||
typedef iterator_range<symbol_iterator> symbol_iterator_range;
|
||||
using symbol_iterator_range = iterator_range<symbol_iterator>;
|
||||
symbol_iterator_range symbols() const {
|
||||
return symbol_iterator_range(symbol_begin(), symbol_end());
|
||||
}
|
||||
@ -255,7 +265,7 @@ public:
|
||||
virtual section_iterator section_begin() const = 0;
|
||||
virtual section_iterator section_end() const = 0;
|
||||
|
||||
typedef iterator_range<section_iterator> section_iterator_range;
|
||||
using section_iterator_range = iterator_range<section_iterator>;
|
||||
section_iterator_range sections() const {
|
||||
return section_iterator_range(section_begin(), section_end());
|
||||
}
|
||||
@ -297,7 +307,6 @@ public:
|
||||
return createObjectFile(Object, sys::fs::file_magic::unknown);
|
||||
}
|
||||
|
||||
|
||||
static inline bool classof(const Binary *v) {
|
||||
return v->isObject();
|
||||
}
|
||||
@ -354,7 +363,6 @@ inline const ObjectFile *SymbolRef::getObject() const {
|
||||
return cast<ObjectFile>(O);
|
||||
}
|
||||
|
||||
|
||||
/// SectionRef
|
||||
inline SectionRef::SectionRef(DataRefImpl SectionP,
|
||||
const ObjectFile *Owner)
|
||||
@ -479,8 +487,8 @@ inline const ObjectFile *RelocationRef::getObject() const {
|
||||
return OwningObject;
|
||||
}
|
||||
|
||||
|
||||
} // end namespace object
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
||||
#endif // LLVM_OBJECT_OBJECTFILE_H
|
||||
|
@ -14,10 +14,19 @@
|
||||
#ifndef LLVM_OBJECT_SYMBOLICFILE_H
|
||||
#define LLVM_OBJECT_SYMBOLICFILE_H
|
||||
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <cinttypes>
|
||||
#include <utility>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <iterator>
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
|
||||
namespace llvm {
|
||||
namespace object {
|
||||
@ -29,6 +38,7 @@ union DataRefImpl {
|
||||
uint32_t a, b;
|
||||
} d;
|
||||
uintptr_t p;
|
||||
|
||||
DataRefImpl() { std::memset(this, 0, sizeof(DataRefImpl)); }
|
||||
};
|
||||
|
||||
@ -87,7 +97,7 @@ class SymbolicFile;
|
||||
/// symbols in the object file.
|
||||
class BasicSymbolRef {
|
||||
DataRefImpl SymbolPimpl;
|
||||
const SymbolicFile *OwningObject;
|
||||
const SymbolicFile *OwningObject = nullptr;
|
||||
|
||||
public:
|
||||
enum Flags : unsigned {
|
||||
@ -108,7 +118,7 @@ public:
|
||||
// (IR only)
|
||||
};
|
||||
|
||||
BasicSymbolRef() : OwningObject(nullptr) { }
|
||||
BasicSymbolRef() = default;
|
||||
BasicSymbolRef(DataRefImpl SymbolP, const SymbolicFile *Owner);
|
||||
|
||||
bool operator==(const BasicSymbolRef &Other) const;
|
||||
@ -125,12 +135,12 @@ public:
|
||||
const SymbolicFile *getObject() const;
|
||||
};
|
||||
|
||||
typedef content_iterator<BasicSymbolRef> basic_symbol_iterator;
|
||||
using basic_symbol_iterator = content_iterator<BasicSymbolRef>;
|
||||
|
||||
class SymbolicFile : public Binary {
|
||||
public:
|
||||
~SymbolicFile() override;
|
||||
SymbolicFile(unsigned int Type, MemoryBufferRef Source);
|
||||
~SymbolicFile() override;
|
||||
|
||||
// virtual interface.
|
||||
virtual void moveSymbolNext(DataRefImpl &Symb) const = 0;
|
||||
@ -145,7 +155,7 @@ public:
|
||||
virtual basic_symbol_iterator symbol_end() const = 0;
|
||||
|
||||
// convenience wrappers.
|
||||
typedef iterator_range<basic_symbol_iterator> basic_symbol_iterator_range;
|
||||
using basic_symbol_iterator_range = iterator_range<basic_symbol_iterator>;
|
||||
basic_symbol_iterator_range symbols() const {
|
||||
return basic_symbol_iterator_range(symbol_begin(), symbol_end());
|
||||
}
|
||||
@ -199,7 +209,7 @@ inline const SymbolicFile *BasicSymbolRef::getObject() const {
|
||||
return OwningObject;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} // end namespace object
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
||||
#endif // LLVM_OBJECT_SYMBOLICFILE_H
|
||||
|
@ -1,4 +1,4 @@
|
||||
//===- Archive.cpp - ar File Format implementation --------------*- C++ -*-===//
|
||||
//===- Archive.cpp - ar File Format implementation ------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -11,12 +11,29 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Support/Chrono.h"
|
||||
#include "llvm/Support/Endian.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace object;
|
||||
@ -61,7 +78,7 @@ ArchiveMemberHeader::ArchiveMemberHeader(const Archive *Parent,
|
||||
if (Err) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
OS.write_escaped(llvm::StringRef(ArMemHdr->Terminator,
|
||||
OS.write_escaped(StringRef(ArMemHdr->Terminator,
|
||||
sizeof(ArMemHdr->Terminator)));
|
||||
OS.flush();
|
||||
std::string Msg("terminator characters in archive member \"" + Buf +
|
||||
@ -97,13 +114,13 @@ Expected<StringRef> ArchiveMemberHeader::getRawName() const {
|
||||
EndCond = ' ';
|
||||
else
|
||||
EndCond = '/';
|
||||
llvm::StringRef::size_type end =
|
||||
llvm::StringRef(ArMemHdr->Name, sizeof(ArMemHdr->Name)).find(EndCond);
|
||||
if (end == llvm::StringRef::npos)
|
||||
StringRef::size_type end =
|
||||
StringRef(ArMemHdr->Name, sizeof(ArMemHdr->Name)).find(EndCond);
|
||||
if (end == StringRef::npos)
|
||||
end = sizeof(ArMemHdr->Name);
|
||||
assert(end <= sizeof(ArMemHdr->Name) && end > 0);
|
||||
// Don't include the EndCond if there is one.
|
||||
return llvm::StringRef(ArMemHdr->Name, end);
|
||||
return StringRef(ArMemHdr->Name, end);
|
||||
}
|
||||
|
||||
// This gets the name looking up long names. Size is the size of the archive
|
||||
@ -205,11 +222,11 @@ Expected<StringRef> ArchiveMemberHeader::getName(uint64_t Size) const {
|
||||
|
||||
Expected<uint32_t> ArchiveMemberHeader::getSize() const {
|
||||
uint32_t Ret;
|
||||
if (llvm::StringRef(ArMemHdr->Size,
|
||||
if (StringRef(ArMemHdr->Size,
|
||||
sizeof(ArMemHdr->Size)).rtrim(" ").getAsInteger(10, Ret)) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
OS.write_escaped(llvm::StringRef(ArMemHdr->Size,
|
||||
OS.write_escaped(StringRef(ArMemHdr->Size,
|
||||
sizeof(ArMemHdr->Size)).rtrim(" "));
|
||||
OS.flush();
|
||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
||||
@ -227,7 +244,7 @@ Expected<sys::fs::perms> ArchiveMemberHeader::getAccessMode() const {
|
||||
sizeof(ArMemHdr->AccessMode)).rtrim(' ').getAsInteger(8, Ret)) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
OS.write_escaped(llvm::StringRef(ArMemHdr->AccessMode,
|
||||
OS.write_escaped(StringRef(ArMemHdr->AccessMode,
|
||||
sizeof(ArMemHdr->AccessMode)).rtrim(" "));
|
||||
OS.flush();
|
||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
||||
@ -247,7 +264,7 @@ ArchiveMemberHeader::getLastModified() const {
|
||||
.getAsInteger(10, Seconds)) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
OS.write_escaped(llvm::StringRef(ArMemHdr->LastModified,
|
||||
OS.write_escaped(StringRef(ArMemHdr->LastModified,
|
||||
sizeof(ArMemHdr->LastModified)).rtrim(" "));
|
||||
OS.flush();
|
||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
||||
|
@ -1,4 +1,4 @@
|
||||
//===- Binary.cpp - A generic binary file -----------------------*- C++ -*-===//
|
||||
//===- Binary.cpp - A generic binary file ---------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -11,21 +11,25 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
|
||||
// Include headers for createBinary.
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/MachOUniversal.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace object;
|
||||
|
||||
Binary::~Binary() {}
|
||||
Binary::~Binary() = default;
|
||||
|
||||
Binary::Binary(unsigned int Type, MemoryBufferRef Source)
|
||||
: TypeID(Type), Data(Source) {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
//===- COFFObjectFile.cpp - COFF object file implementation -----*- C++ -*-===//
|
||||
//===- COFFObjectFile.cpp - COFF object file implementation ---------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -11,16 +11,28 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Object/COFF.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/COFF.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Support/COFF.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <cctype>
|
||||
#include "llvm/Support/Endian.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace object;
|
||||
|
@ -1,4 +1,4 @@
|
||||
//===- ObjectFile.cpp - File format independent object file -----*- C++ -*-===//
|
||||
//===- ObjectFile.cpp - File format independent object file ---------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -11,14 +11,22 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/COFF.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/MachO.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Object/Wasm.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
|
@ -1,4 +1,4 @@
|
||||
//===- SymbolicFile.cpp - Interface that only provides symbols --*- C++ -*-===//
|
||||
//===- SymbolicFile.cpp - Interface that only provides symbols ------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -11,12 +11,20 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Object/COFF.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Object/COFFImportFile.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/IRObjectFile.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Object/SymbolicFile.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace object;
|
||||
@ -24,7 +32,7 @@ using namespace object;
|
||||
SymbolicFile::SymbolicFile(unsigned int Type, MemoryBufferRef Source)
|
||||
: Binary(Type, Source) {}
|
||||
|
||||
SymbolicFile::~SymbolicFile() {}
|
||||
SymbolicFile::~SymbolicFile() = default;
|
||||
|
||||
Expected<std::unique_ptr<SymbolicFile>> SymbolicFile::createSymbolicFile(
|
||||
MemoryBufferRef Object, sys::fs::file_magic Type, LLVMContext *Context) {
|
||||
|
Loading…
Reference in New Issue
Block a user