[MC] Generate a timestamp for COFF object files

The MS incremental linker seems to inspect the timestamp written into
the object file to determine whether or not it's contents need to be
considered.  Failing to set the timestamp to a date newer than the
executable will result in the object file not participating in
subsequent links.  To ameliorate this, write the current time into the
object file's TimeDateStamp field.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246607 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2015-09-01 23:46:11 +00:00
parent dc2d216543
commit 6ad37ecd02
2 changed files with 8 additions and 3 deletions

View File

@ -35,6 +35,7 @@
#include "llvm/Support/JamCRC.h"
#include "llvm/Support/TimeValue.h"
#include <cstdio>
#include <ctime>
using namespace llvm;
@ -1012,8 +1013,12 @@ void WinCOFFObjectWriter::writeObject(MCAssembler &Asm,
Header.PointerToSymbolTable = offset;
// We want a deterministic output. It looks like GNU as also writes 0 in here.
Header.TimeDateStamp = 0;
// MS LINK expects to be able to use this timestamp to implement their
// /INCREMENTAL feature.
std::time_t Now = time(nullptr);
if (Now < 0 || Now > UINT32_MAX)
Now = UINT32_MAX;
Header.TimeDateStamp = Now;
// Write it all to disk...
WriteFileHeader(Header);

View File

@ -1,4 +1,4 @@
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-readobj -h | FileCheck %s
// CHECK: ImageFileHeader {
// CHECK: TimeDateStamp: {{.*}} (0x0)
// CHECK: TimeDateStamp: {{.*}}