[Lldb-commits] [lldb] bf8cbfa - [lldb] Move UpdateISAToDescriptorMap into ClassInfoExtractor (NFC)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 29 09:23:51 PDT 2021


Author: Jonas Devlieghere
Date: 2021-03-29T09:23:44-07:00
New Revision: bf8cbfa65fc5eb484013c43b26754b4612d5c6ee

URL: https://github.com/llvm/llvm-project/commit/bf8cbfa65fc5eb484013c43b26754b4612d5c6ee
DIFF: https://github.com/llvm/llvm-project/commit/bf8cbfa65fc5eb484013c43b26754b4612d5c6ee.diff

LOG: [lldb] Move UpdateISAToDescriptorMap into ClassInfoExtractor (NFC)

Move UpdateISAToDescriptorMap into ClassInfoExtractor so that all the
formerly public functions can be private and remain an implementation
detail of the extractor.

Differential revision: https://reviews.llvm.org/D99448

Added: 
    

Modified: 
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index 31ddf83ba988..523b8e99a8ea 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -1551,10 +1551,9 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::GetClassInfoUtilityFunction(
 }
 
 AppleObjCRuntimeV2::DescriptorMapUpdateResult
-AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
+AppleObjCRuntimeV2::DynamicClassInfoExtractor::UpdateISAToDescriptorMap(
     RemoteNXMapTable &hash_table) {
-  Process *process = GetProcess();
-
+  Process *process = m_runtime.GetProcess();
   if (process == nullptr)
     return DescriptorMapUpdateResult::Fail();
 
@@ -1583,22 +1582,20 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
   Status err;
 
   // Compute which helper we're going to use for this update.
-  const DynamicClassInfoExtractor::Helper helper =
-      m_dynamic_class_info_extractor.ComputeHelper();
+  const DynamicClassInfoExtractor::Helper helper = ComputeHelper();
 
   // Read the total number of classes from the hash table
   const uint32_t num_classes =
       helper == DynamicClassInfoExtractor::gdb_objc_realized_classes
           ? hash_table.GetCount()
-          : m_realized_class_generation_count;
+          : m_runtime.m_realized_class_generation_count;
   if (num_classes == 0) {
     LLDB_LOGF(log, "No dynamic classes found.");
     return DescriptorMapUpdateResult::Success(0);
   }
 
   UtilityFunction *get_class_info_code =
-      m_dynamic_class_info_extractor.GetClassInfoUtilityFunction(exe_ctx,
-                                                                 helper);
+      GetClassInfoUtilityFunction(exe_ctx, helper);
   if (!get_class_info_code) {
     // The callee will have already logged a useful error message.
     return DescriptorMapUpdateResult::Fail();
@@ -1629,7 +1626,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
     return DescriptorMapUpdateResult::Fail();
   }
 
-  std::lock_guard<std::mutex> guard(m_dynamic_class_info_extractor.GetMutex());
+  std::lock_guard<std::mutex> guard(m_mutex);
 
   // Fill in our function argument values
   arguments.GetValueAtIndex(0)->GetScalar() = hash_table.GetTableLoadAddress();
@@ -1649,8 +1646,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
 
   // Write our function arguments into the process so we can run our function
   if (get_class_info_function->WriteFunctionArguments(
-          exe_ctx, m_dynamic_class_info_extractor.GetClassInfoArgs(helper),
-          arguments, diagnostics)) {
+          exe_ctx, GetClassInfoArgs(helper), arguments, diagnostics)) {
     EvaluateExpressionOptions options;
     options.SetUnwindOnError(true);
     options.SetTryAllThreads(false);
@@ -1671,8 +1667,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
 
     // Run the function
     ExpressionResults results = get_class_info_function->ExecuteFunction(
-        exe_ctx, &m_dynamic_class_info_extractor.GetClassInfoArgs(helper),
-        options, diagnostics, return_value);
+        exe_ctx, &GetClassInfoArgs(helper), options, diagnostics, return_value);
 
     if (results == eExpressionCompleted) {
       // The result is the number of ClassInfo structures that were filled in
@@ -1687,7 +1682,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic(
           DataExtractor class_infos_data(buffer.GetBytes(),
                                          buffer.GetByteSize(),
                                          process->GetByteOrder(), addr_size);
-          ParseClassInfoArray(class_infos_data, num_class_infos);
+          m_runtime.ParseClassInfoArray(class_infos_data, num_class_infos);
         }
       }
       success = true;
@@ -1788,9 +1783,8 @@ bool AppleObjCRuntimeV2::HasSymbol(ConstString Name) {
 }
 
 AppleObjCRuntimeV2::DescriptorMapUpdateResult
-AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
-  Process *process = GetProcess();
-
+AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
+  Process *process = m_runtime.GetProcess();
   if (process == nullptr)
     return DescriptorMapUpdateResult::Fail();
 
@@ -1818,15 +1812,14 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
 
   uint32_t num_class_infos = 0;
 
-  const lldb::addr_t objc_opt_ptr = GetSharedCacheReadOnlyAddress();
+  const lldb::addr_t objc_opt_ptr = m_runtime.GetSharedCacheReadOnlyAddress();
 
   if (objc_opt_ptr == LLDB_INVALID_ADDRESS)
     return DescriptorMapUpdateResult::Fail();
 
   const uint32_t num_classes = 128 * 1024;
 
