libgo: update to Go 1.8 release candidate 1
Compiler changes: * Change map assignment to use mapassign and assign value directly. * Change string iteration to use decoderune, faster for ASCII strings. * Change makeslice to take int, and use makeslice64 for larger values. * Add new noverflow field to hmap struct used for maps. Unresolved problems, to be fixed later: * Commented out test in go/types/sizes_test.go that doesn't compile. * Commented out reflect.TestStructOf test for padding after zero-sized field. Reviewed-on: https://go-review.googlesource.com/35231 gotools/: Updates for Go 1.8rc1. * Makefile.am (go_cmd_go_files): Add bug.go. (s-zdefaultcc): Write defaultPkgConfig. * Makefile.in: Rebuild. From-SVN: r244456
This commit is contained in:
parent
829afb8f05
commit
c2047754c3
983 changed files with 69318 additions and 17662 deletions
|
@ -4,7 +4,10 @@
|
|||
|
||||
package runtime
|
||||
|
||||
import "unsafe"
|
||||
import (
|
||||
"runtime/internal/atomic"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// For gccgo, use go:linkname to rename compiler-called functions to
|
||||
// themselves, so that the compiler will export them.
|
||||
|
@ -41,6 +44,36 @@ func bytes(s string) (ret []byte) {
|
|||
return
|
||||
}
|
||||
|
||||
var (
|
||||
// printBacklog is a circular buffer of messages written with the builtin
|
||||
// print* functions, for use in postmortem analysis of core dumps.
|
||||
printBacklog [512]byte
|
||||
printBacklogIndex int
|
||||
)
|
||||
|
||||
// recordForPanic maintains a circular buffer of messages written by the
|
||||
// runtime leading up to a process crash, allowing the messages to be
|
||||
// extracted from a core dump.
|
||||
//
|
||||
// The text written during a process crash (following "panic" or "fatal
|
||||
// error") is not saved, since the goroutine stacks will generally be readable
|
||||
// from the runtime datastructures in the core file.
|
||||
func recordForPanic(b []byte) {
|
||||
printlock()
|
||||
|
||||
if atomic.Load(&panicking) == 0 {
|
||||
// Not actively crashing: maintain circular buffer of print output.
|
||||
for i := 0; i < len(b); {
|
||||
n := copy(printBacklog[printBacklogIndex:], b[i:])
|
||||
i += n
|
||||
printBacklogIndex += n
|
||||
printBacklogIndex %= len(printBacklog)
|
||||
}
|
||||
}
|
||||
|
||||
printunlock()
|
||||
}
|
||||
|
||||
var debuglock mutex
|
||||
|
||||
// The compiler emits calls to printlock and printunlock around
|
||||
|
@ -75,6 +108,7 @@ func gwrite(b []byte) {
|
|||
if len(b) == 0 {
|
||||
return
|
||||
}
|
||||
recordForPanic(b)
|
||||
gp := getg()
|
||||
if gp == nil || gp.writebuf == nil {
|
||||
writeErr(b)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue