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