summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2013-02-07 18:26:45 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2013-02-07 18:26:45 +0000
commitdef0c1f756562601829364e3fca4bd1f0407316e (patch)
treeeb1d5cf469e8b9ddfeaabedeb89d96fdc9a8523c
parent64dca86fb4312669086ea8d2df1a13da76b54258 (diff)
downloadllvm-def0c1f756562601829364e3fca4bd1f0407316e.tar.gz
llvm-def0c1f756562601829364e3fca4bd1f0407316e.tar.bz2
llvm-def0c1f756562601829364e3fca4bd1f0407316e.tar.xz
[Object][ELF] Fix crash on no dynamic section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174639 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Object/ELF.h8
-rw-r--r--test/Object/readobj.test2
2 files changed, 7 insertions, 3 deletions
diff --git a/include/llvm/Object/ELF.h b/include/llvm/Object/ELF.h
index a84461020e..4a5eebf026 100644
--- a/include/llvm/Object/ELF.h
+++ b/include/llvm/Object/ELF.h
@@ -513,6 +513,8 @@ public:
return Tmp;
}
+ const char *get() const { return Current; }
+
private:
const uint64_t EntitySize;
const char *Current;
@@ -2292,7 +2294,7 @@ library_iterator ELFObjectFile<ELFT>::begin_libraries_needed() const {
}
DataRefImpl DRI;
- DRI.p = reinterpret_cast<uintptr_t>(&*i);
+ DRI.p = reinterpret_cast<uintptr_t>(i.get());
return library_iterator(LibraryRef(DRI, this));
}
@@ -2312,7 +2314,7 @@ error_code ELFObjectFile<ELFT>::getLibraryNext(DataRefImpl Data,
;
DataRefImpl DRI;
- DRI.p = reinterpret_cast<uintptr_t>(&*i);
+ DRI.p = reinterpret_cast<uintptr_t>(i.get());
Result = LibraryRef(DRI, this);
return object_error::success;
}
@@ -2343,7 +2345,7 @@ template<class ELFT>
library_iterator ELFObjectFile<ELFT>::end_libraries_needed() const {
dyn_iterator e = end_dynamic_table();
DataRefImpl DRI;
- DRI.p = reinterpret_cast<uintptr_t>(&*e);
+ DRI.p = reinterpret_cast<uintptr_t>(e.get());
return library_iterator(LibraryRef(DRI, this));
}
diff --git a/test/Object/readobj.test b/test/Object/readobj.test
new file mode 100644
index 0000000000..e29f40492d
--- /dev/null
+++ b/test/Object/readobj.test
@@ -0,0 +1,2 @@
+// Don't crash while reading non-dynamic files.
+RUN: llvm-readobj %p/Inputs/trivial-object-test.elf-x86-64