From: Aaron Smith Date: Tue, 20 Mar 2018 00:18:22 +0000 (+0000) Subject: [SymbolFilePDB] Simplify getting the source file path X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=487b0c6b66ce6f2fbd91fc268839bd06f1fdd89d;p=platform%2Fupstream%2Fllvm.git [SymbolFilePDB] Simplify getting the source file path Summary: Replace SymbolFilePDB::GetSourceFileNameForPDBCompiland() with PDBSymbolCompiland::getSourceFileFullPath(). Reviewers: zturner, rnk, lldb-commits Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D44456 llvm-svn: 327925 --- diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp index 314708e..cdd5fa1 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp @@ -614,59 +614,6 @@ SymbolFilePDB::ResolveSymbolContext(const lldb_private::Address &so_addr, return resolved_flags; } -std::string SymbolFilePDB::GetSourceFileNameForPDBCompiland( - const PDBSymbolCompiland *pdb_compiland) { - if (!pdb_compiland) - return std::string(); - - std::string source_file_name; - // `getSourceFileName` returns the basename of the original source file - // used to generate this compiland. It does not return the full path. - // Currently the only way to get that is to do a basename lookup to get the - // IPDBSourceFile, but this is ambiguous in the case of two source files - // with the same name contributing to the same compiland. This is an edge - // case that we ignore for now, although we need to a long-term solution. - std::string file_name = pdb_compiland->getSourceFileName(); - if (!file_name.empty()) { - auto one_src_file_up = - m_session_up->findOneSourceFile(pdb_compiland, file_name, - PDB_NameSearchFlags::NS_CaseInsensitive); - if (one_src_file_up) - source_file_name = one_src_file_up->getFileName(); - } - // For some reason, source file name could be empty, so we will walk through - // all source files of this compiland, and determine the right source file - // if any that is used to generate this compiland based on language - // indicated in compilanddetails language field. - if (!source_file_name.empty()) - return source_file_name; - - auto details_up = pdb_compiland->findOneChild(); - PDB_Lang pdb_lang = details_up ? details_up->getLanguage() : PDB_Lang::Cpp; - auto src_files_up = - m_session_up->getSourceFilesForCompiland(*pdb_compiland); - if (src_files_up) { - while (auto file_up = src_files_up->getNext()) { - FileSpec file_spec(file_up->getFileName(), false, - FileSpec::ePathSyntaxWindows); - auto file_extension = file_spec.GetFileNameExtension(); - if (pdb_lang == PDB_Lang::Cpp || pdb_lang == PDB_Lang::C) { - static const char* exts[] = { "cpp", "c", "cc", "cxx" }; - if (llvm::is_contained(exts, file_extension.GetStringRef().lower())) { - source_file_name = file_up->getFileName(); - break; - } - } else if (pdb_lang == PDB_Lang::Masm && - ConstString::Compare(file_extension, ConstString("ASM"), - false) == 0) { - source_file_name = file_up->getFileName(); - break; - } - } - } - return source_file_name; -} - uint32_t SymbolFilePDB::ResolveSymbolContext( const lldb_private::FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, lldb_private::SymbolContextList &sc_list) { @@ -690,15 +637,7 @@ uint32_t SymbolFilePDB::ResolveSymbolContext( // For inline functions, we don't have to match the FileSpec since they // could be defined in headers other than file specified in FileSpec. if (!check_inlines) { - // `getSourceFileName` returns the basename of the original source file - // used to generate this compiland. It does not return the full path. - // Currently the only way to get that is to do a basename lookup to get - // the IPDBSourceFile, but this is ambiguous in the case of two source - // files with the same name contributing to the same compiland. This is - // a moderately extreme edge case, so we consider this OK for now, - // although we need to find a long-term solution. - std::string source_file = - GetSourceFileNameForPDBCompiland(compiland.get()); + std::string source_file = compiland->getSourceFileFullPath(); if (source_file.empty()) continue; FileSpec this_spec(source_file, false, FileSpec::ePathSyntaxWindows); @@ -1284,7 +1223,7 @@ SymbolFilePDB::ParseCompileUnitForUID(uint32_t id, uint32_t index) { if (lang == lldb::LanguageType::eLanguageTypeUnknown) return CompUnitSP(); - std::string path = GetSourceFileNameForPDBCompiland(compiland_up.get()); + std::string path = compiland_up->getSourceFileFullPath(); if (path.empty()) return CompUnitSP(); diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h index f688d2a..953200d 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h @@ -198,9 +198,6 @@ private: void GetCompileUnitIndex(const llvm::pdb::PDBSymbolCompiland &pdb_compiland, uint32_t &index); - std::string GetSourceFileNameForPDBCompiland( - const llvm::pdb::PDBSymbolCompiland *pdb_compiland); - std::unique_ptr GetPDBCompilandByUID(uint32_t uid);