summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-01-27 23:45:46 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-01-27 23:45:46 +0000
commitf6acbd0805c24bb68ca2c88be26e770995cb4fa2 (patch)
tree4ffe6d6bcf7b916038593a991f465d2277985386
parentd779dffc4b6ec69cb51b426f779eca4bc37fd063 (diff)
downloadgcc-f6acbd0805c24bb68ca2c88be26e770995cb4fa2.tar.gz
libgo: update to Go1.10rc1
Reviewed-on: https://go-review.googlesource.com/90295 From-SVN: r257127
-rw-r--r--libgo/go/cmd/go/testdata/src/coverdot1/p.go3
-rw-r--r--libgo/go/cmd/go/testdata/src/coverdot2/p.go5
-rw-r--r--libgo/go/cmd/go/testdata/src/coverdot2/p_test.go7
-rw-r--r--libgo/go/runtime/testdata/testprog/badtraceback.go47
4 files changed, 62 insertions, 0 deletions
diff --git a/libgo/go/cmd/go/testdata/src/coverdot1/p.go b/libgo/go/cmd/go/testdata/src/coverdot1/p.go
new file mode 100644
index 00000000000..cda364f9292
--- /dev/null
+++ b/libgo/go/cmd/go/testdata/src/coverdot1/p.go
@@ -0,0 +1,3 @@
+package coverdot1
+
+func F() {}
diff --git a/libgo/go/cmd/go/testdata/src/coverdot2/p.go b/libgo/go/cmd/go/testdata/src/coverdot2/p.go
new file mode 100644
index 00000000000..80f79aec838
--- /dev/null
+++ b/libgo/go/cmd/go/testdata/src/coverdot2/p.go
@@ -0,0 +1,5 @@
+package coverdot2
+
+import . "coverdot1"
+
+func G() { F() }
diff --git a/libgo/go/cmd/go/testdata/src/coverdot2/p_test.go b/libgo/go/cmd/go/testdata/src/coverdot2/p_test.go
new file mode 100644
index 00000000000..da66e3e7af2
--- /dev/null
+++ b/libgo/go/cmd/go/testdata/src/coverdot2/p_test.go
@@ -0,0 +1,7 @@
+package coverdot2
+
+import "testing"
+
+func TestG(t *testing.T) {
+ G()
+}
diff --git a/libgo/go/runtime/testdata/testprog/badtraceback.go b/libgo/go/runtime/testdata/testprog/badtraceback.go
new file mode 100644
index 00000000000..d558adceec3
--- /dev/null
+++ b/libgo/go/runtime/testdata/testprog/badtraceback.go
@@ -0,0 +1,47 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "runtime"
+ "runtime/debug"
+ "unsafe"
+)
+
+func init() {
+ register("BadTraceback", BadTraceback)
+}
+
+func BadTraceback() {
+ // Disable GC to prevent traceback at unexpected time.
+ debug.SetGCPercent(-1)
+
+ // Run badLR1 on its own stack to minimize the stack size and
+ // exercise the stack bounds logic in the hex dump.
+ go badLR1()
+ select {}
+}
+
+//go:noinline
+func badLR1() {
+ // We need two frames on LR machines because we'll smash this
+ // frame's saved LR.
+ badLR2(0)
+}
+
+//go:noinline
+func badLR2(arg int) {
+ // Smash the return PC or saved LR.
+ lrOff := unsafe.Sizeof(uintptr(0))
+ if runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le" {
+ lrOff = 32 // FIXED_FRAME or sys.MinFrameSize
+ }
+ lrPtr := (*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&arg)) - lrOff))
+ *lrPtr = 0xbad
+
+ // Print a backtrace. This should include diagnostics for the
+ // bad return PC and a hex dump.
+ panic("backtrace")
+}