aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-11-09 10:58:18 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-11-13 14:42:54 +0100
commit7ae981daefd7d1fc26e3b41d3089e352380d19d7 (patch)
tree558245a5e52851a234e496e3475c1570cb49c24d /go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch
parentglobal: go generate (diff)
downloadwireguard-windows-7ae981daefd7d1fc26e3b41d3089e352380d19d7.tar.xz
wireguard-windows-7ae981daefd7d1fc26e3b41d3089e352380d19d7.zip
build: add linker patches for llvm-rc
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch')
-rw-r--r--go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch b/go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch
new file mode 100644
index 00000000..34bd75fb
--- /dev/null
+++ b/go-patches/0003-cmd-link-ignore-SEH-marking-on-PE-objects.patch
@@ -0,0 +1,47 @@
+From b3b6bbb7094e9d1f8c73a13bdf2461dea5072265 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Sun, 8 Nov 2020 03:20:36 +0100
+Subject: [PATCH 3/8] cmd/link: ignore SEH marking on PE objects
+
+Microsoft's linker looks at whether all input objects have an empty
+section called @feat.00. If all of them do, then it enables SEH;
+otherwise it doesn't enable that feature. So, since around the Windows
+XP SP2 era, most tools that make PE objects just tack on that section,
+so that it won't gimp Microsoft's linker logic. Go doesn't support SEH,
+so in theory, none of this really matters to us. But actually, if the
+linker tries to ingest an object with @feat.00 -- which are produced by
+LLVM's resource compiler, for example -- it chokes because of the
+IMAGE_SYM_ABSOLUTE section that it doesn't know how to deal with. Since
+@feat.00 is just a marking anyway, skip IMAGE_SYM_ABSOLUTE sections that
+are called @feat.00.
+
+Change-Id: I1d7bfcf6001186c53e2c487c5ac251ca65efefee
+---
+ src/cmd/link/internal/loadpe/ldpe.go | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/cmd/link/internal/loadpe/ldpe.go b/src/cmd/link/internal/loadpe/ldpe.go
+index 5839a6a5f2..b60b84ce9f 100644
+--- a/src/cmd/link/internal/loadpe/ldpe.go
++++ b/src/cmd/link/internal/loadpe/ldpe.go
+@@ -6,6 +6,7 @@
+ package loadpe
+
+ import (
++ "bytes"
+ "cmd/internal/bio"
+ "cmd/internal/objabi"
+ "cmd/internal/sys"
+@@ -359,6 +360,9 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, input *bio.Read
+ if pesym.SectionNumber == IMAGE_SYM_DEBUG {
+ continue
+ }
++ if pesym.SectionNumber == IMAGE_SYM_ABSOLUTE && bytes.Equal(pesym.Name[:], []byte("@feat.00")) {
++ continue
++ }
+ var sect *pe.Section
+ if pesym.SectionNumber > 0 {
+ sect = f.Sections[pesym.SectionNumber-1]
+--
+2.29.1
+