Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -263,6 +263,8 @@ } TypeList *SymbolFileDWARF::GetTypeList() { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile(); if (debug_map_symfile) return debug_map_symfile->GetTypeList(); @@ -272,6 +274,8 @@ void SymbolFileDWARF::GetTypes(const DWARFDIE &die, dw_offset_t min_die_offset, dw_offset_t max_die_offset, uint32_t type_mask, TypeSet &type_set) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); if (die) { const dw_offset_t die_offset = die.GetOffset(); @@ -435,6 +439,8 @@ } TypeSystem *SymbolFileDWARF::GetTypeSystemForLanguage(LanguageType language) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile(); TypeSystem *type_system; if (debug_map_symfile) { @@ -848,6 +854,8 @@ } uint32_t SymbolFileDWARF::GetNumCompileUnits() { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDebugInfo *info = DebugInfo(); if (info) return info->GetNumCompileUnits(); @@ -855,6 +863,8 @@ } CompUnitSP SymbolFileDWARF::ParseCompileUnitAtIndex(uint32_t cu_idx) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); CompUnitSP cu_sp; DWARFDebugInfo *info = DebugInfo(); if (info) { @@ -867,6 +877,8 @@ Function *SymbolFileDWARF::ParseCompileUnitFunction(const SymbolContext &sc, const DWARFDIE &die) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); if (die.IsValid()) { TypeSystem *type_system = GetTypeSystemForLanguage(die.GetCU()->GetLanguageType()); @@ -890,6 +902,8 @@ } lldb::LanguageType SymbolFileDWARF::ParseCompileUnitLanguage(const SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); assert(sc.comp_unit); DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit); if (dwarf_cu) @@ -921,6 +935,8 @@ bool SymbolFileDWARF::ParseCompileUnitSupportFiles( const SymbolContext &sc, FileSpecList &support_files) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); assert(sc.comp_unit); DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit); if (dwarf_cu) { @@ -946,6 +962,8 @@ bool SymbolFileDWARF::ParseCompileUnitIsOptimized( const lldb_private::SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit); if (dwarf_cu) return dwarf_cu->GetIsOptimized(); @@ -955,6 +973,8 @@ bool SymbolFileDWARF::ParseImportedModules( const lldb_private::SymbolContext &sc, std::vector &imported_modules) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); assert(sc.comp_unit); DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit); if (dwarf_cu) { @@ -1032,6 +1052,8 @@ } bool SymbolFileDWARF::ParseCompileUnitLineTable(const SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); assert(sc.comp_unit); if (sc.comp_unit->GetLineTable() != NULL) return true; @@ -1117,6 +1139,8 @@ } bool SymbolFileDWARF::ParseCompileUnitDebugMacros(const SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); assert(sc.comp_unit); DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit); @@ -1145,6 +1169,8 @@ const DWARFDIE &orig_die, addr_t subprogram_low_pc, uint32_t depth) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); size_t blocks_added = 0; DWARFDIE die = orig_die; while (die) { @@ -1284,6 +1310,8 @@ } void SymbolFileDWARF::ParseDeclsForContext(CompilerDeclContext decl_ctx) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); TypeSystem *type_system = decl_ctx.GetTypeSystem(); DWARFASTParser *ast_parser = type_system->GetDWARFParser(); std::vector decl_ctx_die_list = @@ -1303,6 +1331,8 @@ // references to other DWARF objects and we must be ready to receive a // "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF // instance. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); SymbolFileDWARFDebugMap *debug_map = GetDebugMapSymfile(); if (debug_map) return debug_map->GetSymbolFileByOSOIndex( @@ -1319,6 +1349,8 @@ // references to other DWARF objects and we must be ready to receive a // "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF // instance. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); SymbolFileDWARF *dwarf = GetDWARFForUID(uid); if (dwarf) return dwarf->GetDIE(DIERef(uid, dwarf)); @@ -1329,6 +1361,8 @@ // Anytime we have a lldb::user_id_t, we must get the DIE by calling // SymbolFileDWARF::GetDIEFromUID(). See comments inside the // SymbolFileDWARF::GetDIEFromUID() for details. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetDecl(); @@ -1340,6 +1374,8 @@ // Anytime we have a lldb::user_id_t, we must get the DIE by calling // SymbolFileDWARF::GetDIEFromUID(). See comments inside the // SymbolFileDWARF::GetDIEFromUID() for details. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetDeclContext(); @@ -1351,6 +1387,8 @@ // Anytime we have a lldb::user_id_t, we must get the DIE by calling // SymbolFileDWARF::GetDIEFromUID(). See comments inside the // SymbolFileDWARF::GetDIEFromUID() for details. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetContainingDeclContext(); @@ -1361,6 +1399,8 @@ // Anytime we have a lldb::user_id_t, we must get the DIE by calling // SymbolFileDWARF::GetDIEFromUID(). See comments inside the // SymbolFileDWARF::GetDIEFromUID() for details. + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDIE type_die = GetDIEFromUID(type_uid); if (type_die) return type_die.ResolveType(); @@ -1732,6 +1772,8 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const Address &so_addr, uint32_t resolve_scope, SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); Timer scoped_timer(func_cat, "SymbolFileDWARF::" @@ -1866,6 +1908,8 @@ bool check_inlines, uint32_t resolve_scope, SymbolContextList &sc_list) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); const uint32_t prev_size = sc_list.GetSize(); if (resolve_scope & eSymbolContextCompUnit) { DWARFDebugInfo *debug_info = DebugInfo(); @@ -2012,6 +2056,8 @@ uint32_t SymbolFileDWARF::FindGlobalVariables( const ConstString &name, const CompilerDeclContext *parent_decl_ctx, uint32_t max_matches, VariableList &variables) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); Log *log(LogChannelDWARF::GetLogIfAll(DWARF_LOG_LOOKUPS)); if (log) @@ -2116,6 +2162,8 @@ uint32_t SymbolFileDWARF::FindGlobalVariables(const RegularExpression ®ex, uint32_t max_matches, VariableList &variables) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); Log *log(LogChannelDWARF::GetLogIfAll(DWARF_LOG_LOOKUPS)); if (log) { @@ -2240,6 +2288,8 @@ const CompilerDeclContext *parent_decl_ctx, uint32_t name_type_mask, bool include_inlines, bool append, SymbolContextList &sc_list) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); Timer scoped_timer(func_cat, "SymbolFileDWARF::FindFunctions (name = '%s')", name.AsCString()); @@ -2307,6 +2357,8 @@ uint32_t SymbolFileDWARF::FindFunctions(const RegularExpression ®ex, bool include_inlines, bool append, SymbolContextList &sc_list) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); Timer scoped_timer(func_cat, "SymbolFileDWARF::FindFunctions (regex = '%s')", regex.GetText().str().c_str()); @@ -2353,6 +2405,8 @@ void SymbolFileDWARF::GetMangledNamesForFunction( const std::string &scope_qualified_name, std::vector &mangled_names) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); DWARFDebugInfo *info = DebugInfo(); uint32_t num_comp_units = 0; if (info) @@ -2387,6 +2441,8 @@ uint32_t max_matches, llvm::DenseSet &searched_symbol_files, TypeMap &types) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); // If we aren't appending the results to this list, then clear the list if (!append) types.Clear(); @@ -2487,6 +2543,8 @@ size_t SymbolFileDWARF::FindTypes(const std::vector &context, bool append, TypeMap &types) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); if (!append) types.Clear(); @@ -2534,6 +2592,8 @@ CompilerDeclContext SymbolFileDWARF::FindNamespace(const SymbolContext &sc, const ConstString &name, const CompilerDeclContext *parent_decl_ctx) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); Log *log(LogChannelDWARF::GetLogIfAll(DWARF_LOG_LOOKUPS)); if (log) { @@ -3043,6 +3103,8 @@ size_t SymbolFileDWARF::ParseTypes(const SymbolContext &sc, const DWARFDIE &orig_die, bool parse_siblings, bool parse_children) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); size_t types_added = 0; DWARFDIE die = orig_die; while (die) { @@ -3109,6 +3171,8 @@ } size_t SymbolFileDWARF::ParseVariablesForContext(const SymbolContext &sc) { + std::lock_guard guard( + GetObjectFile()->GetModule()->GetMutex()); if (sc.comp_unit != NULL) { DWARFDebugInfo *info = DebugInfo(); if (info == NULL)