If you set up a signal handler in pthreads and modify the struct sigcontext passed in, your changes to that struct are discarded. For instance, modifying context.eip to point to a new function works as you would expect in a non-pthreads app, but does not work in pthreads. Investigation shows that pthreads sets up its own signal handler that then copies the real struct sigcontext before passing it to the user sighandler. The user sighandler's struct sigcontext never makes it back to the kernel.
Should be fixed in glibc-2.2.2-7.