| // Copyright 2009 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. | |
| package syscall | |
| // AllThreadsSyscall performs a syscall on each OS thread of the Go | |
| // runtime. It first invokes the syscall on one thread. Should that | |
| // invocation fail, it returns immediately with the error status. | |
| // Otherwise, it invokes the syscall on all of the remaining threads | |
| // in parallel. It will terminate the program if it observes any | |
| // invoked syscall's return value differs from that of the first | |
| // invocation. | |
| // | |
| // AllThreadsSyscall is intended for emulating simultaneous | |
| // process-wide state changes that require consistently modifying | |
| // per-thread state of the Go runtime. | |
| // | |
| // AllThreadsSyscall is unaware of any threads that are launched | |
| // explicitly by cgo linked code, so the function always returns | |
| // ENOTSUP in binaries that use cgo. | |
| // | |
| //go:uintptrescapes | |
| func AllThreadsSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) { | |
| return minus1, minus1, ENOTSUP | |
| } | |
| // AllThreadsSyscall6 is like AllThreadsSyscall, but extended to six | |
| // arguments. | |
| // | |
| //go:uintptrescapes | |
| func AllThreadsSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) { | |
| return minus1, minus1, ENOTSUP | |
| } | |
| const minus1 = ^uintptr(0) |