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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits