mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-20 10:24:12 +00:00
Make it easier to use DwarfContext with MCJIT
Summary: This supersedes http://reviews.llvm.org/D4010, hopefully properly dealing with the JIT case and also adds an actual test case. DwarfContext was basically already usable for the JIT (and back when we were overwriting ELF files it actually worked out of the box by accident), but in order to resolve relocations correctly it needs to know the load address of the section. Rather than trying to get this out of the ObjectFile or requiring the user to create a new ObjectFile just to get some debug info, this adds the capability to pass in that info directly. As part of this I separated out part of the LoadedObjectInfo struct from RuntimeDyld, since it is now required at a higher layer. Reviewers: lhames, echristo Reviewed By: echristo Subscribers: vtjnash, friss, rafael, llvm-commits Differential Revision: http://reviews.llvm.org/D6961 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237961 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -32,6 +32,8 @@ class MachOObjectFile;
|
||||
|
||||
class SymbolRef;
|
||||
class symbol_iterator;
|
||||
class SectionRef;
|
||||
typedef content_iterator<SectionRef> section_iterator;
|
||||
|
||||
/// RelocationRef - This is a value type class that represents a single
|
||||
/// relocation in the list of relocations in the object file.
|
||||
@ -51,6 +53,7 @@ public:
|
||||
std::error_code getAddress(uint64_t &Result) const;
|
||||
std::error_code getOffset(uint64_t &Result) const;
|
||||
symbol_iterator getSymbol() const;
|
||||
section_iterator getSection() const;
|
||||
std::error_code getType(uint64_t &Result) const;
|
||||
|
||||
/// @brief Indicates whether this relocation should hidden when listing
|
||||
@ -76,8 +79,6 @@ typedef content_iterator<RelocationRef> relocation_iterator;
|
||||
|
||||
/// SectionRef - This is a value type class that represents a single section in
|
||||
/// the list of sections in the object file.
|
||||
class SectionRef;
|
||||
typedef content_iterator<SectionRef> section_iterator;
|
||||
class SectionRef {
|
||||
friend class SymbolRef;
|
||||
DataRefImpl SectionPimpl;
|
||||
@ -247,6 +248,7 @@ protected:
|
||||
virtual std::error_code getRelocationOffset(DataRefImpl Rel,
|
||||
uint64_t &Res) const = 0;
|
||||
virtual symbol_iterator getRelocationSymbol(DataRefImpl Rel) const = 0;
|
||||
virtual section_iterator getRelocationSection(DataRefImpl Rel) const = 0;
|
||||
virtual std::error_code getRelocationType(DataRefImpl Rel,
|
||||
uint64_t &Res) const = 0;
|
||||
virtual std::error_code
|
||||
@ -467,6 +469,10 @@ inline symbol_iterator RelocationRef::getSymbol() const {
|
||||
return OwningObject->getRelocationSymbol(RelocationPimpl);
|
||||
}
|
||||
|
||||
inline section_iterator RelocationRef::getSection() const {
|
||||
return OwningObject->getRelocationSection(RelocationPimpl);
|
||||
}
|
||||
|
||||
inline std::error_code RelocationRef::getType(uint64_t &Result) const {
|
||||
return OwningObject->getRelocationType(RelocationPimpl, Result);
|
||||
}
|
||||
|
Reference in New Issue
Block a user