Hui added inline comments.

================
Comment at: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp:60
+  llvm::StringRef pdb_file;
+  if (!COFFObj->getDebugPDBInfo(pdb_info, pdb_file) && pdb_info)
+    return UUID::fromOptionalData(pdb_info->PDB70.Signature);
----------------
labath wrote:
> Can `getDebugPDBInfo` succeed and still return a null pdb_info? If not, can 
> we delete the second part?
> 
> Instead I believe you should check the CVSignature field of the returned 
> struct to see that it indeed contains a PDB70 record.
If the exe/dll is built without any debug info, the function succeeds and still 
returns null pdb_info.


================
Comment at: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp:61
+  if (!COFFObj->getDebugPDBInfo(pdb_info, pdb_file) && pdb_info)
+    return UUID::fromOptionalData(pdb_info->PDB70.Signature);
+
----------------
labath wrote:
> Is there a specific reason you used this particular encoding of the UUID, or 
> did you do that just because it was the easiest? I am asking because I have a 
> reason to have this use a somewhat different encoding. :)
> 
> Let me elaborate: I think there are two things we can want from the UUID 
> here: The first one is for it to match the UUID encoding we get from other 
> sources (so that they can agree on whether they are talking about the same 
> binary). The second one is for the uuid encoding to match the "native" UUID 
> format of the given platform.
> 
> Right now, this implementation achieves neither. :) It fails the second 
> criterion because the UUID strings comes out in different endianness than 
> what the windows native tools produce (I'm using `dumpbin` as reference 
> here.). And it also fails the first one, because e.g. minidump reading code 
> parses the UUID differently <D60501>.
> 
> Now, for windows, these two criteria are slightly at odds with one another. 
> In order to fully match the dumpbin format, we would need to have some kind 
> of a special field for the "age" bit. But lldb has no such concept, and there 
> doesn't seem to be much need to introduce it. However, including the "age" 
> field in the "uuid" seems like the right thing to do, as two files with 
> different "ages" should be considered different for debug info matching 
> purposes (at least, that's what my limited understanding of pdbs tells me. if 
> some of this is wrong, please let me know). So, in <D60501> I made a somewhat 
> arbitrary decision to attach the age field to the UUID in big endian.
> That's the format that made most sense to me, though that can certainly be 
> changed (the most important thing is for these things to stay in sync).
> 
> So, if you have a reason to use a different encoding, please let me know, so 
> we can agree on a consistent implementation. Otherwise, could you change this 
> to use the same UUID format as the minidump parser?
You are right. The encoding of MS struct GUID and the PDB70DebugInfo::Signature 
are different.  Can UUID format and the method to yield it from minidump parser 
be available in class COFFObjectFile?



================
Comment at: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp:866
+
+  m_uuid = GetCoffUUID(GetFileSpec());
+  return m_uuid;
----------------
labath wrote:
> ObjectFilePECOFF already has a `llvm::object::Binary` created for the 
> underlying file. I think it's super-wasteful (and potentially racy, etc.) to 
> create a second one just to read out it's GUID. If you make a second version 
> of this function, taking a `Binary` (and have the FileSpec version delegate 
> to that), then you can avoid this.
In addition, it is possible to simplify ObjectFilePECOFF 
::GetModuleSpecifications API with such Binary.  In this sense, none of the 
arguments, like data_sp, data_offset will be used. 


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

https://reviews.llvm.org/D56229



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

Reply via email to