From: Ulrich Drepper Date: Tue, 24 Jul 2001 06:48:43 +0000 (+0000) Subject: Initialize %fs, %gs, and floating-point status as well. X-Git-Tag: cvs/glibc-2_2_4~159 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=188356b8cca3cadc66664b8da11d342d45f95ff5;p=thirdparty%2Fglibc.git Initialize %fs, %gs, and floating-point status as well. --- diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S index 56b5537ce3a..1ca32339455 100644 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ b/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -40,6 +40,22 @@ ENTRY(__makecontext) movl oLINK(%eax), %ecx movl %ecx, -4(%edx) + /* Copy the FS and GS segment register. */ + xorl %ecx, %ecx + movw %gs, %cx + movl %ecx, oGS(%eax) + xorl %ecx, %ecx + movw %fs, %cx + movl %ecx, oFS(%eax) + + /* We have separate floating-point register content memory on the + stack. We use the __fpregs_mem block in the context. Set the + links up correctly. */ + leal oFPREGSMEM(%eax), %ecx + movl %ecx, oFPREGS(%eax) + /* Save the floating-point context. */ + fnstenv (%ecx) + /* Remember the number of parameters for the exit handler since it has to remove them. We store the number in the EBX register which the function we will call must preserve. */