Update copyright notices with scripts/update-copyrights
[glibc.git] / ports / sysdeps / unix / sysv / linux / arm / syscall.S
blobc5582f82fdbfaeb7c993bff83b630935b6fc7905
1 /* Copyright (C) 2005-2014 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library.  If not, see
16    <http://www.gnu.org/licenses/>.  */
18 #include <sysdep.h>
20 /* In the EABI syscall interface, we don't need a special syscall to
21    implement syscall().  It won't work reliably with 64-bit arguments
22    (but that is true on many modern platforms).  */
24 ENTRY (syscall)
25         mov     ip, sp
26         push    {r4, r5, r6, r7}
27         cfi_adjust_cfa_offset (16)
28         cfi_rel_offset (r4, 0)
29         cfi_rel_offset (r5, 4)
30         cfi_rel_offset (r6, 8)
31         cfi_rel_offset (r7, 12)
32         mov     r7, r0
33         mov     r0, r1
34         mov     r1, r2
35         mov     r2, r3
36         ldmfd   ip, {r3, r4, r5, r6}
37         swi     0x0
38         pop     {r4, r5, r6, r7}
39         cfi_adjust_cfa_offset (-16)
40         cfi_restore (r4)
41         cfi_restore (r5)
42         cfi_restore (r6)
43         cfi_restore (r7)
44         cmn     r0, #4096
45         it      cc
46         RETINSTR(cc, lr)
47         b       PLTJMP(syscall_error)
48 PSEUDO_END (syscall)