This patch is a rewrite of the syscall package in the Go library. This rewrite moves it from libgo/syscalls to libgo/go/syscall, to more closely match the master Go library. More importantly, it changes most library calls to call new entersyscall and exitsyscall functions. These functions currently do nothing. However, they are a step toward multiplexing multiple goroutines onto a single thread, which will make the implementation of goroutines more efficient. When multiplexing goroutines, it is of course essential to know when a goroutine is calling a library function which may block. This patch makes that possible.
There are still some existing calls to possibly blocking library functions in other parts of the library. Those will also have to be updated. It's possible that this patch will once again break the Solaris and Irix support. I've tried to ensure that I didn't make any stupid errors, but I haven't done any actual testing. Sorry about any problems. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Ian
foo.patch.bz2
Description: patch