[lld] r305929 - [COFF] Set MajorLinkerVersion to 14 instead of 0.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 21 09:42:09 PDT 2017


Author: ruiu
Date: Wed Jun 21 11:42:08 2017
New Revision: 305929

URL: http://llvm.org/viewvc/llvm-project?rev=305929&view=rev
Log:
[COFF] Set MajorLinkerVersion to 14 instead of 0.

This works around a strange interaction with Authenticode signatures,
in which a signed PE executable with {Major,Minor}LinkerVersion = 0.0
fails to validate on Windows 7 (but is OK on Windows 10). Setting the
linker version to 14.0 (which is what VS2015 outputs) makes it work
again.

Patch by Simon Tatham <simon.tatham at arm.com>.

Modified:
    lld/trunk/COFF/Writer.cpp
    lld/trunk/test/COFF/hello32.test

Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=305929&r1=305928&r2=305929&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Wed Jun 21 11:42:08 2017
@@ -603,6 +603,15 @@ template <typename PEHeaderTy> void Writ
   auto *PE = reinterpret_cast<PEHeaderTy *>(Buf);
   Buf += sizeof(*PE);
   PE->Magic = Config->is64() ? PE32Header::PE32_PLUS : PE32Header::PE32;
+
+  // If {Major,Minor}LinkerVersion is left at 0.0, then for some
+  // reason signing the resulting PE file with Authenticode produces a
+  // signature that fails to validate on Windows 7 (but is OK on 10).
+  // Set it to 14.0, which is what VS2015 outputs, and which avoids
+  // that problem.
+  PE->MajorLinkerVersion = 14;
+  PE->MinorLinkerVersion = 0;
+
   PE->ImageBase = Config->ImageBase;
   PE->SectionAlignment = PageSize;
   PE->FileAlignment = SectorSize;

Modified: lld/trunk/test/COFF/hello32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/hello32.test?rev=305929&r1=305928&r2=305929&view=diff
==============================================================================
--- lld/trunk/test/COFF/hello32.test (original)
+++ lld/trunk/test/COFF/hello32.test Wed Jun 21 11:42:08 2017
@@ -21,7 +21,7 @@ HEADER-NEXT:     IMAGE_FILE_EXECUTABLE_I
 HEADER-NEXT:   ]
 HEADER-NEXT: }
 HEADER-NEXT: ImageOptionalHeader {
-HEADER-NEXT:   MajorLinkerVersion: 0
+HEADER-NEXT:   MajorLinkerVersion: 14
 HEADER-NEXT:   MinorLinkerVersion: 0
 HEADER-NEXT:   SizeOfCode: 512
 HEADER-NEXT:   SizeOfInitializedData: 1536




More information about the llvm-commits mailing list