Hello, According to getcontext(3), the *context functions and the ucontext_t structure are defined in <ucontext.h>.
If you take this simple program: """ #define _GNU_SOURCE #include <ucontext.h> int main(void) { ucontext_t *ucontext; return ucontext->uc_mcontext.uc_regs->gregs[0]; } """ and build it with a uClibc-ng PowerPC toolchain, it will fail with: """ foo.c: In function 'main': foo.c:5:2: error: unknown type name 'ucontext_t' ucontext_t *ucontext; ... """ And indeed <ucontext.h> in uClibc-ng only includes <sys/ucontext.h> if __UCLIBC_HAS_CONTEXT_FUNCS__ is defined, which is not the case on PowerPC. And since <sys/ucontext.h> is where ucontext_t is defined, the build failure is expected. However, now, change the program to: """ #define _GNU_SOURCE #include <ucontext.h> #include <signal.h> int main(void) { ucontext_t *ucontext; return ucontext->uc_mcontext.uc_regs->gregs[0]; } """ i.e with just <signal.h> included. And now, it builds fine! Indeed <signal.h> includes <sys/ucontext.h> unconditionally, without taking care of __UCLIBC_HAS_CONTEXT_FUNCS__. This seems broken to me, as-is the fact that some ucontext structures are defined in a header file even if the platform doesn't support context functions. Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com _______________________________________________ devel mailing list devel@uclibc-ng.org http://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel