Previously we would always write a hash of the binary into the PE file, for reproducible builds. This breaks AppCompat, which is a feature of Windows that relies on the timestamp in the PE header being set to a real value (or at the very least, a value that satisfies certain properties). To address this, we put the old behavior of writing the hash behind the /Brepro flag, which mimics MSVC linker behavior. We also match MSVC default behavior, which is to write an actual timestamp to the PE header. Finally, we add the /TIMESTAMP option (an lld extension) so that the user can specify the exact value to be used in case he/she manually constructs a value which is both reproducible and satisfies AppCompat. Differential Revision: https://reviews.llvm.org/D46966 llvm-svn: 332613
19 lines
840 B
Plaintext
19 lines
840 B
Plaintext
rm %t.*.exe
|
|
RUN: yaml2obj %p/Inputs/generic.yaml > %t.obj
|
|
RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe
|
|
RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe
|
|
RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe
|
|
RUN: llvm-readobj -file-headers -coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH
|
|
RUN: llvm-readobj -file-headers -coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH
|
|
RUN: llvm-readobj -file-headers -coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO
|
|
|
|
HASH: ImageFileHeader {
|
|
HASH: TimeDateStamp: [[STAMP:.*]]
|
|
HASH: DebugDirectory [
|
|
HASH: TimeDateStamp: [[STAMP]]
|
|
|
|
ZERO: ImageFileHeader {
|
|
ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0)
|
|
ZERO: DebugDirectory [
|
|
ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0)
|