OSDN Git Service

Replace FSF snail mail address with URLs
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / mips / syscall_error.S
1 /* Copyright (C) 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2002, 2003
2    Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Brendan Kehoe (brendan@zen.org).
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, see
18    <http://www.gnu.org/licenses/>.  */
19
20 #include <sys/asm.h>
21 #include <sysdep.h>
22 #include <bits/errno.h>
23
24 #ifdef _LIBC_REENTRANT
25
26 LOCALSZ= 3
27 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
28 RAOFF= FRAMESZ-(1*SZREG)
29 GPOFF= FRAMESZ-(2*SZREG)
30 V0OFF= FRAMESZ-(3*SZREG)
31
32 ENTRY(__syscall_error)
33 #ifdef __PIC__
34         .set noat
35         SETUP_GPX (AT)
36         .set at
37 #endif
38         PTR_SUBU sp, FRAMESZ
39         .set noat
40         SETUP_GPX64(GPOFF,AT)
41         .set at
42 #ifdef __PIC__
43         SAVE_GP(GPOFF)
44 #endif
45         REG_S   a0, V0OFF(sp)
46         REG_S   ra, RAOFF(sp)
47
48         /* Find our per-thread errno address  */
49         jal     __errno_location
50
51         /* Store the error value.  */
52         REG_L   t0, V0OFF(sp)
53         sw      t0, 0(v0)
54
55         /* And just kick back a -1.  */
56         REG_L   ra, RAOFF(sp)
57         RESTORE_GP64
58         PTR_ADDU sp, FRAMESZ
59         li      v0, -1
60         j       ra
61         END(__syscall_error)
62
63 #else /* __LIBC_REENTRANT */
64
65
66 ENTRY(__syscall_error)
67 #ifdef __PIC__
68         .set noat
69         SETUP_GPX (AT)
70         .set at
71 #endif
72         SETUP_GPX64 (t9, AT)
73
74         /* Store it in errno... */
75         sw v0, errno
76
77         /* And just kick back a -1.  */
78         li v0, -1
79
80         RESTORE_GP64
81         j ra
82         END(__syscall_error)
83 #endif  /* _LIBC_REENTRANT*/