diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2015-11-04 00:30:26 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2015-11-04 00:30:26 +0000 |
commit | 5365a01dc7af87a9bbf78f484bbbc969056faea3 (patch) | |
tree | 32b332dfcfb94561242804d98cca66a870a5a050 /llvm/lib/DebugInfo/Symbolize/Symbolize.cpp | |
parent | 884adda0fb83dc15ec4baefcc85decbff26ca3fd (diff) | |
download | llvm-5365a01dc7af87a9bbf78f484bbbc969056faea3.zip llvm-5365a01dc7af87a9bbf78f484bbbc969056faea3.tar.gz llvm-5365a01dc7af87a9bbf78f484bbbc969056faea3.tar.bz2 |
[LLVMSymbolize] Reduce indentation by using helper function. NFC.
llvm-svn: 252022
Diffstat (limited to 'llvm/lib/DebugInfo/Symbolize/Symbolize.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/Symbolize/Symbolize.cpp | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp index b0e17cf..ba7d39c 100644 --- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -244,6 +244,28 @@ ObjectFile *LLVMSymbolizer::lookUpDsymFile(const std::string &ExePath, return nullptr; } +ObjectFile *LLVMSymbolizer::lookUpDebuglinkObject(const std::string &Path, + const ObjectFile *Obj, + const std::string &ArchName) { + std::string DebuglinkName; + uint32_t CRCHash; + std::string DebugBinaryPath; + if (!getGNUDebuglinkContents(Obj, DebuglinkName, CRCHash)) + return nullptr; + if (!findDebugBinary(Path, DebuglinkName, CRCHash, DebugBinaryPath)) + return nullptr; + ErrorOr<OwningBinary<Binary>> DebugBinaryOrErr = + createBinary(DebugBinaryPath); + if (!DebugBinaryOrErr) + return nullptr; + OwningBinary<Binary> &DB = DebugBinaryOrErr.get(); + auto DbgObjOrErr = getObjectFileFromBinary(DB.getBinary(), ArchName); + if (!DbgObjOrErr) + return nullptr; + addOwningBinary(std::move(DB)); + return DbgObjOrErr.get(); +} + ErrorOr<LLVMSymbolizer::ObjectPair> LLVMSymbolizer::getOrCreateObjects(const std::string &Path, const std::string &ArchName) { @@ -273,27 +295,8 @@ LLVMSymbolizer::getOrCreateObjects(const std::string &Path, if (auto MachObj = dyn_cast<const MachOObjectFile>(Obj)) DbgObj = lookUpDsymFile(Path, MachObj, ArchName); - // Try to locate the debug binary using .gnu_debuglink section. - if (!DbgObj) { - std::string DebuglinkName; - uint32_t CRCHash; - std::string DebugBinaryPath; - if (getGNUDebuglinkContents(Obj, DebuglinkName, CRCHash) && - findDebugBinary(Path, DebuglinkName, CRCHash, DebugBinaryPath)) { - ErrorOr<OwningBinary<Binary>> DebugBinaryOrErr = - createBinary(DebugBinaryPath); - if (DebugBinaryOrErr) { - OwningBinary<Binary> &DB = DebugBinaryOrErr.get(); - auto DbgObjOrErr = getObjectFileFromBinary(DB.getBinary(), ArchName); - if (DbgObjOrErr) { - DbgObj = DbgObjOrErr.get(); - assert(DbgObj != nullptr); - addOwningBinary(std::move(DB)); - } - } - } - } - + if (!DbgObj) + DbgObj = lookUpDebuglinkObject(Path, Obj, ArchName); if (!DbgObj) DbgObj = Obj; ObjectPair Res = std::make_pair(Obj, DbgObj); |