(ping.)

> On Aug 10, 2015, at 5:03 PM, Adrian Prantl <apra...@apple.com> wrote:
> 
> [resending because I accidentally sent this to the old mailing list].
> 
>> On Jul 24, 2015, at 12:33 PM, David Blaikie <dblai...@gmail.com 
>> <mailto:dblai...@gmail.com>> wrote:
>> 
>> *reads back through the thread*
> 
> appreciated, it’s long :-)
> 
>> So what I originally had in mind about a year ago when we discussed this, 
>> was that the module data could have an extra table from type hash to 
>> whatever useful internal representation to find the type in the PCM.
> 
> It turned out that the most useful internal type representation to find a 
> type in a PCM is the type’s DeclContext+Name; this is how (surprise!) clang 
> looks up types in a PCM and the format is supposed to be fast for these kind 
> of lookups.
> 
>> Everything else would just be DWARF with type units and fission (with the 
>> slight wrinkle of type units that aren't resolvable within a single object 
>> file - they could reference cross-object/dwo file) - emitting a fission CU 
>> for each referenced module.
>> 
>> Needing modules to disambiguate/avoid collisions/support non-odr languages 
>> wasn't something I understood/had considered back then. That explains the 
>> need to add module references to the CU, so the debugger can know which 
>> modules to search for the types in (& doesn't just go loading all of them, 
>> etc).
>> 
>> I would still picture this as "normal type units + a table in the module to 
>> resolve types", but if you guys particularly like using the mangled string 
>> name (or other identifier) in the DWARF that may avoid the need for an 
>> intermediate table (but it doesn't sound like you are avoiding an 
>> intermediate table - you said something about having an 
>> accelerator-table-like thing to aid in the DWARF->AST mapping? So could that 
>> be key'd of the type hash/signature we're using, thus keeping the DWARF more 
>> plain/vanilla DWARF5 (type units + fission)?)
> 
> I originally disliked type signatures and favored using mangled names because 
> the mangled names contained the DeclContext necessary to find types in the 
> PCM. But if we can squeeze the DeclContext somewhere else, that’s fine.
> 
> From the discussion we had on FlagExternalTypeRef I got the impression that 
> long-form forward declarations are starting to look more attractive: If every 
> external type reference is a reference to a forward declaration that has a 
> complete decl context, with a DW_TAG_module at the root of the decl context 
> chain, and a DW_AT_name+DW_AT_signature at the other end, we would have all 
> the information we need without introducing any further LLVM-specific DWARF 
> extensions. To look up an external type from the PCM, the consumer imports 
> the DW_TAG_module and deserializes the type found by declcontext+name. To 
> load the type from DWARF, the consumer grabs the signature from the forward 
> declaration and magically (1) finds the PCM and looks up the type by 
> signature (2).
> 
> (1) My suggestion is to extend LLVM so it can put the DW_TAG_module with the 
> forward declaration inside the skeleton compile unit (which has the path to 
> the PCM and its DWOid).
> (2) On ELF with type units this works out of the box, on MachO without type 
> units we need some kind of index mapping signature -> DIE (bag of DWARF 
> style?).
> 
> Assuming that many external types will share a similar DeclContext prefix I 
> am not very worried by the space needed to store the long forward references. 
> Compared to storing the mangled name for every type it will often actually 
> take up less space. Also, on Darwin at least, llvm-dsymutil can strip them 
> out of the way after resolving the external type references.
> 
> -- adrian

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

Reply via email to