OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [glibc/] [sysdeps/] [unix/] [sysv/] [linux/] [riscv/] [sysdep.h] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
/* Copyright (C) 2011-2014
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
#ifndef _LINUX_RISCV_SYSDEP_H
19
#define _LINUX_RISCV_SYSDEP_H 1
20
 
21
#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
22
#include <tls.h>
23
 
24
#ifdef __ASSEMBLER__
25
 
26
#include <sys/asm.h>
27
 
28
#define ENTRY(name) LEAF(name)
29
 
30
#undef PSEUDO_END
31
#define PSEUDO_END(sym) END(sym)
32
 
33
#define PSEUDO_NOERRNO(name, syscall_name, args)        \
34
  .align 2;                                             \
35
  ENTRY(name)                                           \
36
  li a7, SYS_ify(syscall_name);                         \
37
  scall
38
 
39
#define ret_NOERRNO ret
40
 
41
#define PSEUDO_ERRVAL(name, syscall_name, args) \
42
  PSEUDO_NOERRNO(name, syscall_name, args)
43
 
44
#define ret_ERRVAL ret
45
 
46
#define r0      a0
47
#define r1      a1
48
#define MOVE(x,y)       move y , x
49
 
50
#define L(label) .L ## label
51
 
52
#define PSEUDO(name, syscall_name, args) \
53
  .align 2;                                                     \
54
  99: j __syscall_error;                                        \
55
  ENTRY(name)                                                   \
56
  li a7, SYS_ify(syscall_name);                                 \
57
  scall;                                                        \
58
  bltz a0, 99b;                                                 \
59
L(syse1):
60
 
61
#endif /* __ASSEMBLER__ */
62
 
63
#include <sysdeps/unix/sysdep.h>
64
 
65
#undef SYS_ify
66
#define SYS_ify(syscall_name)   __NR_##syscall_name
67
 
68
#ifndef __ASSEMBLER__
69
 
70
/* Define a macro which expands into the inline wrapper code for a system
71
   call.  */
72
#undef INLINE_SYSCALL
73
#define INLINE_SYSCALL(name, nr, args...)                               \
74
  ({ INTERNAL_SYSCALL_DECL(err);                                        \
75
     long result_var = INTERNAL_SYSCALL (name, err, nr, args);          \
76
     if (result_var < 0)                                         \
77
       {                                                                \
78
         /* __syscall_error handles result_var <= -4096 corner case */  \
79
         extern long __syscall_error (long) attribute_hidden;           \
80
         result_var = __syscall_error (result_var);                     \
81
       }                                                                \
82
     result_var; })
83
 
84
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
85
 
86
#define INTERNAL_SYSCALL_ERROR_P(val, err)   ((unsigned long) (val) > -4096UL)
87
 
88
#define INTERNAL_SYSCALL_ERRNO(val, err)     (-val)
89
 
90
#define INTERNAL_SYSCALL(name, err, nr, args...) \
91
        internal_syscall##nr (SYS_ify (name), err, args)
92
 
93
#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
94
        internal_syscall##nr (number, err, args)
95
 
96
#define internal_syscall0(number, err, dummy...)                        \
97
({                                                                      \
98
        long _sys_result;                                               \
99
                                                                        \
100
        {                                                               \
101
        register long __a7 asm("a7") = number;                          \
102
        register long __a0 asm("a0");                                   \
103
        __asm__ volatile (                                              \
104
        "scall\n\t"                                                     \
105
        : "=r" (__a0)                                                   \
106
        : "r" (__a7)                                                    \
107
        : __SYSCALL_CLOBBERS);                                          \
108
        _sys_result = __a0;                                             \
109
        }                                                               \
110
        _sys_result;                                                    \
111
})
112
 
113
#define internal_syscall1(number, err, arg0)                            \
114
({                                                                      \
115
        long _sys_result;                                               \
116
                                                                        \
117
        {                                                               \
118
        register long __a7 asm("a7") = number;                          \
119
        register long __a0 asm("a0") = (long) (arg0);                   \
120
        __asm__ volatile (                                              \
121
        "scall\n\t"                                                     \
122
        : "+r" (__a0)                                                   \
123
        : "r" (__a7)                                                    \
124
        : __SYSCALL_CLOBBERS);                                          \
125
        _sys_result = __a0;                                             \
126
        }                                                               \
127
        _sys_result;                                                    \
128
})
129
 
130
#define internal_syscall2(number, err, arg0, arg1)                      \
131
({                                                                      \
132
        long _sys_result;                                               \
133
                                                                        \
134
        {                                                               \
135
        register long __a7 asm("a7") = number;                          \
136
        register long __a0 asm("a0") = (long) (arg0);                   \
137
        register long __a1 asm("a1") = (long) (arg1);                   \
138
        __asm__ volatile (                                              \
139
        "scall\n\t"                                                     \
140
        : "+r" (__a0)                                                   \
141
        : "r" (__a7), "r"(__a1)                                         \
142
        : __SYSCALL_CLOBBERS);                                          \
143
        _sys_result = __a0;                                             \
144
        }                                                               \
145
        _sys_result;                                                    \
146
})
147
 
