mirror of
https://github.com/golang/go
synced 2024-11-23 23:50:08 -07:00
runtime: mark {g,m,p}uintptr methods as nosplit
These are methods that are "obviously" going to get inlined -- until you build with -l, when they can trigger a stack split at a bad time. Fixes #11482 Change-Id: Ia065c385978a2e7fe9f587811991d088c4d68325 Reviewed-on: https://go-review.googlesource.com/17165 Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
ecf388f3a4
commit
239273d963
@ -122,20 +122,31 @@ func efaceOf(ep *interface{}) *eface {
|
||||
// alternate arena. Using guintptr doesn't make that problem any worse.
|
||||
type guintptr uintptr
|
||||
|
||||
func (gp guintptr) ptr() *g { return (*g)(unsafe.Pointer(gp)) }
|
||||
//go:nosplit
|
||||
func (gp guintptr) ptr() *g { return (*g)(unsafe.Pointer(gp)) }
|
||||
|
||||
//go:nosplit
|
||||
func (gp *guintptr) set(g *g) { *gp = guintptr(unsafe.Pointer(g)) }
|
||||
|
||||
//go:nosplit
|
||||
func (gp *guintptr) cas(old, new guintptr) bool {
|
||||
return atomic.Casuintptr((*uintptr)(unsafe.Pointer(gp)), uintptr(old), uintptr(new))
|
||||
}
|
||||
|
||||
type puintptr uintptr
|
||||
|
||||
func (pp puintptr) ptr() *p { return (*p)(unsafe.Pointer(pp)) }
|
||||
//go:nosplit
|
||||
func (pp puintptr) ptr() *p { return (*p)(unsafe.Pointer(pp)) }
|
||||
|
||||
//go:nosplit
|
||||
func (pp *puintptr) set(p *p) { *pp = puintptr(unsafe.Pointer(p)) }
|
||||
|
||||
type muintptr uintptr
|
||||
|
||||
func (mp muintptr) ptr() *m { return (*m)(unsafe.Pointer(mp)) }
|
||||
//go:nosplit
|
||||
func (mp muintptr) ptr() *m { return (*m)(unsafe.Pointer(mp)) }
|
||||
|
||||
//go:nosplit
|
||||
func (mp *muintptr) set(m *m) { *mp = muintptr(unsafe.Pointer(m)) }
|
||||
|
||||
type gobuf struct {
|
||||
|
Loading…
Reference in New Issue
Block a user