At the moment ARM eglibc doesn't support the functions declared in ucontext.h: getcontext(), setcontext(), swapcontext() and makecontext(). Instead you get implementations which always fail and set errno to ENOSYS.
QEMU uses these functions to implement coroutines. Although there is a fallback implementation in terms of threads, there are reasons why using the fallback is suboptimal: * its performance is worse * it will be less tested, because x86_64 and i386 both implement the ucontext functions and so QEMU on those hosts will be using different code paths * I'm not aware of a good way at configure time to detect whether getcontext() et al will always fail without actually running a test binary, which won't work in a cross-compile setup. (If eglibc just didn't provide the functions at all this would be much simpler...)
We're going to care about performance and reliability of QEMU on ARM hosts as we start to support KVM on Cortex-A15, so it would be good if we could add ucontext function support to eglibc as part of that effort.
Opinions? Have I missed some good reason why there isn't an ARM implementation of these functions?
(I'm aware that the ucontext functions have been removed from the latest version of the POSIX spec; however AFAIK there's no equivalent functionality that replaces them so I think they're still worth having implementations of for parity with other architectures.)
-- PMM