mirror of
https://github.com/golang/go.git
synced 2025-05-30 19:52:53 +00:00
runtime: arrange to show a few local variables when cgoCheckUnknownPointer panics
For #13934. Change-Id: Id399e35598def96f8bb89b9fcd1bf14ee06e2e62 Reviewed-on: https://go-review.googlesource.com/18612 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
756088549f
commit
166cfd2c87
@ -498,7 +498,8 @@ func cgoCheckArg(t *_type, p unsafe.Pointer, indir, top bool, msg string) {
|
||||
// cgoCheckUnknownPointer is called for an arbitrary pointer into Go
|
||||
// memory. It checks whether that Go memory contains any other
|
||||
// pointer into Go memory. If it does, we panic.
|
||||
func cgoCheckUnknownPointer(p unsafe.Pointer, msg string) {
|
||||
// The return values are unused but useful to see in panic tracebacks.
|
||||
func cgoCheckUnknownPointer(p unsafe.Pointer, msg string) (base, i uintptr) {
|
||||
if cgoInRange(p, mheap_.arena_start, mheap_.arena_used) {
|
||||
if !inheap(uintptr(p)) {
|
||||
// This pointer is either to a stack or to an
|
||||
@ -508,12 +509,13 @@ func cgoCheckUnknownPointer(p unsafe.Pointer, msg string) {
|
||||
panic(errorString("cgo argument has invalid Go pointer"))
|
||||
}
|
||||
|
||||
base, hbits, span := heapBitsForObject(uintptr(p), 0, 0)
|
||||
b, hbits, span := heapBitsForObject(uintptr(p), 0, 0)
|
||||
base = b
|
||||
if base == 0 {
|
||||
return
|
||||
}
|
||||
n := span.elemsize
|
||||
for i := uintptr(0); i < n; i += sys.PtrSize {
|
||||
for i = uintptr(0); i < n; i += sys.PtrSize {
|
||||
bits := hbits.bits()
|
||||
if i >= 2*sys.PtrSize && bits&bitMarked == 0 {
|
||||
// No more possible pointers.
|
||||
@ -539,6 +541,8 @@ func cgoCheckUnknownPointer(p unsafe.Pointer, msg string) {
|
||||
// In the text or noptr sections, we know that the
|
||||
// pointer does not point to a Go pointer.
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// cgoIsGoPointer returns whether the pointer is a Go pointer--a
|
||||
|
Loading…
x
Reference in New Issue
Block a user