summaryrefslogtreecommitdiff
path: root/include/llvm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-04-03 03:57:03 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-04-03 03:57:03 +0000
commit46aa8c8dae6693b442201c334d10503568bfdd70 (patch)
tree85354f80ff4f739a3208368eb11de580c5bb46d1 /include/llvm
parent051c948bbe3f64a7c450120963b28a5959382cb8 (diff)
downloadllvm-46aa8c8dae6693b442201c334d10503568bfdd70.tar.gz
llvm-46aa8c8dae6693b442201c334d10503568bfdd70.tar.bz2
llvm-46aa8c8dae6693b442201c334d10503568bfdd70.tar.xz
Handle getting UnknownAddressOrSize or section_end().
These should probably be error conditions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205509 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r--include/llvm/Object/ObjectFile.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/llvm/Object/ObjectFile.h b/include/llvm/Object/ObjectFile.h
index fa21417027..8298b63420 100644
--- a/include/llvm/Object/ObjectFile.h
+++ b/include/llvm/Object/ObjectFile.h
@@ -354,12 +354,21 @@ inline error_code SymbolRef::getFileOffset(uint64_t &Result) const {
uint64_t Address;
if (error_code EC = getAddress(Address))
return EC;
+ if (Address == UnknownAddressOrSize) {
+ Result = UnknownAddressOrSize;
+ return object_error::success;
+ }
const ObjectFile *Obj = getObject();
section_iterator SecI(Obj->section_begin());
if (error_code EC = getSection(SecI))
return EC;
+ if (SecI == Obj->section_end()) {
+ Result = UnknownAddressOrSize;
+ return object_error::success;
+ }
+
uint64_t SectionAddress;
if (error_code EC = SecI->getAddress(SectionAddress))
return EC;