-  UtilityFunction *get_class_info_code =
-      m_shared_cache_class_info_extractor.GetClassInfoUtilityFunction(exe_ctx);
+  UtilityFunction *get_class_info_code = GetClassInfoUtilityFunction(exe_ctx);
   FunctionCaller *get_shared_cache_class_info_function =
       get_class_info_code->GetFunctionCaller();
 
@@ -1853,8 +1846,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
     return DescriptorMapUpdateResult::Fail();
   }
 
-  std::lock_guard<std::mutex> guard(
-      m_shared_cache_class_info_extractor.GetMutex());
+  std::lock_guard<std::mutex> guard(m_mutex);
 
   // Fill in our function argument values
   arguments.GetValueAtIndex(0)->GetScalar() = objc_opt_ptr;
@@ -1873,8 +1865,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
 
   // Write our function arguments into the process so we can run our function
   if (get_shared_cache_class_info_function->WriteFunctionArguments(
-          exe_ctx, m_shared_cache_class_info_extractor.GetClassInfoArgs(),
-          arguments, diagnostics)) {
+          exe_ctx, m_args, arguments, diagnostics)) {
     EvaluateExpressionOptions options;
     options.SetUnwindOnError(true);
     options.SetTryAllThreads(false);
@@ -1896,8 +1887,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
     // Run the function
     ExpressionResults results =
         get_shared_cache_class_info_function->ExecuteFunction(
-            exe_ctx, &m_shared_cache_class_info_extractor.GetClassInfoArgs(),
-            options, diagnostics, return_value);
+            exe_ctx, &m_args, options, diagnostics, return_value);
 
     if (results == eExpressionCompleted) {
       // The result is the number of ClassInfo structures that were filled in
@@ -1923,7 +1913,7 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() {
                                          buffer.GetByteSize(),
                                          process->GetByteOrder(), addr_size);
 
-          ParseClassInfoArray(class_infos_data, num_class_infos);
+          m_runtime.ParseClassInfoArray(class_infos_data, num_class_infos);
         }
       } else {
         success = true;
@@ -2007,7 +1997,7 @@ void AppleObjCRuntimeV2::UpdateISAToDescriptorMapIfNeeded() {
 
     // Grab the dynamically loaded Objective-C classes from memory.
     DescriptorMapUpdateResult dynamic_update_result =
-        UpdateISAToDescriptorMapDynamic(hash_table);
+        m_dynamic_class_info_extractor.UpdateISAToDescriptorMap(hash_table);
 
     // Now get the objc classes that are baked into the Objective-C runtime in
     // the shared cache, but only once per process as this data never changes
@@ -2023,7 +2013,7 @@ void AppleObjCRuntimeV2::UpdateISAToDescriptorMapIfNeeded() {
       const uint32_t num_classes_to_warn_at = 500;
 
       DescriptorMapUpdateResult shared_cache_update_result =
-          UpdateISAToDescriptorMapSharedCache();
+          m_shared_cache_class_info_extractor.UpdateISAToDescriptorMap();
 
       LLDB_LOGF(log,
                 "attempted to read objc class data - results: "

diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
index b0c1584dd369..9ed9a6f71b82 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
@@ -318,6 +318,10 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
     DynamicClassInfoExtractor(AppleObjCRuntimeV2 &runtime)
         : ClassInfoExtractor(runtime) {}
 
+    DescriptorMapUpdateResult
+    UpdateISAToDescriptorMap(RemoteNXMapTable &hash_table);
+
+  private:
     enum Helper { gdb_objc_realized_classes, objc_copyRealizedClassList };
 
     /// Compute which helper to use. Prefer objc_copyRealizedClassList if it's
@@ -329,7 +333,6 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
                                                  Helper helper);
     lldb::addr_t &GetClassInfoArgs(Helper helper);
 
-  private:
     std::unique_ptr<UtilityFunction>
     GetClassInfoUtilityFunctionImpl(ExecutionContext &exe_ctx, std::string code,
                                     std::string name);
@@ -356,17 +359,16 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
     SharedCacheClassInfoExtractor(AppleObjCRuntimeV2 &runtime)
         : ClassInfoExtractor(runtime) {}
 
-    UtilityFunction *GetClassInfoUtilityFunction(ExecutionContext &exe_ctx);
-    lldb::addr_t &GetClassInfoArgs() { return m_args; }
-    std::mutex &GetMutex() { return m_mutex; }
+    DescriptorMapUpdateResult UpdateISAToDescriptorMap();
 
   private:
+    UtilityFunction *GetClassInfoUtilityFunction(ExecutionContext &exe_ctx);
+
     std::unique_ptr<UtilityFunction>
     GetClassInfoUtilityFunctionImpl(ExecutionContext &exe_ctx);
 
     std::unique_ptr<UtilityFunction> m_utility_function;
     lldb::addr_t m_args = LLDB_INVALID_ADDRESS;
-    std::mutex m_mutex;
   };
 
   AppleObjCRuntimeV2(Process *process, const lldb::ModuleSP &objc_module_sp);
@@ -381,14 +383,9 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
   /// change when lazily named classes get realized.
   bool RealizedClassGenerationCountChanged();
 
-  DescriptorMapUpdateResult
-  UpdateISAToDescriptorMapDynamic(RemoteNXMapTable &hash_table);
-
   uint32_t ParseClassInfoArray(const lldb_private::DataExtractor &data,
                                uint32_t num_class_infos);
 
-  DescriptorMapUpdateResult UpdateISAToDescriptorMapSharedCache();
-
   enum class SharedCacheWarningReason {
     eExpressionExecutionFailure,
     eNotEnoughClassesRead


        


More information about the lldb-commits mailing list