> On Apr 10, 2018, at 3:21 PM, Leonard Mosescu <mose...@google.com> wrote:
> 
> 
> No. Each binary knows how to tell LLDB what target triple it is. PECOFF files 
> will always map to the host windows platform or remote-windows when not on a 
> Windows host computer. If you say "file a.out" and give it a PECOFF file, 
> just do "target list" and see the platform was selected for you. Since the 
> Minidump is specific to Windows, it should select the right platform for you. 
> If it doesn't we will need to fix that.
> 
> Thanks for the clarification. A small side note: yes, the minidump format 
> originates on Windows, but Breakpad/Crashpad use it across all supported 
> platforms (including Linux and macOS).

Ahh. So then hopefully it extracts the triple from the mini dump file and sets 
it correctly which gets us right platform set?

>  
> Does the mini dump format have the UUID or some sort of checksum of the file 
> in it?
> 
> Yes, the minidump has both the checksum for modules and UUID for the debug 
> information.

Good to hear.

> 
> On Tue, Apr 10, 2018 at 3:12 PM, Greg Clayton <clayb...@gmail.com 
> <mailto:clayb...@gmail.com>> wrote:
> 
> 
>> On Apr 10, 2018, at 2:30 PM, Leonard Mosescu <mose...@google.com 
>> <mailto:mose...@google.com>> wrote:
>> 
>> Thanks Greg! It makes sense and looking at the code it's already implemented 
>> along those lines: Target::GetSharedModule() defaults to 
>> Platform::GetSharedModule() if the initial attempt to get the module fails.
>> 
>> The part I'd like to understand is if there's a precedence for modules which 
>> don't have any accessible file image (local or remote). Is everything 
>> expected to work if we create placeholder Module & ModuleSpecs?
> 
> No, it is up to the platform to be able to track down files that don't exist 
> locally. Most platforms do nothing and will return an empty module shared 
> pointer. We need a file to use or we will just not have any info.
> 
>> (it seems that the current implementation assumes that we have a file 
>> somewhere. Ex. even creating a Module from a ModuleSpec will still try to 
>> map the source ModuleSpec to some files).
> 
> Yes. Right now with only the path, we will load the file if it exists on disk 
> since no UUID was specified in the ModuleSpec which is really bad and can 
> lead to incorrect info being displayed.
> 
>> 
>> At Apple, we call "dsymForUUID <UUID>" which, if global defaults were set to 
>> point at Apple's build servers, would go out and download the correct file 
>> for us and store it locally in a cache for future use.
>> 
>> Just curious, what happens if the download fails? Is the corresponding 
>> module skipped? (is this strictly about the dSYMs or the same mechanism 
>> works for the Mach-O binaries?)
> 
> It will block until the module is downloaded, and it can and often does fail 
> and returns an error that can be displayed. When we need to download large 
> debug info files, it creates delays with no user interaction and often leads 
> to people wondering what is going on. Not optimal, but it does work if you 
> wait for it.
> 
>> 
>> That way if you create a target that is a minidump on a different system 
>> (macOS, linux, etc), the platform would be remote-windows. 
>> 
>> Not sure if I understand this one, core & minidumps are currently not using 
>> any of the the remote debugging machinery, right? Are you suggesting 
>> changing that?
> 
> No. Each binary knows how to tell LLDB what target triple it is. PECOFF files 
> will always map to the host windows platform or remote-windows when not on a 
> Windows host computer. If you say "file a.out" and give it a PECOFF file, 
> just do "target list" and see the platform was selected for you. Since the 
> Minidump is specific to Windows, it should select the right platform for you. 
> If it doesn't we will need to fix that.
> 
> Does the mini dump format have the UUID or some sort of checksum of the file 
> in it?
> 
>> 
>> On Tue, Apr 10, 2018 at 11:56 AM, Greg Clayton <clayb...@gmail.com 
>> <mailto:clayb...@gmail.com>> wrote:
>> 
>> 
>>> On Apr 10, 2018, at 11:32 AM, Leonard Mosescu via lldb-dev 
>>> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote:
>>> 
>>> I'm looking at how the LLDB minidump reader creates the list of modules:
>>> 
>>> void ProcessMinidump::ReadModuleList() {
>>> ...
>>>     const auto file_spec = FileSpec(name.getValue(), true);
>>>     ModuleSpec module_spec = file_spec;
>>>     Status error;
>>>     lldb::ModuleSP module_sp = GetTarget().GetSharedModule(module_spec, 
>>> &error);
>>>     if (!module_sp || error.Fail()) {
>>>       continue;
>>>     }
>>> ...
>>> }
>>> 
>>> LLDB currently will insist on finding a local image for the module, which 
>>> is usually not the case for postmortem debugging on machines different than 
>>> the the the one where the minidump was created.
>>> 
>>> I don't see an obvious way to model modules which have no local image 
>>> (which is still different than the remote scenario where there is a remote 
>>> module image), am I missing anything?
>> 
>> The lldb_private::Platform is responsible for digging up any binaries for a 
>> given target, so this code should be grabbing the platform from the target 
>> and using that to get the shared module. That way if you create a target 
>> that is a minidump on a different system (macOS, linux, etc), the platform 
>> would be remote-windows. 
>> 
>> That being said "ModuleSpec" should be filled in with more than just the 
>> path. It should specify the UUID info from the mini dump that specifies 
>> exactly which version the file that you want. That way if the file on the 
>> current system exists, it won't return it unless the path matches. I assume 
>> the mini dump has each module's UUID information? If so, set it. If not the 
>> file format assumes you will be running the dumping the same machine and it 
>> should be updated to include this information. The platform code can then 
>> use this UUID info to possible go and fetch the right version from a UUID 
>> database, or how ever the platform wants to provide access to certain 
>> binaries. At Apple, we call "dsymForUUID <UUID>" which, if global defaults 
>> were set to point at Apple's build servers, would go out and download the 
>> correct file for us and store it locally in a cache for future use.
>> 
>> So fill in the UUID in ModuleSpec and modify the Platform::GetSharedModule() 
>> for your platform to do the right thing is the correct way to go. 
>> ProcessMinidump should switch over to using the Platform::GetSharedModule() 
>> instead of the target one, or use it after the target one if the target 
>> returns an invalid module.
>> 
>> Let me know if you have any more questions,
>> 
>> Greg
>> 
>>> 
>>> Thanks!
>>> Lemo.
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev 
>>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev>
>> 
>> 
> 
> 

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

Reply via email to