Update copyright dates with scripts/update-copyrights.
[glibc.git] / sysdeps / unix / sysv / linux / m68k / m680x0 / getcontext.S
blob7a86a3906caa7eb4db2974c6f0d81ada69f4ac81
1 /* Save current context.
2    Copyright (C) 2012-2015 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
19 #include <sysdep.h>
21 #include "ucontext_i.h"
24 ENTRY(__getcontext)
25         /* Load address of the context data structure.  */
26         move.l  4(%sp), %a0
28         /* Save the preserved registers and the return address.  */
29         movem.l %d2-%d7, oGREGS+2*4(%a0)
30         movem.l %a2-%a6, oGREGS+10*4(%a0)
31         lea     4(%sp), %a1
32         move.l  %a1, oSP(%a0)
33         move.l  (%sp), oPC(%a0)
34         fmovem.l %fpsr/%fpcr/%fpiar, oFPREGS(%a0)
35         fmovem.x %fp2-%fp7, oFP2(%a0)
36         cfi_def_cfa (%a0, 0)
37         cfi_offset (%d2, oGREGS+2*4)
38         cfi_offset (%d3, oGREGS+3*4)
39         cfi_offset (%pc, oPC)
41         /* Save the current signal mask.  */
42         lea     oSIGMASK(%a0), %a1
43         move.l  %a1, %d3
44         clr.l   %d2
45         move.l  #SIG_SETMASK, %d1
46         move.l  #__NR_sigprocmask, %d0
47         trap    #0
48         /* Restore registers.  */
49         move.l  oGREGS+2*4(%a0), %d2
50         cfi_restore (%d2)
51         move.l  oGREGS+3*4(%a0), %d3
52         cfi_restore (%d3)
53         cfi_def_cfa (%sp, 4)
54         cfi_offset (%pc, -4)
55         cmp.l   #-4095, %d0             /* Check %d0 for error.  */
56         jcc     SYSCALL_ERROR_LABEL     /* Jump to error handler.  */
58 0:      /* All done, return 0 for success.  */
59         clr.l   %d0
60         rts
61 PSEUDO_END(__getcontext)
63 weak_alias (__getcontext, getcontext)