1
0
mirror of https://github.com/golang/go synced 2024-11-19 15:14:45 -07:00
go/src/runtime/os2_plan9.go
Russ Cox 5bfed7c6c0 runtime: log all thread stack traces during GODEBUG=crash on Linux and OS X
Normally, a panic/throw only shows the thread stack for the current thread
and all paused goroutines. Goroutines running on other threads, or other threads
running on their system stacks, are opaque. Change that when GODEBUG=crash,
by passing a SIGQUIT around to all the threads when GODEBUG=crash.
If this works out reasonably well, we might make the SIGQUIT relay part of
the standard panic/throw death, perhaps eliding idle m's.

Change-Id: If7dd354f7f3a6e326d17c254afcf4f7681af2f8b
Reviewed-on: https://go-review.googlesource.com/2811
Reviewed-by: Rick Hudson <rlh@golang.org>
2015-01-14 18:33:38 +00:00

75 lines
1.5 KiB
Go

// Copyright 2010 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.
// Plan 9-specific system calls
package runtime
// open
const (
_OREAD = 0
_OWRITE = 1
_ORDWR = 2
_OEXEC = 3
_OTRUNC = 16
_OCEXEC = 32
_ORCLOSE = 64
_OEXCL = 0x1000
)
// rfork
const (
_RFNAMEG = 1 << 0
_RFENVG = 1 << 1
_RFFDG = 1 << 2
_RFNOTEG = 1 << 3
_RFPROC = 1 << 4
_RFMEM = 1 << 5
_RFNOWAIT = 1 << 6
_RFCNAMEG = 1 << 10
_RFCENVG = 1 << 11
_RFCFDG = 1 << 12
_RFREND = 1 << 13
_RFNOMNT = 1 << 14
)
// notify
const (
_NCONT = 0
_NDFLT = 1
)
type uinptr _Plink
type tos struct {
prof struct { // Per process profiling
pp *_Plink // known to be 0(ptr)
next *_Plink // known to be 4(ptr)
last *_Plink
first *_Plink
pid uint32
what uint32
}
cyclefreq uint64 // cycle clock frequency if there is one, 0 otherwise
kcycles int64 // cycles spent in kernel
pcycles int64 // cycles spent in process (kernel + user)
pid uint32 // might as well put the pid here
clock uint32
// top of stack is here
}
const (
_NSIG = 14 // number of signals in sigtable array
_ERRMAX = 128 // max length of note string
// Notes in runtime·sigtab that are handled by runtime·sigpanic.
_SIGRFAULT = 2
_SIGWFAULT = 3
_SIGINTDIV = 4
_SIGFLOAT = 5
_SIGTRAP = 6
_SIGPROF = 0 // dummy value defined for badsignal
_SIGQUIT = 0 // dummy value defined for sighandler
)