On Jun 17, 2013, at 6:04 PM, Sebastien Metrot <[email protected]> wrote:

> 
> On Jun 17, 2013, at 20:16 , Greg Clayton <[email protected]> wrote:
> 
>> Types are parsed lazily in modules so you will only get what types have been 
>> parsed up to the time you make the function call. My issue with trying to 
>> enumerate types in a module are:
>> 1 - it isn't always easy to ask a large DWARF object "get me the number of 
>> unique types you contain". Often DWARF has duplicate type info that we 
>> realize can be coalesced when we parse a type.
>> 2 - it is hard to force each symbol file parser to support "get type at 
>> index"
>> 
> 
> 
> Watching the result I got made me realise that (some obscure duplicates).
> 
> 
>> The best we can probably do is to add a
>> 
>> SBTypeList
>> SBModule::GetAllTypes()
>> 
>> Then lldb_private::SymbolVendor and lldb_private::SymboFile would need to 
>> have a new virtual functions added to them:
>> 
>> 
>> virtual size_t
>> lldb_private::SymbolVendor::GetAllTypes(lldb_private::TypeList &type_list);
>> 
>> virtual size_t
>> lldb_private::SymboFile::GetAllTypes(lldb_private::TypeList &type_list);
>> 
> 
> Ok. Adding new method was the easy part :-).
> 
>> 
>> Then each symbol file parser would be responsible for parsing all types and 
>> returning a uniqued type list.
>> 
>> As for the performance issue you solved with your std::vector, I would 
>> change this patch to do the following:
>> 
>> 1 - modify lldb_private::TypeListImpl to have a new Append function that 
>> takes a "const lldb_private::TypeList &type_list". You then might need to 
>> add a function to lldb_private::TypeList like:
>> 
>> void
>> lldb_private::TypeList (std::function <bool(lldb::TypeSP &type_sp)> const 
>> &callback);
>> 
>> We use this trick in the "BreakpointSiteList::ForEach" to provide an 
>> efficient way to iterate over a collection. An example of using a lambda 
>> function to iterate over the breakpoint site list can be seen in 
>> Process::DisableAllBreakpointSites(). The bool return value for the callback 
>> function indicates whether to continue iterating over the list.
>> 
> 
> I did that but don't I need to change SBTypeList to add some way to construct 
> it from an existing TypeListImpl (or to access its TypeListImpl member? Or at 
> least make SBModule a friend of SBTypeList?
> 
>> The trickiest part of this will be the SymbolFileDWARF::GetAllTypes(). If 
>> you need help with this let me know.
>> 
> 
> Ok, indeed that's the scary part for a newbie. What is the best place to look 
> in order to get some ideas of how to implement that?

Send a patch with this function hollowed out and I will fill it in for you.

> 
> Many thanks for your very helpful answers again!
> 
> S.
> 
> 
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to