[Lldb-commits] [lldb] 71f3cac - Revert "[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module gets unloaded"

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 2 06:13:01 PST 2022


Author: Michael Buch
Date: 2022-12-02T14:12:41Z
New Revision: 71f3cac7895ad516ec25438f803ed3c9916c215a

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

LOG: Revert "[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module gets unloaded"

This reverts commit 4df11394a10b3b15d2fb9bde8b831cf68785aa45.

Added: 
    

Modified: 
    lldb/source/Target/Target.cpp

Removed: 
    lldb/test/API/functionalities/rerun_and_expr/Makefile
    lldb/test/API/functionalities/rerun_and_expr/TestRerunAndExpr.py
    lldb/test/API/functionalities/rerun_and_expr/main.cpp
    lldb/test/API/functionalities/rerun_and_expr/rebuild.cpp
    lldb/test/API/functionalities/rerun_and_expr_dylib/Makefile
    lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
    lldb/test/API/functionalities/rerun_and_expr_dylib/lib.cpp
    lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
    lldb/test/API/functionalities/rerun_and_expr_dylib/rebuild.cpp


################################################################################
diff  --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 8a197bf6e502a..22071b76a805b 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -1682,30 +1682,6 @@ void Target::ModulesDidUnload(ModuleList &module_list, bool delete_locations) {
     m_breakpoint_list.UpdateBreakpoints(module_list, false, delete_locations);
     m_internal_breakpoint_list.UpdateBreakpoints(module_list, false,
                                                  delete_locations);
-
-    // If a module was torn down it will have torn down the 'TypeSystemClang's
-    // that we used as source 'ASTContext's for the persistent variables in
-    // the current target. Those would now be unsafe to access because the
-    // 'DeclOrigin' are now possibly stale. Thus clear all persistent
-    // variables. We only want to flush 'TypeSystem's if the module being
-    // unloaded was capable of describing a source type. JITted module unloads
-    // happen frequently for Objective-C utility functions or the REPL and rely
-    // on the persistent variables to stick around.
-    const bool should_flush_type_systems =
-        module_list.AnyOf([](lldb_private::Module &module) {
-          auto *object_file = module.GetObjectFile();
-
-          if (!object_file)
-            return true;
-
-          auto type = object_file->GetType();
-
-          return type == ObjectFile::eTypeObjectFile ||
-                 type == ObjectFile::eTypeExecutable;
-        });
-
-    if (should_flush_type_systems)
-      m_scratch_type_system_map.Clear();
   }
 }
 

diff  --git a/lldb/test/API/functionalities/rerun_and_expr/Makefile b/lldb/test/API/functionalities/rerun_and_expr/Makefile
deleted file mode 100644
index 22f1051530f87..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include Makefile.rules