148
#define internal_syscall3(number, err, arg0, arg1, arg2)                \
149
({                                                                      \
150
        long _sys_result;                                               \
151
                                                                        \
152
        {                                                               \
153
        register long __a7 asm("a7") = number;                          \
154
        register long __a0 asm("a0") = (long) (arg0);                   \
155
        register long __a1 asm("a1") = (long) (arg1);                   \
156
        register long __a2 asm("a2") = (long) (arg2);                   \
157
        __asm__ volatile (                                              \
158
        "scall\n\t"                                                     \
159
        : "+r" (__a0)                                                   \
160
        : "r" (__a7), "r"(__a1), "r"(__a2)                              \
161
        : __SYSCALL_CLOBBERS);                                          \
162
        _sys_result = __a0;                                             \
163
        }                                                               \
164
        _sys_result;                                                    \
165
})
166
 
167
#define internal_syscall4(number, err, arg0, arg1, arg2, arg3)    \
168
({                                                                      \
169
        long _sys_result;                                               \
170
                                                                        \
171
        {                                                               \
172
        register long __a7 asm("a7") = number;                          \
173
        register long __a0 asm("a0") = (long) (arg0);                   \
174
        register long __a1 asm("a1") = (long) (arg1);                   \
175
        register long __a2 asm("a2") = (long) (arg2);                   \
176
        register long __a3 asm("a3") = (long) (arg3);                   \
177
        __asm__ volatile (                                              \
178
        "scall\n\t"                                                     \
179
        : "+r" (__a0)                                                   \
180
        : "r" (__a7), "r"(__a1), "r"(__a2), "r"(__a3)                   \
181
        : __SYSCALL_CLOBBERS);                                          \
182
        _sys_result = __a0;                                             \
183
        }                                                               \
184
        _sys_result;                                                    \
185
})
186
 
187
#define internal_syscall5(number, err, arg0, arg1, arg2, arg3, arg4)    \
188
({                                                                      \
189
        long _sys_result;                                               \
190
                                                                        \
191
        {                                                               \
192
        register long __a7 asm("a7") = number;                          \
193
        register long __a0 asm("a0") = (long) (arg0);                   \
194
        register long __a1 asm("a1") = (long) (arg1);                   \
195
        register long __a2 asm("a2") = (long) (arg2);                   \
196
        register long __a3 asm("a3") = (long) (arg3);                   \
197
        register long __a4 asm("a4") = (long) (arg4);                   \
198
        __asm__ volatile (                                              \
199
        "scall\n\t"                                                     \
200
        : "+r" (__a0)                                                   \
201
        : "r" (__a7), "r"(__a1), "r"(__a2), "r"(__a3), "r"(__a4)        \
202
        : __SYSCALL_CLOBBERS);                                          \
203
        _sys_result = __a0;                                             \
204
        }                                                               \
205
        _sys_result;                                                    \
206
})
207
 
208
#define internal_syscall6(number, err, arg0, arg1, arg2, arg3, arg4, arg5) \
209
({                                                                      \
210
        long _sys_result;                                               \
211
                                                                        \
212
        {                                                               \
213
        register long __a7 asm("a7") = number;                          \
214
        register long __a0 asm("a0") = (long) (arg0);                   \
215
        register long __a1 asm("a1") = (long) (arg1);                   \
216
        register long __a2 asm("a2") = (long) (arg2);                   \
217
        register long __a3 asm("a3") = (long) (arg3);                   \
218
        register long __a4 asm("a4") = (long) (arg4);                   \
219
        register long __a5 asm("a5") = (long) (arg5);                   \
220
        __asm__ volatile (                                              \
221
        "scall\n\t"                                                     \
222
        : "+r" (__a0)                                                   \
223
        : "r" (__a7), "r"(__a1), "r"(__a2), "r"(__a3), "r"(__a4), "r"(__a5)     \
224
        : __SYSCALL_CLOBBERS);                                          \
225
        _sys_result = __a0;                                             \
226
        }                                                               \
227
        _sys_result;                                                    \
228
})
229
 
230
#define internal_syscall7(number, err, arg0, arg1, arg2, arg3, arg4, arg5, arg6) \
231
({                                                                      \
232
        long _sys_result;                                               \
233
                                                                        \
234
        {                                                               \
235
        register long __a7 asm("a7") = number;                          \
236
        register long __a0 asm("a0") = (long) (arg0);                   \
237
        register long __a1 asm("a1") = (long) (arg1);                   \
238
        register long __a2 asm("a2") = (long) (arg2);                   \
239
        register long __a3 asm("a3") = (long) (arg3);                   \
240
        register long __a4 asm("a4") = (long) (arg4);                   \
241
        register long __a5 asm("a5") = (long) (arg5);                   \
242
        register long __a6 asm("a6") = (long) (arg6);                   \
243
        __asm__ volatile (                                              \
244
        "scall\n\t"                                                     \
245
        : "+r" (__a0)                                                   \
246
        : "r" (__a7), "r"(__a1), "r"(__a2), "r"(__a3), "r"(__a4), "r"(__a5), "r"(__a6)  \
247
        : __SYSCALL_CLOBBERS);                                          \
248
        _sys_result = __a0;                                             \
249
        }                                                               \
250
        _sys_result;                                                    \
251
})
252
 
253
#define __SYSCALL_CLOBBERS "memory"
254
#endif /* ! __ASSEMBLER__ */
255
 
256
/* Pointer mangling is not supported.  */
257
#define PTR_MANGLE(var) (void) (var)
258
#define PTR_DEMANGLE(var) (void) (var)
259
 
260
#endif /* linux/mips/sysdep.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.