aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/proc_test.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2019-07-16 11:33:10 -0400
committerCherry Zhang <cherryyz@google.com>2019-07-16 20:53:01 +0000
commit2bcbe6a4b6bc74ad9a1de159058e452c4d9d92cb (patch)
treee708ec02fe5fabd57792dc51aed8c423090e3a88 /src/runtime/proc_test.go
parent6bf2767cc87f9f6a1b85cdc18c656fade735f27f (diff)
downloadgo-2bcbe6a4b6bc74ad9a1de159058e452c4d9d92cb.tar.gz
go-2bcbe6a4b6bc74ad9a1de159058e452c4d9d92cb.zip
runtime: add a test for getg with thread switch
With gccgo, if we generate getg inlined, the backend may cache the address of the TLS variable, which will become invalid after a thread switch. Currently there is no known bug for this. But if we didn't implement this carefully, we may get subtle bugs. This CL adds a test that will fail loudly if this is wrong. (See also https://go.googlesource.com/gofrontend/+/refs/heads/master/libgo/runtime/proc.c#333 and an incorrect attempt CL 185337.) Note: at least on Linux/AMD64, even with an incorrect implementation, this only fails if the test is compiled with -fPIC, which is not the default setting for gccgo test suite. So some manual work is needed. Maybe we could extend the test suite to run the runtime test with more settings (e.g. PIC and static). Change-Id: I459a3b4c31f09b9785c0eca19b7756f80e8ef54c Reviewed-on: https://go-review.googlesource.com/c/go/+/186357 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/runtime/proc_test.go')
-rw-r--r--src/runtime/proc_test.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/runtime/proc_test.go b/src/runtime/proc_test.go
index 09b0652bee..6e6272e80a 100644
--- a/src/runtime/proc_test.go
+++ b/src/runtime/proc_test.go
@@ -977,3 +977,7 @@ func TestPreemptionAfterSyscall(t *testing.T) {
})
}
}
+
+func TestGetgThreadSwitch(t *testing.T) {
+ runtime.RunGetgThreadSwitchTest()
+}