[PATCH] D43913: Delay writing the PDB build id until just before file commit.
Zachary Turner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 28 15:08:29 PST 2018
zturner added inline comments.
Comment at: lld/COFF/PDB.cpp:1128-1136
+ // Set the build id in the pdb file.
+ // FIXME: Set Signature here to the timestamp of the executable. For
+ // reproducible builds, we will probably want to go further and set
+ // this field to a hash of the PDB file, then set the timestamp of
+ // the executable to be the same hash.
+ Result.IdPtr->Age = BuildId.PDB70.Age;
+ ::memcpy(&Result.IdPtr->Guid, &BuildId.PDB70.Signature,
> zturner wrote:
> > ruiu wrote:
> > > Does this unconditionally set `time(nullptr)` to the build id? If so, can't you pass it as an argument to Builder ctor or something?
> > Yes, but for now I'm trying to keep this no functional change. This is exactly what the code did before, so I wanted to leave it the same. In followup patches when we actually use a hash, the call to `time` will just go away.
> I wonder if you could pass a lambda to compute a hash value instead. Lambda is a convenient way to pass a piece of code to other module. I'm wondering if it's applicable here.
In practice this value is going to be a hash of the PDB. So instead of calling `time(nullptr)` I just call a function to compute the hash. Then somehow I pass this value back to `lld::coff::Writer` so it can write the same value to the Debug Directory in the PE. So there won't be a need to pass a lambda, because the PDB Linker will still be the one to compute it. So in a followup patch, I'll delete this, replace it with something like like `Result.IdPtr->Signature = hashPdb(*Result.File);` and then return the value of `Result.IdPtr->Signature` back to the caller so it can write the same value. So I don't think lambdas or anything fancy are needed.
More information about the llvm-commits