[efi] Work around broken 32-bit PE executable parsing in ImageHlp.dll
authorMichael Brown <mcb30@ipxe.org>
Fri, 25 Sep 2015 12:41:32 +0000 (13:41 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 25 Sep 2015 12:41:32 +0000 (13:41 +0100)
commit7b976dd300c266c6f7e388b0dd65233cb9cb1ea5
treed38e1ee8ea6a343c9ab62a6b7d707ba5dff6423c
parent3f8da985aa81e31b6e9482970f6ec594aecca552
[efi] Work around broken 32-bit PE executable parsing in ImageHlp.dll

The Microsoft PE/COFF specification defines the MajorLinkerVersion and
MinorLinkerVersion fields as "The linker major version number" and
"The linker minor version number" respectively, and has nothing more
to say on the matter.  These fields have no significance: they do not
affect the interpretation of the remainder of the file, but merely
provide diagnostic information for interested humans to read.

Apparently, versions 2.4 and earlier of the Microsoft linker produced
binaries so incorrigibly cursed that even to attempt to parse such a
binary would risk summoning a plague of enraged spiders.  To protect
users from unwanted arachnids, ImageHlp.dll's MapAndLoad() function
will helpfully fail to map and/or load a 32-bit binary unless the
linker version field indicates version 2.5 or later.  (64-bit binaries
are exempt from such helpfulness.)

Work around the broken Microsoft ImageHlp.dll library by providing a
linker version number that will satisfy the arbitrary whims of the
MapAndLoad() function.

This mirrors wimboot commit 670c7e2 ("[efi] Work around broken 32-bit
PE executable parsing in ImageHlp.dll").

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/util/elf2efi.c