diff options
Diffstat (limited to 'source/Symbol/SymbolFile.cpp')
| -rw-r--r-- | source/Symbol/SymbolFile.cpp | 29 | 
1 files changed, 24 insertions, 5 deletions
diff --git a/source/Symbol/SymbolFile.cpp b/source/Symbol/SymbolFile.cpp index 6b4da9c530096..6087374969fb7 100644 --- a/source/Symbol/SymbolFile.cpp +++ b/source/Symbol/SymbolFile.cpp @@ -19,12 +19,18 @@  #include "lldb/Utility/StreamString.h"  #include "lldb/lldb-private.h" +#include <future> +  using namespace lldb_private;  void SymbolFile::PreloadSymbols() {    // No-op for most implementations.  } +std::recursive_mutex &SymbolFile::GetModuleMutex() const { +  return GetObjectFile()->GetModule()->GetMutex(); +} +  SymbolFile *SymbolFile::FindPlugin(ObjectFile *obj_file) {    std::unique_ptr<SymbolFile> best_symfile_ap;    if (obj_file != nullptr) { @@ -91,7 +97,7 @@ TypeSystem *SymbolFile::GetTypeSystemForLanguage(lldb::LanguageType language) {  uint32_t SymbolFile::ResolveSymbolContext(const FileSpec &file_spec,                                            uint32_t line, bool check_inlines, -                                          uint32_t resolve_scope, +                                          lldb::SymbolContextItem resolve_scope,                                            SymbolContextList &sc_list) {    return 0;  } @@ -111,7 +117,7 @@ uint32_t SymbolFile::FindGlobalVariables(const RegularExpression ®ex,  uint32_t SymbolFile::FindFunctions(const ConstString &name,                                     const CompilerDeclContext *parent_decl_ctx, -                                   uint32_t name_type_mask, +                                   lldb::FunctionNameType name_type_mask,                                     bool include_inlines, bool append,                                     SymbolContextList &sc_list) {    if (!append) @@ -134,9 +140,8 @@ void SymbolFile::GetMangledNamesForFunction(  }  uint32_t SymbolFile::FindTypes( -    const SymbolContext &sc, const ConstString &name, -    const CompilerDeclContext *parent_decl_ctx, bool append, -    uint32_t max_matches, +    const ConstString &name, const CompilerDeclContext *parent_decl_ctx, +    bool append, uint32_t max_matches,      llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,      TypeMap &types) {    if (!append) @@ -150,3 +155,17 @@ size_t SymbolFile::FindTypes(const std::vector<CompilerContext> &context,      types.Clear();    return 0;  } + +void SymbolFile::AssertModuleLock() { +  // The code below is too expensive to leave enabled in release builds. It's +  // enabled in debug builds or when the correct macro is set. +#if defined(LLDB_CONFIGURATION_DEBUG) +  // We assert that we have to module lock by trying to acquire the lock from a +  // different thread. Note that we must abort if the result is true to +  // guarantee correctness. +  assert(std::async(std::launch::async, +                    [this] { return this->GetModuleMutex().try_lock(); }) +                 .get() == false && +         "Module is not locked"); +#endif +}  | 
