]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link/internal/ld: align PE .text section to 32-byte when external linking
authorShenghou Ma <minux@golang.org>
Tue, 1 Sep 2015 23:58:31 +0000 (19:58 -0400)
committerMinux Ma <minux@golang.org>
Sun, 6 Sep 2015 01:14:18 +0000 (01:14 +0000)
Some symbols, for example, masks requires 16-byte alignment, and
they are placed in the text section. Before this change, the text
section is only aligned to 4-byte, and it's making masks unaligned.

Fixes #12415.

Change-Id: I7767778d1b4f7d3e74c2719a02848350782a4160
Reviewed-on: https://go-review.googlesource.com/14166
Run-TryBot: Minux Ma <minux@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
(cherry picked from commit 821e124c24c2b2d753be22a04a3b20b7bf579627)
Reviewed-on: https://go-review.googlesource.com/14279

src/cmd/link/internal/ld/pe.go

index d5f7e629895a9687b75a891a755ce1b71d91147e..4a7d7108561224d91de0e703a23da289422ccad6 100644 (file)
@@ -1107,6 +1107,11 @@ func Asmbpe() {
 
        t := addpesection(".text", int(Segtext.Length), int(Segtext.Length))
        t.Characteristics = IMAGE_SCN_CNT_CODE | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ
+       if Linkmode == LinkExternal {
+               // some data symbols (e.g. masks) end up in the .text section, and they normally
+               // expect larger alignment requirement than the default text section alignment.
+               t.Characteristics |= IMAGE_SCN_ALIGN_32BYTES
+       }
        chksectseg(t, &Segtext)
        textsect = pensect