]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/unix/sh/sysdep.S
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / unix / sh / sysdep.S
1 /* Copyright (C) 1999-2023 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
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.
8
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.
13
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 <https://www.gnu.org/licenses/>. */
17
18 #include <sysdep.h>
19 #include <errno.h>
20
21 ENTRY(__syscall_error)
22 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
23 /* We translate the system's EWOULDBLOCK error into EAGAIN.
24 The GNU C library always defines EWOULDBLOCK==EAGAIN.
25 EWOULDBLOCK_sys is the original number. */
26 mov.l .L1, r1
27 cmp/eq r1, r0
28 bf skip
29 nop
30 mov.l .L2, r0
31 skip:
32 #endif
33 /* Store it in errno... */
34 #ifndef SHARED
35 #ifndef _LIBC_REENTRANT
36 mov.l .L3, r1
37 mov.l r0, @r1
38 #else
39 mov.l .L3, r1
40 sts.l pr, @-r15
41 cfi_adjust_cfa_offset (4)
42 cfi_rel_offset (pr, 0)
43 mov.l r0, @-r15
44 cfi_adjust_cfa_offset (4)
45 jsr @r1
46 nop
47 mov.l @r15+, r1
48 cfi_adjust_cfa_offset (-4)
49 lds.l @r15+, pr
50 cfi_adjust_cfa_offset (-4)
51 cfi_restore (pr)
52 mov.l r1, @r0
53 #endif
54 #else
55 mov.l r12, @-r15
56 cfi_adjust_cfa_offset (4)
57 cfi_rel_offset (r12, 0)
58 #ifndef _LIBC_REENTRANT
59 mov r0, r2
60 mov.l 0f, r12
61 mova 0f, r0
62 add r0, r12
63 mov.l .L3, r0
64 mov.l @(r0,r12), r1
65 mov.l r2, @r1
66 #else
67 mov.l r0, @-r15
68 cfi_adjust_cfa_offset (4)
69 sts.l pr, @-r15
70 cfi_adjust_cfa_offset (4)
71 cfi_rel_offset (pr, 0)
72 mov.l 0f, r12
73 mova 0f, r0
74 add r0, r12
75 mov.l .L3, r1
76 mova .L3, r0
77 add r0, r1
78 jsr @r1
79 nop
80 lds.l @r15+, pr
81 cfi_adjust_cfa_offset (-4)
82 cfi_restore (pr)
83 mov.l @r15+, r1
84 cfi_adjust_cfa_offset (-4)
85 mov.l r1, @r0
86 #endif
87 mov.l @r15+, r12
88 cfi_adjust_cfa_offset (-4)
89 cfi_restore (r12)
90 #endif
91 /* And just kick back a -1. */
92 rts
93 mov #-1, r0
94
95 .align 2
96 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
97 .L1: .long EWOULDBLOCK_sys
98 .L2: .long EAGAIN
99 #endif
100 #ifndef SHARED
101 #ifndef _LIBC_REENTRANT
102 .L3: .long C_SYMBOL_NAME(errno)
103 #else
104 .L3: .long C_SYMBOL_NAME(__errno_location)
105 #endif
106 #else
107 0:
108 .long _GLOBAL_OFFSET_TABLE_
109 #ifndef _LIBC_REENTRANT
110 .L3: .long C_SYMBOL_NAME(errno@GOT)
111 #else
112 .L3: .long C_SYMBOL_NAME(__errno_location@PLT)
113 #endif
114 #endif
115 END(__syscall_error)