aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-11-08 02:48:09 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-12-14 22:34:47 +0000
commit033390d9adb0e7a96d0558bb1702e270ef986c90 (patch)
tree2b05ee5b1cff9dfc1665146dbe56b2fa98ac269b
parent48906a6d57fdc3c6fd2b6b9fe4c0e31dc225a058 (diff)
downloadgo-033390d9adb0e7a96d0558bb1702e270ef986c90.tar.gz
go-033390d9adb0e7a96d0558bb1702e270ef986c90.zip
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 <cherryyz@google.com> Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--src/cmd/link/internal/ld/lib.go2
1 files changed, 1 insertions, 1 deletions
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 {