aprantl added inline comments.
================ Comment at: lldb/source/Target/Target.cpp:208 + // of the debugee. + m_scratch_type_system_map.Clear(); m_process_sp.reset(); ---------------- Michael137 wrote: > Michael137 wrote: > > kastiglione wrote: > > > Do we have some place in the life-cycle where we can perform this only if > > > the target has changed? Ideally this would happen when the binary has a > > > different timestamp, or for mach-o a different UUID. > > There is `DidUnloadModules` which gets notified when an > > lldb_private::Module gets unloaded (e.g., on rebuilt). But this includes > > JITted modules (e.g., when running AppleObjectiveCRuntimeV2 utility > > functions) in which case we wouldn’t want to flush the type systems. Also > > the Clang REPL (and I assume the Swift REPL) rely on the type system being > > still present after we unloaded the module associated with the evaluated > > expression. All this is to say, I found it to be quite fiddly to determine > > when to flush the persistent variables from within that notification. > > Really we would like a notification to the Target which says “we restarted > > the debugee AND some module got rebuilt”. In that case it’s not safe to > > keep the persistent variables around. I’ll double check if there isn’t > > something like that around. > I suppose we could do something like: > > ``` > void Target::ModulesDidUnload(ModuleList &module_list, bool delete_locations) > { > ... > if each module in module_list is Type::eTypeExecutable or > Type::eTypeObjectFile { > m_scratch_type_system_map.Clear(); > } > ``` That looks like a reasonable middle ground? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D138724/new/ https://reviews.llvm.org/D138724 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits