From 3cad25e4bdf1f7b93faa3b5a5a74f5b85748c41d Mon Sep 17 00:00:00 2001 From: chainhelen Date: Mon, 17 Aug 2020 22:21:44 +0800 Subject: [PATCH] runtime: Fix panic if newstack at runtime.acquireLockRank The function named `acquireLockRank` at `src/runtime/lockrank_on.go` with `go:nosplit`, but at `src/runtime/lockrank_off.go` without `go:nosplit`. GOEXPERIMENT="" in default, process will panic if newstack at runtime.acquireLockRank with `gcflags="all=-N -l"`. Similarly, function `lockWithRank`, `unlockWithRank`, `releaseLockRank` and `lockWithRankMayAcquire`. Fixes #40843 --- src/runtime/lockrank_off.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/runtime/lockrank_off.go b/src/runtime/lockrank_off.go index 425ca8dd93f680..197fb4b5ccd414 100644 --- a/src/runtime/lockrank_off.go +++ b/src/runtime/lockrank_off.go @@ -18,19 +18,24 @@ func getLockRank(l *mutex) lockRank { return 0 } +//go:nosplit func lockWithRank(l *mutex, rank lockRank) { lock2(l) } +//go:nosplit func acquireLockRank(rank lockRank) { } +//go:nosplit func unlockWithRank(l *mutex) { unlock2(l) } +//go:nosplit func releaseLockRank(rank lockRank) { } +//go:nosplit func lockWithRankMayAcquire(l *mutex, rank lockRank) { }