]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sh/sysdep.S
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / unix / sh / sysdep.S
CommitLineData
2b778ceb 1/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
3846ef75
UD
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
41bdb6e2
AJ
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.
3846ef75
UD
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
41bdb6e2 12 Lesser General Public License for more details.
3846ef75 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6 15 License along with the GNU C Library; if not, see
5a82c748 16 <https://www.gnu.org/licenses/>. */
3846ef75
UD
17
18#include <sysdep.h>
fcb78a55 19#include <errno.h>
3846ef75
UD
20
21ENTRY(__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
31skip:
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
db0a00d3
UD
41 cfi_adjust_cfa_offset (4)
42 cfi_rel_offset (pr, 0)
65a4de4e 43 mov.l r0, @-r15
db0a00d3 44 cfi_adjust_cfa_offset (4)
65a4de4e
CLT
45 jsr @r1
46 nop
3846ef75 47 mov.l @r15+, r1
db0a00d3 48 cfi_adjust_cfa_offset (-4)
3846ef75 49 lds.l @r15+, pr
db0a00d3 50 cfi_adjust_cfa_offset (-4)
65a4de4e 51 cfi_restore (pr)
3846ef75
UD
52 mov.l r1, @r0
53#endif
54#else
55 mov.l r12, @-r15
db0a00d3
UD
56 cfi_adjust_cfa_offset (4)
57 cfi_rel_offset (r12, 0)
3846ef75
UD
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
db0a00d3 68 cfi_adjust_cfa_offset (4)
3846ef75 69 sts.l pr, @-r15
db0a00d3
UD
70 cfi_adjust_cfa_offset (4)
71 cfi_rel_offset (pr, 0)
3846ef75
UD
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
65a4de4e
CLT
81 cfi_adjust_cfa_offset (-4)
82 cfi_restore (pr)
3846ef75 83 mov.l @r15+, r1
65a4de4e 84 cfi_adjust_cfa_offset (-4)
3846ef75
UD
85 mov.l r1, @r0
86#endif
87 mov.l @r15+, r12
65a4de4e
CLT
88 cfi_adjust_cfa_offset (-4)
89 cfi_restore (r12)
3846ef75
UD
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
1070:
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
115END(__syscall_error)