From: Jason A. Donenfeld Date: Sun, 8 Nov 2020 01:48:09 +0000 (+0100) Subject: cmd/link: recognize arm header of PE objects X-Git-Tag: go1.16beta1~23 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=033390d9ad;p=gostls13.git cmd/link: recognize arm header of PE objects The linker recognizes headers for 386 and amd64 PE objects, but not arm objects. This is easily overlooked, since its the same as the 386 header value, except the two nibbles of the first word are swapped. This commit simply adds the check for this. Without it, .syso objects are rejected, which means Windows binaries can't have resources built into them. At the same time, we add comments to better indicate which condition applies to which arch. Change-Id: I210411d978504c1a9540e23abc5a180e24f159ad Reviewed-on: https://go-review.googlesource.com/c/go/+/268237 Reviewed-by: Cherry Zhang Trust: Alex Brainman Trust: Jason A. Donenfeld --- diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index e1cc7184de..8dd24371d5 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1801,7 +1801,7 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string, return ldhostobj(ldmacho, ctxt.HeadType, f, pkg, length, pn, file) } - if c1 == 0x4c && c2 == 0x01 || c1 == 0x64 && c2 == 0x86 { + if /* x86 */ c1 == 0x4c && c2 == 0x01 || /* x86_64 */ c1 == 0x64 && c2 == 0x86 || /* armv7 */ c1 == 0xc4 && c2 == 0x01 { ldpe := func(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) { textp, rsrc, err := loadpe.Load(ctxt.loader, ctxt.Arch, ctxt.IncVersion(), f, pkg, length, pn) if err != nil {