2001-07-31 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/i386/getcontext.S: Don't touch the %gs
+ register so that contexts can be used in different threads.
+ * sysdeps/unix/sysv/linux/i386/setcontext.S: Likewise.
+ * sysdeps/unix/sysv/linux/i386/swapcontext.S: Likewise.
+
* sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Correct
test for cmsg struct size.
* sysdeps/unix/sysv/linux/bits/socket.h (__cmsg_nxthdr): Likewise.
2001-07-31 Ulrich Drepper <drepper@redhat.com>
+ * tst-context.c (threadfct): Initialize context before calling
+ makecontext.
+
* Examples/ex17.c: Make sure test thread is around long enough.
2001-07-26 kaz Kojima <kkojima@rr.iij4u.or.jp>
movl %ecx, oESP(%eax)
movl %ebx, oEBX(%eax)
- /* Save the FS and GS segment register. */
+ /* Save the FS segment register. We don't touch the GS register
+ since it is used for threads. */
xorl %edx, %edx
- xorl %ecx, %ecx
- movw %gs, %dx
- movw %fs, %cx
- movl %edx, oGS(%eax)
- movl %ecx, oFS(%eax)
+ movw %fs, %dx
+ movl %edx, oFS(%eax)
/* We have separate floating-point register content memory on the
stack. We use the __fpregs_mem block in the context. Set the
movl oFPREGS(%eax), %ecx
fldenv (%ecx)
- /* Restore the FS and GS segment registers. */
- movl oGS(%eax), %edx
+ /* Restore the FS segment register. We don't touch the GS register
+ since it is used for threads. */
movl oFS(%eax), %ecx
- movw %dx, %gs
movw %cx, %fs
/* Load the new stack pointer. */
movl %ecx, oESP(%eax)
movl %ebx, oEBX(%eax)
- /* Save the FS and GS segment register. */
+ /* Save the FS segment register. */
xorl %edx, %edx
- xorl %ecx, %ecx
- movw %gs, %dx
- movw %fs, %cx
- movl %edx, oGS(%eax)
- movl %ecx, oFS(%eax)
+ movw %fs, %dx
+ movl %edx, oFS(%eax)
/* We have separate floating-point register content memory on the
stack. We use the __fpregs_mem block in the context. Set the
movl oFPREGS(%eax), %ecx
fldenv (%ecx)
- /* Restore the FS and GS segment registers. */
- movl oGS(%eax), %edx
- movl oFS(%eax), %ecx
- movw %dx, %gs
- movw %cx, %fs
+ /* Restore the FS segment registers. */
+ movl oFS(%eax), %edx
+ movw %dx, %fs
/* Load the new stack pointer. */
movl oESP(%eax), %ecx