From f6acbd0805c24bb68ca2c88be26e770995cb4fa2 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 27 Jan 2018 23:45:46 +0000 Subject: [PATCH] libgo: update to Go1.10rc1 Reviewed-on: https://go-review.googlesource.com/90295 From-SVN: r257127 --- libgo/go/cmd/go/testdata/src/coverdot1/p.go | 3 ++ libgo/go/cmd/go/testdata/src/coverdot2/p.go | 5 ++ .../cmd/go/testdata/src/coverdot2/p_test.go | 7 +++ .../runtime/testdata/testprog/badtraceback.go | 47 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 libgo/go/cmd/go/testdata/src/coverdot1/p.go create mode 100644 libgo/go/cmd/go/testdata/src/coverdot2/p.go create mode 100644 libgo/go/cmd/go/testdata/src/coverdot2/p_test.go create mode 100644 libgo/go/runtime/testdata/testprog/badtraceback.go 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") +} -- 2.30.2