diff options
author | Quim Muntal <quimmuntal@gmail.com> | 2020-10-22 22:32:20 +0200 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2020-11-02 00:46:44 +0000 |
commit | e463c28cc116fb1f40a4e203bddf93b6ef52c8d9 (patch) | |
tree | c95ad0a618c0fd9882d4e2cc9914ec5cc7c73813 /misc | |
parent | 333d2010ec98aaea244b65b7bc4d7d80c71e21b1 (diff) | |
download | go-e463c28cc116fb1f40a4e203bddf93b6ef52c8d9.tar.gz go-e463c28cc116fb1f40a4e203bddf93b6ef52c8d9.zip |
cmd/link: avoid exporting all symbols on windows buildmode=pie
Marking one functions with __declspec(dllexport) forces mingw to
create .reloc section without having to export all symbols.
See https://insights.sei.cmu.edu/cert/2018/08/when-aslr-is-not-really-aslr---the-case-of-incorrect-assumptions-and-bad-defaults.html for more info.
This change cuts 73kb of a "hello world" pie binary.
Updates #6853
Fixes #40795
Change-Id: I3cc57c3b64f61187550bc8751dfa085f106c8475
Reviewed-on: https://go-review.googlesource.com/c/go/+/264459
Trust: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'misc')
-rw-r--r-- | misc/cgo/testcshared/cshared_test.go | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/misc/cgo/testcshared/cshared_test.go b/misc/cgo/testcshared/cshared_test.go index e1835afa51..3a4886cf30 100644 --- a/misc/cgo/testcshared/cshared_test.go +++ b/misc/cgo/testcshared/cshared_test.go @@ -401,7 +401,7 @@ func main() { defer f.Close() section := f.Section(".edata") if section == nil { - t.Error(".edata section is not present") + t.Fatalf(".edata section is not present") } // TODO: deduplicate this struct from cmd/link/internal/ld/pe.go @@ -418,7 +418,8 @@ func main() { t.Fatalf("binary.Read failed: %v", err) } - expectedNumber := uint32(2) + // Only the two exported functions and _cgo_dummy_export should be exported + expectedNumber := uint32(3) if exportAllSymbols { if e.NumberOfFunctions <= expectedNumber { @@ -429,10 +430,10 @@ func main() { } } else { if e.NumberOfFunctions != expectedNumber { - t.Fatalf("too many exported functions: %v", e.NumberOfFunctions) + t.Fatalf("got %d exported functions; want %d", e.NumberOfFunctions, expectedNumber) } if e.NumberOfNames != expectedNumber { - t.Fatalf("too many exported names: %v", e.NumberOfNames) + t.Fatalf("got %d exported names; want %d", e.NumberOfNames, expectedNumber) } } } |