[Lldb-commits] [lldb] cd938bf - [lldb] Introduce Language::AreEquivalentFunctions (#112720)

via lldb-commits lldb-commits at lists.llvm.org
Sat Oct 19 16:53:32 PDT 2024


Author: Felipe de Azevedo Piovezan
Date: 2024-10-19T16:53:29-07:00
New Revision: cd938bf3279b6d2f1c0a8c82b6371a384d744378

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

LOG: [lldb] Introduce Language::AreEquivalentFunctions (#112720)

This allows languages to provide an opinion on whether two symbol
contexts are equivalent (i.e. belong to the same function).

It is useful to drive the comparisons done by stepping plans that need
to ensure symbol contexts obtained from different points in time are
actually the same.

Added: 
    

Modified: 
    lldb/include/lldb/Target/Language.h
    lldb/source/Target/ThreadPlanStepOverRange.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Target/Language.h b/lldb/include/lldb/Target/Language.h
index 41d8eeef469eab..c9cddee6baa2da 100644
--- a/lldb/include/lldb/Target/Language.h
+++ b/lldb/include/lldb/Target/Language.h
@@ -363,6 +363,15 @@ class Language : public PluginInterface {
     return false;
   }
 
+  /// Returns a boolean indicating whether two symbol contexts are equal for the
+  /// purposes of frame comparison. If the plugin has no opinion, it should
+  /// return nullopt.
+  virtual std::optional<bool>
+  AreEqualForFrameComparison(const SymbolContext &sc1,
+                             const SymbolContext &sc2) const {
+    return {};
+  }
+
   /// Returns true if this Language supports exception breakpoints on throw via
   /// a corresponding LanguageRuntime plugin.
   virtual bool SupportsExceptionBreakpointsOnThrow() const { return false; }

diff  --git a/lldb/source/Target/ThreadPlanStepOverRange.cpp b/lldb/source/Target/ThreadPlanStepOverRange.cpp
index 934f23b3b21a28..ef5b4b5c434d16 100644
--- a/lldb/source/Target/ThreadPlanStepOverRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepOverRange.cpp
@@ -11,6 +11,7 @@
 #include "lldb/Symbol/CompileUnit.h"
 #include "lldb/Symbol/Function.h"
 #include "lldb/Symbol/LineTable.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/Process.h"
 #include "lldb/Target/RegisterContext.h"
 #include "lldb/Target/Target.h"
@@ -103,6 +104,10 @@ void ThreadPlanStepOverRange::SetupAvoidNoDebug(
 
 bool ThreadPlanStepOverRange::IsEquivalentContext(
     const SymbolContext &context) {
+  if (Language *language = Language::FindPlugin(context.GetLanguage()))
+    if (std::optional<bool> maybe_equivalent =
+            language->AreEqualForFrameComparison(context, m_addr_context))
+      return *maybe_equivalent;
   // Match as much as is specified in the m_addr_context: This is a fairly
   // loose sanity check.  Note, sometimes the target doesn't get filled in so I
   // left out the target check.  And sometimes the module comes in as the .o


        


More information about the lldb-commits mailing list