diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-06-23 02:20:37 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-06-23 02:20:37 +0000 |
commit | a4a4093ed86ac780b2fc3b4803e379f8d6ef207c (patch) | |
tree | 6dd89ba17ad9f30a51230a57d814fec37d7120c6 /llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp | |
parent | b109c032bd44068e1fd8275117513bba172a9886 (diff) | |
download | bcm5719-llvm-a4a4093ed86ac780b2fc3b4803e379f8d6ef207c.tar.gz bcm5719-llvm-a4a4093ed86ac780b2fc3b4803e379f8d6ef207c.zip |
Compute correct symbol sizes for MachO and COFF.
Before this would dump from the symbol start to the end of the section.
llvm-svn: 240367
Diffstat (limited to 'llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp')
-rw-r--r-- | llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp index ef42211cf89..bd9cf7d5df2 100644 --- a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp +++ b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp @@ -16,6 +16,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/SymbolSize.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Endian.h" #include "llvm/Support/FileSystem.h" @@ -187,7 +188,14 @@ static void dumpCXXData(const ObjectFile *Obj) { uint8_t BytesInAddress = Obj->getBytesInAddress(); - for (const object::SymbolRef &Sym : Obj->symbols()) { + ErrorOr<std::vector<std::pair<SymbolRef, uint64_t>>> SymAddrOrErr = + object::computeSymbolSizes(*Obj); + if (error(SymAddrOrErr.getError())) + return; + + for (auto &P : *SymAddrOrErr) { + object::SymbolRef Sym = P.first; + uint64_t SymSize = P.second; StringRef SymName; if (error(Sym.getName(SymName))) return; @@ -207,7 +215,6 @@ static void dumpCXXData(const ObjectFile *Obj) { uint64_t SymAddress; if (error(Sym.getAddress(SymAddress))) return; - uint64_t SymSize = Sym.getSize(); uint64_t SecAddress = Sec.getAddress(); uint64_t SecSize = Sec.getSize(); uint64_t SymOffset = SymAddress - SecAddress; |