mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-21 11:38:35 +00:00
Use ErrorOr in getRelocationAdress.
We can probably do better in this method, but this is an improvement and enables further ErrorOr cleanups. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241114 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d231306ba8
commit
28a83187a2
@ -673,8 +673,7 @@ protected:
|
||||
relocation_iterator section_rel_end(DataRefImpl Sec) const override;
|
||||
|
||||
void moveRelocationNext(DataRefImpl &Rel) const override;
|
||||
std::error_code getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const override;
|
||||
ErrorOr<uint64_t> getRelocationAddress(DataRefImpl Rel) const override;
|
||||
uint64_t getRelocationOffset(DataRefImpl Rel) const override;
|
||||
symbol_iterator getRelocationSymbol(DataRefImpl Rel) const override;
|
||||
uint64_t getRelocationType(DataRefImpl Rel) const override;
|
||||
|
@ -227,8 +227,7 @@ protected:
|
||||
section_iterator getRelocatedSection(DataRefImpl Sec) const override;
|
||||
|
||||
void moveRelocationNext(DataRefImpl &Rel) const override;
|
||||
std::error_code getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const override;
|
||||
ErrorOr<uint64_t> getRelocationAddress(DataRefImpl Rel) const override;
|
||||
uint64_t getRelocationOffset(DataRefImpl Rel) const override;
|
||||
symbol_iterator getRelocationSymbol(DataRefImpl Rel) const override;
|
||||
uint64_t getRelocationType(DataRefImpl Rel) const override;
|
||||
@ -670,21 +669,17 @@ ELFObjectFile<ELFT>::getRelocationSymbol(DataRefImpl Rel) const {
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
std::error_code
|
||||
ELFObjectFile<ELFT>::getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Result) const {
|
||||
ErrorOr<uint64_t>
|
||||
ELFObjectFile<ELFT>::getRelocationAddress(DataRefImpl Rel) const {
|
||||
uint64_t ROffset = getROffset(Rel);
|
||||
const Elf_Ehdr *Header = EF.getHeader();
|
||||
|
||||
if (Header->e_type == ELF::ET_REL) {
|
||||
const Elf_Shdr *RelocationSec = getRelSection(Rel);
|
||||
const Elf_Shdr *RelocatedSec = EF.getSection(RelocationSec->sh_info);
|
||||
Result = ROffset + RelocatedSec->sh_addr;
|
||||
} else {
|
||||
Result = ROffset;
|
||||
return ROffset + RelocatedSec->sh_addr;
|
||||
}
|
||||
|
||||
return std::error_code();
|
||||
return ROffset;
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
|
@ -234,8 +234,7 @@ public:
|
||||
relocation_iterator section_rel_end(DataRefImpl Sec) const override;
|
||||
|
||||
void moveRelocationNext(DataRefImpl &Rel) const override;
|
||||
std::error_code getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const override;
|
||||
ErrorOr<uint64_t> getRelocationAddress(DataRefImpl Rel) const override;
|
||||
uint64_t getRelocationOffset(DataRefImpl Rel) const override;
|
||||
symbol_iterator getRelocationSymbol(DataRefImpl Rel) const override;
|
||||
section_iterator getRelocationSection(DataRefImpl Rel) const;
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
|
||||
void moveNext();
|
||||
|
||||
std::error_code getAddress(uint64_t &Result) const;
|
||||
ErrorOr<uint64_t> getAddress() const;
|
||||
uint64_t getOffset() const;
|
||||
symbol_iterator getSymbol() const;
|
||||
uint64_t getType() const;
|
||||
@ -230,8 +230,7 @@ protected:
|
||||
// Same as above for RelocationRef.
|
||||
friend class RelocationRef;
|
||||
virtual void moveRelocationNext(DataRefImpl &Rel) const = 0;
|
||||
virtual std::error_code getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const = 0;
|
||||
virtual ErrorOr<uint64_t> getRelocationAddress(DataRefImpl Rel) const = 0;
|
||||
virtual uint64_t getRelocationOffset(DataRefImpl Rel) const = 0;
|
||||
virtual symbol_iterator getRelocationSymbol(DataRefImpl Rel) const = 0;
|
||||
virtual uint64_t getRelocationType(DataRefImpl Rel) const = 0;
|
||||
@ -432,8 +431,8 @@ inline void RelocationRef::moveNext() {
|
||||
return OwningObject->moveRelocationNext(RelocationPimpl);
|
||||
}
|
||||
|
||||
inline std::error_code RelocationRef::getAddress(uint64_t &Result) const {
|
||||
return OwningObject->getRelocationAddress(RelocationPimpl, Result);
|
||||
inline ErrorOr<uint64_t> RelocationRef::getAddress() const {
|
||||
return OwningObject->getRelocationAddress(RelocationPimpl);
|
||||
}
|
||||
|
||||
inline uint64_t RelocationRef::getOffset() const {
|
||||
|
@ -97,9 +97,8 @@ void RuntimeDyldMachO::makeValueAddendPCRel(RelocationValueRef &Value,
|
||||
|
||||
bool IsPCRel = Obj.getAnyRelocationPCRel(RelInfo);
|
||||
if (IsPCRel) {
|
||||
uint64_t RelocAddr = 0;
|
||||
RI->getAddress(RelocAddr);
|
||||
Value.Offset += RelocAddr + OffsetToNextPC;
|
||||
ErrorOr<uint64_t> RelocAddr = RI->getAddress();
|
||||
Value.Offset += *RelocAddr + OffsetToNextPC;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -958,8 +958,7 @@ void COFFObjectFile::moveRelocationNext(DataRefImpl &Rel) const {
|
||||
reinterpret_cast<const coff_relocation*>(Rel.p) + 1);
|
||||
}
|
||||
|
||||
std::error_code COFFObjectFile::getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const {
|
||||
ErrorOr<uint64_t> COFFObjectFile::getRelocationAddress(DataRefImpl Rel) const {
|
||||
report_fatal_error("getRelocationAddress not implemented in COFFObjectFile");
|
||||
}
|
||||
|
||||
|
@ -595,15 +595,13 @@ void MachOObjectFile::moveRelocationNext(DataRefImpl &Rel) const {
|
||||
++Rel.d.b;
|
||||
}
|
||||
|
||||
std::error_code MachOObjectFile::getRelocationAddress(DataRefImpl Rel,
|
||||
uint64_t &Res) const {
|
||||
ErrorOr<uint64_t> MachOObjectFile::getRelocationAddress(DataRefImpl Rel) const {
|
||||
uint64_t Offset = getRelocationOffset(Rel);
|
||||
|
||||
DataRefImpl Sec;
|
||||
Sec.d.a = Rel.d.a;
|
||||
uint64_t SecAddress = getSectionAddress(Sec);
|
||||
Res = SecAddress + Offset;
|
||||
return std::error_code();
|
||||
return SecAddress + Offset;
|
||||
}
|
||||
|
||||
uint64_t MachOObjectFile::getRelocationOffset(DataRefImpl Rel) const {
|
||||
|
@ -192,10 +192,10 @@ uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI) {
|
||||
|
||||
// RelocationRef accessors
|
||||
uint64_t LLVMGetRelocationAddress(LLVMRelocationIteratorRef RI) {
|
||||
uint64_t ret;
|
||||
if (std::error_code ec = (*unwrap(RI))->getAddress(ret))
|
||||
report_fatal_error(ec.message());
|
||||
return ret;
|
||||
ErrorOr<uint64_t> Ret = (*unwrap(RI))->getAddress();
|
||||
if (std::error_code EC = Ret.getError())
|
||||
report_fatal_error(EC.message());
|
||||
return *Ret;
|
||||
}
|
||||
|
||||
uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI) {
|
||||
|
Loading…
Reference in New Issue
Block a user