diff options
| author | Stella Stamenova <stilis@microsoft.com> | 2018-11-30 17:29:54 +0000 |
|---|---|---|
| committer | Stella Stamenova <stilis@microsoft.com> | 2018-11-30 17:29:54 +0000 |
| commit | 9a3686b208dcde5a88cfdadb555f625964fe4bc1 (patch) | |
| tree | a8503109b9867ed5336f966ed645a440c299e2a4 /lldb | |
| parent | e47b3669002affb663f76e4a43453b56d3839ec7 (diff) | |
| download | bcm5719-llvm-9a3686b208dcde5a88cfdadb555f625964fe4bc1.tar.gz bcm5719-llvm-9a3686b208dcde5a88cfdadb555f625964fe4bc1.zip | |
Revert "[PDB] Support PDB-backed expressions evaluation"
This reverts commit dec87759523b2f22fcff3325bc2cd543e4cda0e7.
This commit caused the tests on Windows to run forever rather than complete.
Reverting until the commit can be fixed to not stall.
llvm-svn: 348009
Diffstat (limited to 'lldb')
12 files changed, 34 insertions, 135 deletions
diff --git a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest.cpp b/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest.cpp deleted file mode 100644 index 3785cd3c64c..00000000000 --- a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest.cpp +++ /dev/null @@ -1,20 +0,0 @@ -namespace N0 { -namespace N1 { - -char *buf0 = nullptr; -char buf1[] = {0, 1, 2, 3, 4, 5, 6, 7}; - -char sum(char *buf, int size) { - char result = 0; - for (int i = 0; i < size; i++) - result += buf[i]; - return result; -} - -} // namespace N1 -} // namespace N0 - -int main() { - char result = N0::N1::sum(N0::N1::buf1, sizeof(N0::N1::buf1)); - return 0; -} diff --git a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest0.script b/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest0.script deleted file mode 100644 index d31a2abb68a..00000000000 --- a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest0.script +++ /dev/null @@ -1,7 +0,0 @@ -breakpoint set --file ExpressionsTest.cpp --line 19 -run -print result -print N0::N1::sum(N0::N1::buf1, sizeof(N0::N1::buf1)) -print N1::sum(N1::buf1, sizeof(N1::buf1)) -print sum(buf1, sizeof(buf1)) -print sum(buf1, 1000000000) diff --git a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest1.script b/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest1.script deleted file mode 100644 index dac887faa5b..00000000000 --- a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest1.script +++ /dev/null @@ -1 +0,0 @@ -print sum(buf0, 1) diff --git a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest2.script b/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest2.script deleted file mode 100644 index b19240baf99..00000000000 --- a/lldb/lit/SymbolFile/PDB/Inputs/ExpressionsTest2.script +++ /dev/null @@ -1,2 +0,0 @@ -print sum(buf0, result - 28) -print sum(buf1 + 3, 3) diff --git a/lldb/lit/SymbolFile/PDB/expressions.test b/lldb/lit/SymbolFile/PDB/expressions.test deleted file mode 100644 index 76cb334e1ae..00000000000 --- a/lldb/lit/SymbolFile/PDB/expressions.test +++ /dev/null @@ -1,36 +0,0 @@ -REQUIRES: system-windows, msvc -RUN: %msvc_cl /Zi /GS- /c %S/Inputs/ExpressionsTest.cpp /Fo%t.obj -RUN: %msvc_link /debug:full /nodefaultlib /entry:main %t.obj /out:%t.exe -RUN: %lldb -b -s %S/Inputs/ExpressionsTest0.script -s %S/Inputs/ExpressionsTest1.script -s %S/Inputs/ExpressionsTest2.script -- %t.exe 2>&1 | FileCheck %s - -// Check the variable value through `print` -CHECK: (lldb) print result -CHECK: (char) $0 = '\x1c' - -// Call the function just like in the code -CHECK: (lldb) print N0::N1::sum(N0::N1::buf1, sizeof(N0::N1::buf1)) -CHECK: (char) $1 = '\x1c' - -// Try the relaxed namespaces search -CHECK: (lldb) print N1::sum(N1::buf1, sizeof(N1::buf1)) -CHECK: (char) $2 = '\x1c' - -// Try the relaxed variables and functions search -CHECK: (lldb) print sum(buf1, sizeof(buf1)) -CHECK: (char) $3 = '\x1c' - -// Make a crash during expression calculation -CHECK: (lldb) print sum(buf1, 1000000000) -CHECK: The process has been returned to the state before expression evaluation. - -// Make one more crash -CHECK: (lldb) print sum(buf0, 1) -CHECK: The process has been returned to the state before expression evaluation. - -// Check if the process state was restored succesfully -CHECK: (lldb) print sum(buf0, result - 28) -CHECK: (char) $4 = '\0' - -// Call the function with arbitrary parameters -CHECK: (lldb) print sum(buf1 + 3, 3) -CHECK: (char) $5 = '\f' diff --git a/lldb/source/Expression/IRExecutionUnit.cpp b/lldb/source/Expression/IRExecutionUnit.cpp index 68f9add1181..efa149737ee 100644 --- a/lldb/source/Expression/IRExecutionUnit.cpp +++ b/lldb/source/Expression/IRExecutionUnit.cpp @@ -1013,7 +1013,7 @@ IRExecutionUnit::MemoryManager::getSymbolAddress(const std::string &Name) { Name.c_str()); m_parent.ReportSymbolLookupError(name_cs); - return 0; + return 0xbad0bad0; } else { if (log) log->Printf("IRExecutionUnit::getSymbolAddress(Name=\"%s\") = %" PRIx64, diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp index e792165734f..78d03e27d8f 100644 --- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -817,12 +817,12 @@ lldb_private::Address ObjectFilePECOFF::GetEntryPointAddress() { return m_entry_point_address; SectionList *section_list = GetSectionList(); - addr_t file_addr = m_coff_header_opt.entry + m_coff_header_opt.image_base; + addr_t offset = m_coff_header_opt.entry; if (!section_list) - m_entry_point_address.SetOffset(file_addr); + m_entry_point_address.SetOffset(offset); else - m_entry_point_address.ResolveAddressUsingFileSections(file_addr, section_list); + m_entry_point_address.ResolveAddressUsingFileSections(offset, section_list); return m_entry_point_address; } diff --git a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp index a121f8d3afd..b6ba70289d9 100644 --- a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp @@ -957,9 +957,8 @@ ProcessWindows::OnDebugException(bool first_chance, } if (!first_chance) { - // Not any second chance exception is an application crash by definition. - // It may be an expression evaluation crash. - SetPrivateState(eStateStopped); + // Any second chance exception is an application crash by definition. + SetPrivateState(eStateCrashed); } ExceptionResult result = ExceptionResult::SendToApplication; diff --git a/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp index cd4f3f64b9b..b3f507128f8 100644 --- a/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp @@ -42,7 +42,7 @@ bool RegisterContextWindows::ReadAllRegisterValues( lldb::DataBufferSP &data_sp) { if (!CacheAllRegisterValues()) return false; - if (!data_sp || data_sp->GetByteSize() < sizeof(m_context)) { + if (data_sp->GetByteSize() < sizeof(m_context)) { data_sp.reset(new DataBufferHeap(sizeof(CONTEXT), 0)); } memcpy(data_sp->GetBytes(), &m_context, sizeof(m_context)); diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp index 2c7a1a045d5..145587ac5be 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp @@ -921,26 +921,6 @@ PDBASTParser::GetDeclForSymbol(const llvm::pdb::PDBSymbol &symbol) { decl_context, name.c_str(), type->GetForwardCompilerType(), storage, func->hasInlineAttribute()); - std::vector<clang::ParmVarDecl *> params; - if (std::unique_ptr<PDBSymbolTypeFunctionSig> sig = func->getSignature()) { - if (std::unique_ptr<ConcreteSymbolEnumerator<PDBSymbolTypeFunctionArg>> - arg_enum = sig->findAllChildren<PDBSymbolTypeFunctionArg>()) { - while (std::unique_ptr<PDBSymbolTypeFunctionArg> arg = - arg_enum->getNext()) { - Type *arg_type = symbol_file->ResolveTypeUID(arg->getTypeId()); - if (!arg_type) - continue; - - clang::ParmVarDecl *param = m_ast.CreateParameterDeclaration( - nullptr, arg_type->GetForwardCompilerType(), clang::SC_None); - if (param) - params.push_back(param); - } - } - } - if (params.size()) - m_ast.SetFunctionParameters(decl, params.data(), params.size()); - m_uid_to_decl[sym_id] = decl; return decl; @@ -1050,7 +1030,6 @@ clang::DeclContext *PDBASTParser::GetDeclContextContainingSymbol( curr_context); m_parent_to_namespaces[curr_context].insert(namespace_decl); - m_namespaces.insert(namespace_decl); curr_context = namespace_decl; } @@ -1086,23 +1065,18 @@ void PDBASTParser::ParseDeclsForDeclContext( clang::NamespaceDecl * PDBASTParser::FindNamespaceDecl(const clang::DeclContext *parent, llvm::StringRef name) { - NamespacesSet *set; - if (parent) { - auto pit = m_parent_to_namespaces.find(parent); - if (pit == m_parent_to_namespaces.end()) - return nullptr; + if (!parent) + parent = m_ast.GetTranslationUnitDecl(); - set = &pit->second; - } else { - set = &m_namespaces; - } - assert(set); + auto it = m_parent_to_namespaces.find(parent); + if (it == m_parent_to_namespaces.end()) + return nullptr; - for (clang::NamespaceDecl *namespace_decl : *set) + for (auto namespace_decl : it->second) if (namespace_decl->getName().equals(name)) return namespace_decl; - for (clang::NamespaceDecl *namespace_decl : *set) + for (auto namespace_decl : it->second) if (namespace_decl->isAnonymousNamespace()) return FindNamespaceDecl(namespace_decl, name); diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h index 02353870ab6..28de07fd8cd 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h @@ -69,8 +69,7 @@ private: typedef llvm::DenseMap<clang::CXXRecordDecl *, lldb::user_id_t> CXXRecordDeclToUidMap; typedef llvm::DenseMap<lldb::user_id_t, clang::Decl *> UidToDeclMap; - typedef std::set<clang::NamespaceDecl *> NamespacesSet; - typedef llvm::DenseMap<clang::DeclContext *, NamespacesSet> + typedef llvm::DenseMap<clang::DeclContext *, std::set<clang::NamespaceDecl *>> ParentToNamespacesMap; typedef llvm::DenseMap<clang::DeclContext *, lldb::user_id_t> DeclContextToUidMap; @@ -110,7 +109,6 @@ private: CXXRecordDeclToUidMap m_forward_decl_to_uid; UidToDeclMap m_uid_to_decl; ParentToNamespacesMap m_parent_to_namespaces; - NamespacesSet m_namespaces; DeclContextToUidMap m_decl_context_to_uid; }; diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp index bdb5436d50d..da878a9c0d1 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp @@ -286,10 +286,6 @@ lldb_private::Function *SymbolFilePDB::ParseCompileUnitFunctionForPDBFunc( const PDBSymbolFunc &pdb_func, const lldb_private::SymbolContext &sc) { lldbassert(sc.comp_unit && sc.module_sp.get()); - if (FunctionSP result = - sc.comp_unit->FindFunctionByUID(pdb_func.getSymIndexId())) - return result.get(); - auto file_vm_addr = pdb_func.getVirtualAddress(); if (file_vm_addr == LLDB_INVALID_ADDRESS || file_vm_addr == 0) return nullptr; @@ -1051,6 +1047,8 @@ uint32_t SymbolFilePDB::FindGlobalVariables( const lldb_private::ConstString &name, const lldb_private::CompilerDeclContext *parent_decl_ctx, uint32_t max_matches, lldb_private::VariableList &variables) { + if (!parent_decl_ctx) + parent_decl_ctx = m_tu_decl_ctx_up.get(); if (!DeclContextMatchesThisSymbolFile(parent_decl_ctx)) return 0; if (name.IsEmpty()) @@ -1080,8 +1078,9 @@ uint32_t SymbolFilePDB::FindGlobalVariables( if (sc.comp_unit == nullptr) continue; - if (parent_decl_ctx && GetDeclContextContainingUID( - result->getSymIndexId()) != *parent_decl_ctx) + auto actual_parent_decl_ctx = + GetDeclContextContainingUID(result->getSymIndexId()); + if (actual_parent_decl_ctx != *parent_decl_ctx) continue; ParseVariables(sc, *pdb_data, &variables); @@ -1270,28 +1269,20 @@ uint32_t SymbolFilePDB::FindFunctions( CacheFunctionNames(); std::set<uint32_t> resolved_ids; - auto ResolveFn = [this, &name, parent_decl_ctx, include_inlines, &sc_list, - &resolved_ids](UniqueCStringMap<uint32_t> &Names) { + auto ResolveFn = [include_inlines, &name, &sc_list, &resolved_ids, + this](UniqueCStringMap<uint32_t> &Names) { std::vector<uint32_t> ids; - if (!Names.GetValues(name, ids)) - return; - - for (uint32_t id : ids) { - if (resolved_ids.find(id) != resolved_ids.end()) - continue; - - if (parent_decl_ctx && - GetDeclContextContainingUID(id) != *parent_decl_ctx) - continue; - - if (ResolveFunction(id, include_inlines, sc_list)) - resolved_ids.insert(id); + if (Names.GetValues(name, ids)) { + for (auto id : ids) { + if (resolved_ids.find(id) == resolved_ids.end()) { + if (ResolveFunction(id, include_inlines, sc_list)) + resolved_ids.insert(id); + } + } } }; if (name_type_mask & eFunctionNameTypeFull) { ResolveFn(m_func_full_names); - ResolveFn(m_func_base_names); - ResolveFn(m_func_method_names); } if (name_type_mask & eFunctionNameTypeBase) { ResolveFn(m_func_base_names); @@ -1479,6 +1470,8 @@ void SymbolFilePDB::FindTypesByName( llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, uint32_t max_matches, lldb_private::TypeMap &types) { + if (!parent_decl_ctx) + parent_decl_ctx = m_tu_decl_ctx_up.get(); std::unique_ptr<IPDBEnumSymbols> results; if (name.empty()) return; @@ -1512,8 +1505,9 @@ void SymbolFilePDB::FindTypesByName( if (!ResolveTypeUID(result->getSymIndexId())) continue; - if (parent_decl_ctx && GetDeclContextContainingUID( - result->getSymIndexId()) != *parent_decl_ctx) + auto actual_parent_decl_ctx = + GetDeclContextContainingUID(result->getSymIndexId()); + if (actual_parent_decl_ctx != *parent_decl_ctx) continue; auto iter = m_types.find(result->getSymIndexId()); |

