[PATCH] D45283: [COFF] Minimal serialization support for precompiled types records

Zachary Turner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 5 12:46:31 PDT 2018


zturner added inline comments.


================
Comment at: include/llvm/DebugInfo/CodeView/TypeRecord.h:910
+
+  uint32_t StartTypeIndex;
+  uint32_t TypesCount;
----------------
aganea wrote:
> rnk wrote:
> > That sounds like it'll be fun to implement in type merging. =/
> Well in practice, it is not as bad as it seems. It boils down to replacing the LF_PRECOMP record with a copy of precomp.obj, up to LF_ENDRECORD.
> 
> Consider a.obj, which has a reference to precomp.obj:
> 
> 
> ```
> 0x1000 | LF_PRECOMP [size = 60] start index = 4096, types count = 1031, signature = 0x1116980E, precomp path = f:\svn\lld\test\coff\precomp\precomp.obj
> 0x1407 | LF_ARGLIST [size = 12]
>          0x0070 (char): `char`
> 0x1408 | LF_PROCEDURE [size = 16]
>          return type = 0x0074 (int), # args = 1, param list = 0x1407
>          calling conv = cdecl, options = None
> 0x1409 | LF_FUNC_ID [size = 20]
>          name = main, type = 0x1029, parent scope = <no type>
> ```
> and precomp.obj:
> 
> ```
> 0x1000 | LF_STRUCTURE [size = 64] `_s__CatchableType`
>          unique name: `.?AU_s__CatchableType@@`
>          vtable: <no type>, base list: <no type>, field list: <no type>
>          options: forward ref | has unique name
> 0x1001 | LF_MODIFIER [size = 12]
>          referent = 0x1000, modifiers = const
> ...
> 0x1406 | LF_UDT_SRC_LINE [size = 16]
>          udt = 0x1405, file = 4180, line = 759
> 0x1407 | LF_ENDPRECOMP [size = 8] signature = 0x1116980E
> ```
> 
> Prior to merging a.obj, you simply append the contents of precomp.obj into LF_PRECOMP, up to LF_ENDPRECOMP (but not including it)
> As you can see the type records IDs jump after LF_PRECOMP from 0x1000 to 0x1407. The data is just here for back-reference, so a.obj can be remapped properly. We only merge/remap precomp.obj once.
> 
> Currently, llvm-pdbutil does not jump from 0x1000 to 0x1407 after printing LF_PRECOMP, I will fix that in a subsequent change as it doesn't seem like a trivial change.
> Currently, llvm-pdbutil does not jump from 0x1000 to 0x1407 after printing LF_PRECOMP, I will fix that in a subsequent change as it doesn't seem like a trivial change.

It seems like we could do a similar thing to what we do for `LF_TYPESERVER` records.  But you're right it might not be trivial.


Repository:
  rL LLVM

https://reviews.llvm.org/D45283





More information about the llvm-commits mailing list