]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/unix/sysv/linux/i386/getcontext.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / i386 / getcontext.S
index 9db129f5a60f85d77cc001ab46a6e43726b67401..e21cc923f8a111c80c84d3c739b3e9dc116e2b6c 100644 (file)
@@ -1,5 +1,5 @@
 /* Save current context.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -14,9 +14,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
 
@@ -56,22 +55,29 @@ ENTRY(__getcontext)
        movl    %ecx, oFPREGS(%eax)
        /* Save the floating-point context.  */
        fnstenv (%ecx)
+       /* And load it right back since the processor changes the mask.
+          Intel thought this opcode to be used in interrupt handlers which
+          would block all exceptions.  */
+       fldenv  (%ecx)
 
        /* Save the current signal mask.  */
        pushl   %ebx
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (ebx, 0)
        leal    oSIGMASK(%eax), %edx
        xorl    %ecx, %ecx
        movl    $SIG_BLOCK, %ebx
        movl    $__NR_sigprocmask, %eax
        ENTER_KERNEL
        popl    %ebx
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (ebx)
        cmpl    $-4095, %eax            /* Check %eax for error.  */
        jae     SYSCALL_ERROR_LABEL     /* Jump to error handler if error.  */
 
        /* All done, return 0 for success.  */
        xorl    %eax, %eax
-L(pseudo_end):
        ret
 PSEUDO_END(__getcontext)
 
-weak_alias(__getcontext, getcontext)
+weak_alias (__getcontext, getcontext)