alvinhochun added a reviewer: DavidSpickett.
alvinhochun added a comment.

Thanks for the comment.

In D134581#3813484 <https://reviews.llvm.org/D134581#3813484>, @jasonmolenda 
wrote:

> I probably misunderstand the situation DynamicLoaderWindows finds itself in, 
> but in DynamicLoaderDarwin we have similar behavior - you run 'lldb binary' 
> and lldb loads all the directly linked dynamic libraries into the target it 
> creates, pre-execution.  When execution starts, the dynamic linker tells us 
> where the binary is loaded in memory and we call Target::SetExecutableModule 
> with it.  Target::SetExecutableModule has a side effect of clearing the 
> Target's module list - you now have only one binary in the Target, your 
> executable module.  (this is done so the 0th image in the image list is your 
> executable module)
>
> Why aren't your pre-loaded DLLs unloaded when you call 
> Target::SetExecutableModule?

In `ProcessWindows::OnDebuggerConnected`, it first checks 
`GetTarget().GetExecutableModule()`. Only when the returned module is null 
(i.e. the binary hasn't already been loaded) then it calls 
`GetTarget().SetExecutableModule(module, eLoadDependentsNo)`. If I understood 
you correctly, then the right thing to do there should be to call 
`GetTarget().SetExecutableModule(module, eLoadDependentsNo)` in all cases, 
without checking `GetExecutableModule`, right?

It seems to make sense, but I may need some comments from other reviewers on 
this.

In D134581#3813485 <https://reviews.llvm.org/D134581#3813485>, @jasonmolenda 
wrote:

> I'll have to admit, a quick read through of Target::GetOrAddModule() worries 
> me about adding this mid-function return - the code clearly has a mix of 
> cases where it has found a Module on disk that is new to lldb and is loading 
> it, it has found a module in lldb's global module cache which has the same 
> UUID and/or filepath, and something in there about a Target which already has 
> a module and the newly loaded module is used to replace it - not sure what 
> that's about, but I only read it quickly.  My initial impression is that this 
> change is unlikely to be the right thing to do, tbh, regardless of the more 
> basic "why are we in this situation in the first place".   Again, I might be 
> mistaken/not understanding the issue properly though.

I checked again and I think you are probably correct. Other than 
`!did_create_module` it seems an additional condition `&& 
m_images.FindModule(module_sp.get())` will be needed for it to do the right 
thing.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134581/new/

https://reviews.llvm.org/D134581

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to