diff  --git a/lldb/test/API/functionalities/rerun_and_expr/TestRerunAndExpr.py b/lldb/test/API/functionalities/rerun_and_expr/TestRerunAndExpr.py
deleted file mode 100644
index 19907ce62de69..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr/TestRerunAndExpr.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-Test that re-running a process from within the same target
-after rebuilding the executable flushes the scratch TypeSystems
-tied to that process.
-"""
-
-import lldb
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-class TestRerun(TestBase):
-    def test(self):
-        """
-        Tests whether re-launching a process without destroying
-        the owning target keeps invalid ASTContexts in the
-        scratch AST's importer.
-
-        We test this by:
-        1. Evaluating an expression to import 'struct Foo' into
-           the scratch AST
-        2. Change the definition of 'struct Foo' and rebuild the executable
-        3. Re-launch the process
-        4. Evaluate the same expression in (1). We expect to have only
-           the latest definition of 'struct Foo' in the scratch AST.
-        """
-        self.build(dictionary={'CXX_SOURCES':'main.cpp', 'EXE':'a.out'})
-        (target, _, _, bkpt) = \
-                lldbutil.run_to_source_breakpoint(self, 'return', lldb.SBFileSpec('main.cpp'))
-
-        target.BreakpointCreateBySourceRegex('return', lldb.SBFileSpec('rebuild.cpp', False))
-
-        self.expect_expr('foo', result_type='Foo', result_children=[
-                ValueCheck(name='m_val', value='42')
-            ])
-
-        self.build(dictionary={'CXX_SOURCES':'rebuild.cpp', 'EXE':'a.out'})
-
-        self.runCmd('process launch')
-
-        self.expect_expr('foo', result_type='Foo', result_children=[
-            ValueCheck(name='Base', children=[
-                ValueCheck(name='m_base_val', value='42')
-            ]),
-            ValueCheck(name='m_derived_val', value='137')
-        ])
-
-        self.filecheck("target module dump ast", __file__)
-
-        # The new definition 'struct Foo' is in the scratch AST
-        # CHECK:      |-CXXRecordDecl {{.*}} struct Foo definition
-        # CHECK:      | |-public 'Base'
-        # CHECK-NEXT: | `-FieldDecl {{.*}} m_derived_val 'int'
-        # CHECK-NEXT: `-CXXRecordDecl {{.*}} struct Base definition
-
-        # ...but the original definition of 'struct Foo' is not in the scratch AST anymore
-        # CHECK-NOT: FieldDecl {{.*}} m_val 'int'
-

diff  --git a/lldb/test/API/functionalities/rerun_and_expr/main.cpp b/lldb/test/API/functionalities/rerun_and_expr/main.cpp
deleted file mode 100644
index a19dac03ffa98..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr/main.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-struct Foo {
-  int m_val = 42;
-};
-
-int main() {
-  Foo foo;
-  return 0;
-}

diff  --git a/lldb/test/API/functionalities/rerun_and_expr/rebuild.cpp b/lldb/test/API/functionalities/rerun_and_expr/rebuild.cpp
deleted file mode 100644
index 745a2ce954e89..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr/rebuild.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-struct Base {
-  int m_base_val = 42;
-};
-
-struct Foo : public Base {
-  int m_derived_val = 137;
-};
-
-int main() {
-  Foo foo;
-  return 0;
-}

diff  --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/Makefile b/lldb/test/API/functionalities/rerun_and_expr_dylib/Makefile
deleted file mode 100644
index 99998b20bcb05..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-CXX_SOURCES := main.cpp
-
-include Makefile.rules

diff  --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py b/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
deleted file mode 100644
index df75cbeba01fa..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""
-Test that re-running a process from within the same target
-after rebuilding the a dynamic library flushes the scratch
-TypeSystems tied to that process.
-"""
-
-import lldb
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-class TestRerun(TestBase):
-    def test(self):
-        """
-        Tests whether re-launching a process without destroying
-        the owning target keeps invalid ASTContexts in the
-        scratch AST's importer.
-
-        We test this by:
-        1. Evaluating an expression to import 'struct Foo' into
-           the scratch AST
-        2. Change the definition of 'struct Foo' and rebuild the dylib
-        3. Re-launch the process
-        4. Evaluate the same expression in (1). We expect to have only
-           the latest definition of 'struct Foo' in the scratch AST.
-        """
-
-        # Build a.out
-        self.build(dictionary={'EXE':'a.out',
-                               'CXX_SOURCES':'main.cpp'})
-
-        # Build libfoo.dylib
-        self.build(dictionary={'DYLIB_CXX_SOURCES':'lib.cpp',
-                               'DYLIB_ONLY':'YES',
-                               'DYLIB_NAME':'foo',
-                               'USE_LIBDL':'1',
-                               'LD_EXTRAS':'-L.'})
-
-        (target, _, _, bkpt) = \
-                lldbutil.run_to_source_breakpoint(self, 'return', lldb.SBFileSpec('main.cpp'))
-
-        self.expect_expr('*foo', result_type='Foo', result_children=[
-                ValueCheck(name='m_val', value='42')
-            ])
-
-        # Re-build libfoo.dylib
-        self.build(dictionary={'DYLIB_CXX_SOURCES':'rebuild.cpp',
-                               'DYLIB_ONLY':'YES',
-                               'DYLIB_NAME':'foo',
-                               'USE_LIBDL':'1',
-                               'LD_EXTRAS':'-L.'})
-
-        self.runCmd('process launch')
-        (target, _, _, bkpt) = \
-                lldbutil.run_to_source_breakpoint(self, 'return', lldb.SBFileSpec('main.cpp'))
-
-        self.expect_expr('*foo', result_type='Foo', result_children=[
-            ValueCheck(name='Base', children=[
-                ValueCheck(name='m_base_val', value='42')
-            ]),
-            ValueCheck(name='m_derived_val', value='137')
-        ])
-
-        self.filecheck("target module dump ast", __file__)
-
-        # The new definition 'struct Foo' is in the scratch AST
-        # CHECK:      |-CXXRecordDecl {{.*}} struct Foo definition
-        # CHECK:      | |-public 'Base'
-        # CHECK-NEXT: | `-FieldDecl {{.*}} m_derived_val 'int'
-        # CHECK-NEXT: `-CXXRecordDecl {{.*}} struct Base definition
-
-        # ...but the original definition of 'struct Foo' is not in the scratch AST anymore
-        # CHECK-NOT: FieldDecl {{.*}} m_val 'int'

diff  --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/lib.cpp b/lldb/test/API/functionalities/rerun_and_expr_dylib/lib.cpp
deleted file mode 100644
index aad9816a4be27..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/lib.cpp
+++ /dev/null
@@ -1 +0,0 @@
-LLDB_DYLIB_EXPORT struct Foo { int m_val = 42; } global_foo;

diff  --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp b/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
deleted file mode 100644
index 144e8bac699b5..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <cassert>
-#include <dlfcn.h>
-
-extern struct Foo imported;
-
-int main() {
-  void *handle = dlopen("libfoo.dylib", RTLD_NOW);
-  struct Foo *foo = (struct Foo *)dlsym(handle, "global_foo");
-  assert(foo != nullptr);
-
-  return 0;
-}

diff  --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/rebuild.cpp b/lldb/test/API/functionalities/rerun_and_expr_dylib/rebuild.cpp
deleted file mode 100644
index b9d835184dde8..0000000000000
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/rebuild.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-struct Base {
-  int m_base_val = 42;
-};
-
-LLDB_DYLIB_EXPORT struct Foo : public Base {
-  int m_derived_val = 137;
-} global_foo;


        


More information about the lldb-commits mailing list