| // 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) |