lemo added a comment.

Thanks for the feedback. I uploaded a new revision (incorporating some of the 
feedback, including an ELF test case)



================
Comment at: include/lldb/Core/Module.h:779
+  //------------------------------------------------------------------
+  void SetUUID(const lldb_private::UUID &uuid);
+
----------------
labath wrote:
> amccarth wrote:
> > Was there no SetUUID before because the UUID was considered immutable?  I 
> > wonder if that's worth keeping.  Is the UUID always known at construction 
> > time?
> The UUID is not always know at construction time -- sometimes it can be, if 
> you set it on the FileSpec you use to create the module, but you don't have 
> to do that.
> 
> However, it is true that the UUID was constant during the lifetime of the 
> Module, and this changes that, which is not ideal IMO.
> 
> It seems that in the only place you call this function, you already know the 
> UUID. Would it be possible to do this work in the PlaceholderModule 
> constructor (thereby avoiding any changes to the Module API) ?
Good point: I agree, it's a good idea to preserve the invariant that the module 
UUID does not change once it's set.

I'd not add more complexity & arguments to the placeholder module constructor 
though. Moreover, even if it's technically possible to reach into the protected 
data members from Module I'd like to avoid doing that since Module::m_uuid is 
closely tied to Module::m_mutex and Module::m_did_parse_uuid (the later now 
renamed to m_did_set_uuid).

I added a check and assert to prevent Module::SetUUID from overwriting an 
already set UUID. (Personally I'd would've liked to have the assert be a 
fastfail in all builds but I remember that is somewhat against the LLDB 
philosophy)




================
Comment at: source/Core/Module.cpp:341
+  m_uuid = uuid;
+  m_did_parse_uuid = true;
+}
----------------
amccarth wrote:
> I wonder if the lazy UUID lookup in Module::GetUUID should call this to avoid 
> code duplication.  I know it's not a lot of code, but it involves a mutex and 
> an atomic flag, so it might be nice to always have this update in just one 
> place.
Good point, but I'm afraid that would obscure the double-checked-locking in 
Module::GetUUID() so I'd rather not change it.


================
Comment at: source/Plugins/Process/minidump/MinidumpParser.cpp:99
 
+UUID MinidumpParser::GetModuleUUID(const MinidumpModule *module) {
+  auto cv_record =
----------------
amccarth wrote:
> I wonder if this should return an `Expected<UUID>`.  The function has 
> multiple ways it can fail, in which case the error info is lost and we 
> silently return an empty UUID.
The goal is support the common CV records we expect to see from current 
toolchains and the contract for GetModuleUUID() is to either return a valid 
UUID or an empty one. 

Neither is an error: the CV record is optional and we also can't guarantee to 
handle every single CV record type.




https://reviews.llvm.org/D46292



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

Reply via email to