[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