Before, empty debug streams were written as 8 bytes (4 bytes signature + 4 bytes for the GlobalRefs count), see here.
With this patch, unused empty streams aren't emitted anymore. Modules now encode 65535 as an 'unused stream' value, by convention.
Also fix the * Linker * contrib section which wasn't correctly emitted previously.
As a side-effect, MinGW PDBs are now much smaller. Tested with Martin's dataset, using lld-link @response.txt /debug
libqt_plugin.pdb:
| trunk | 21 MB |
| this patch | 13.3 MB |
This was previously caused by the large amount of MinGW sections which create a separate module, each with its own debug stream:
Summary
============================================================
Block Size: 4096
Number of blocks: 5491
Number of streams: 2151 <----------
Signature: 382173742
Age: 1
GUID: {2E82C716-1297-3F14-4C4C-44205044422E}
Features: 0x0
Has Debug Info: true
Has Types: true
Has IDs: false
Has Globals: true
Has Publics: true
Is incrementally linked: false
Has conflicting types: false
Is stripped: false
...
Stream 13 ( 8 bytes): [Module "C:\Users\aganea\Downloads\vlc-qt-plugin-repro\home\martin\fate\vlc\src\build-x86_64\modules\gui\qt\.libs\libqt_plugin_la-qt.o"]
Blocks: [1775]
...
Mod 0003 | `C:\Users\aganea\Downloads\vlc-qt-plugin-repro\home\martin\fate\vlc\src\build-x86_64\modules\gui\qt\.libs\libqt_plugin_la-qt.o`:
Stream 13, 8 bytes
Symbols
Total: 0 entries ( 0 bytes)
--------------------------------------------------------------------------
Chunks
Total: 0 entries ( 0 bytes)
--------------------------------------------------------------------------With this patch:
Summary
============================================================
Block Size: 4096
Number of blocks: 3397
Number of streams: 45 <----------
Signature: 4031447796
Age: 1
GUID: {F4024BF0-D475-9E33-4C4C-44205044422E}
Features: 0x0
Has Debug Info: true
Has Types: true
Has IDs: false
Has Globals: true
Has Publics: true
Is incrementally linked: false
Has conflicting types: false
Is stripped: false
...
Mod 0003 | `C:\Users\aganea\Downloads\vlc-qt-plugin-repro\home\martin\fate\vlc\src\build-x86_64\modules\gui\qt\.libs\libqt_plugin_la-qt.o`:
Mod 3 (debug info not present): [C:\Users\aganea\Downloads\vlc-qt-plugin-repro\home\martin\fate\vlc\src\build-x86_64\modules\gui\qt\.libs\libqt_plugin_la-qt.o]