mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-05 14:21:28 +08:00
runtime: mark dropm and callees nowritebarrierrec
The CgocallbackDone function calls dropm after it calls entersyscall, which means that dropm must not have any write barriers. Mark it accordingly. Reviewed-on: https://go-review.googlesource.com/46464 From-SVN: r249577
This commit is contained in:
parent
f384e12acc
commit
b34391e08e
@ -1,4 +1,4 @@
|
||||
55b2b2dee55bd495a770347daaf858634057ecb0
|
||||
c5aa42107d116c9121de447d214297c88dd9f5fa
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -32,6 +32,7 @@ func minit() {
|
||||
|
||||
// Called from dropm to undo the effect of an minit.
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func unminit() {
|
||||
unminitSignals()
|
||||
}
|
||||
|
@ -1447,6 +1447,9 @@ func oneNewExtraM() {
|
||||
// in which dropm happens on each cgo call, is still correct too.
|
||||
// We may have to keep the current version on systems with cgo
|
||||
// but without pthreads, like Windows.
|
||||
//
|
||||
// CgocallBackDone calls this after releasing p, so no write barriers.
|
||||
//go:nowritebarrierrec
|
||||
func dropm() {
|
||||
// Clear m and g, and return m to the extra list.
|
||||
// After the call to setg we can only call nosplit functions
|
||||
@ -1492,6 +1495,7 @@ var extraMWaiters uint32
|
||||
// return a nil list head if that's what it finds. If nilokay is false,
|
||||
// lockextra will keep waiting until the list head is no longer nil.
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func lockextra(nilokay bool) *m {
|
||||
const locked = 1
|
||||
|
||||
@ -1524,6 +1528,7 @@ func lockextra(nilokay bool) *m {
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func unlockextra(mp *m) {
|
||||
atomic.Storeuintptr(&extram, uintptr(unsafe.Pointer(mp)))
|
||||
}
|
||||
|
@ -599,6 +599,7 @@ func minitSignalMask() {
|
||||
// unminitSignals is called from dropm, via unminit, to undo the
|
||||
// effect of calling minit on a non-Go thread.
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func unminitSignals() {
|
||||
if getg().m.newSigstack {
|
||||
signalstack(nil, 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user