Add CFI statements to ARM's assembly code.
[glibc.git] / sysdeps / unix / sysv / linux / arm / eabi / syscall.S
blobf6d775e0aadaae37feb339a9171654cadc6ab15a
1 /* Copyright (C) 2005, 2009 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, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
19 #include <sysdep.h>
21 /* In the EABI syscall interface, we don't need a special syscall to
22    implement syscall().  It won't work reliably with 64-bit arguments
23    (but that is true on many modern platforms).  */
25 ENTRY (syscall)
26         mov     ip, sp
27         stmfd   sp!, {r4, r5, r6, r7}
28         cfi_adjust_cfa_offset (16)
29         cfi_rel_offset (r4, 0)
30         cfi_rel_offset (r5, 4)
31         cfi_rel_offset (r6, 8)
32         cfi_rel_offset (r7, 12)
33         mov     r7, r0
34         mov     r0, r1
35         mov     r1, r2
36         mov     r2, r3
37         ldmfd   ip, {r3, r4, r5, r6}
38         swi     0x0
39         ldmfd   sp!, {r4, r5, r6, r7}
40         cfi_adjust_cfa_offset (-16)
41         cfi_restore (r4)
42         cfi_restore (r5)
43         cfi_restore (r6)
44         cfi_restore (r7)
45         cmn     r0, #4096
46         RETINSTR(cc, lr)
47         b       PLTJMP(syscall_error)
48 PSEUDO_END (syscall)