lld-link: Set PDB GUID to hash of PDB contents instead of to a random byte sequence.
authorNico Weber <nicolasweber@gmx.de>
Sat, 15 Sep 2018 18:37:22 +0000 (18:37 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sat, 15 Sep 2018 18:37:22 +0000 (18:37 +0000)
commit0bd2d304e672c4a573affa2b10f67304d03f415a
tree7bac8372d7d7f93f70117422d9ec727ca92532fa
parent205ca68b8db35f3f6037aac8006d8cf29be2701a
lld-link: Set PDB GUID to hash of PDB contents instead of to a random byte sequence.

Previously, lld-link would use a random byte sequence as the PDB GUID. Instead,
use a hash of the PDB file contents.

To not disturb llvm-pdbutil pdb2yaml, the hash generation is an opt-in feature
on InfoStreamBuilder and ldb/COFF/PDB.cpp always sets it.

Since writing the PDB computes this ID which also goes in the exe, the PDB
writing code now must be called before writeBuildId(). writeBuildId() for that
reason is no longer included in the "Code Layout" timer.

Since the PDB GUID is now a function of the PDB contents, the PDB Age is always
set to 1. There was a long comment above loadExistingBuildId (now gone) about
how not changing the GUID and only incrementing the age was important, but
according to the discussion in PR35914 that comment was incorrect.

Differential Revision: https://reviews.llvm.org/D51956

llvm-svn: 342334
lld/COFF/PDB.cpp
lld/COFF/PDB.h
lld/COFF/Writer.cpp
lld/test/COFF/rsds.test