1 //=============================================================================
3 // syscall-i386-linux-1.0.S
5 // Linux system call interface functions for i386.
7 //=============================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 2005 eCosCentric Ltd.
12 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
14 // eCos is free software; you can redistribute it and/or modify it under
15 // the terms of the GNU General Public License as published by the Free
16 // Software Foundation; either version 2 or (at your option) any later version.
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 // You should have received a copy of the GNU General Public License along
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 // As a special exception, if other files instantiate templates or use macros
28 // or inline functions from this file, or you compile this file and link it
29 // with other works to produce a work based on this file, this file does not
30 // by itself cause the resulting work to be covered by the GNU General Public
31 // License. However the source code for this file must still be made available
32 // in accordance with section (3) of the GNU General Public License.
34 // This exception does not invalidate any other reasons why a work based on
35 // this file might be covered by the GNU General Public License.
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38 // at http://sources.redhat.com/ecos/ecos-license/
39 // -------------------------------------------
40 //####ECOSGPLCOPYRIGHTEND####
41 //=============================================================================
42 //#####DESCRIPTIONBEGIN####
45 // Contributors:proven,bartv
47 // Description: Machine dependent syscalls for i386/i486/i586
49 //####DESCRIPTIONEND####
51 //=============================================================================
53 // The numbers come from <asm/unistd.h>
54 #define SYS_setup 0 // Used only by init, to get system going.
68 #define SYS_prev_mknod 14
72 #define SYS_oldstat 18
82 #define SYS_oldfstat 28
100 #define SYS_setgid 46
101 #define SYS_getgid 47
102 #define SYS_signal 48
103 #define SYS_geteuid 49
104 #define SYS_getegid 50
111 #define SYS_setpgid 57
112 #define SYS_ulimit 58
113 #define SYS_oldolduname 59
115 #define SYS_chroot 61
116 #define SYS_prev_ustat 62
118 #define SYS_getppid 64
119 #define SYS_getpgrp 65
120 #define SYS_setsid 66
121 #define SYS_sigaction 67
122 #define SYS_siggetmask 68
123 #define SYS_sigsetmask 69
124 #define SYS_setreuid 70
125 #define SYS_setregid 71
126 #define SYS_sigsuspend 72
127 #define SYS_sigpending 73
128 #define SYS_sethostname 74
129 #define SYS_setrlimit 75
130 #define SYS_getrlimit 76
131 #define SYS_getrusage 77
132 #define SYS_gettimeofday 78
133 #define SYS_settimeofday 79
134 #define SYS_getgroups 80
135 #define SYS_setgroups 81
136 #define SYS_select 82
137 #define SYS_symlink 83
138 #define SYS_oldlstat 84
139 #define SYS_readlink 85
140 #define SYS_uselib 86
141 #define SYS_swapon 87
142 #define SYS_reboot 88
143 #define SYS_readdir 89
145 #define SYS_munmap 91
146 #define SYS_truncate 92
147 #define SYS_ftruncate 93
148 #define SYS_fchmod 94
149 #define SYS_fchown 95
150 #define SYS_getpriority 96
151 #define SYS_setpriority 97
152 #define SYS_profil 98
153 #define SYS_statfs 99
154 #define SYS_fstatfs 100
155 #define SYS_ioperm 101
156 #define SYS_socketcall 102
158 #define SYS_setitimer 104
159 #define SYS_getitimer 105
160 #define SYS_newstat 106
161 #define SYS_newlstat 107
162 #define SYS_newfstat 108
163 #define SYS_olduname 109
165 #define SYS_vhangup 111
167 #define SYS_vm86old 113
168 #define SYS_wait4 114
169 #define SYS_swapoff 115
170 #define SYS_sysinfo 116
172 #define SYS_fsync 118
173 #define SYS_sigreturn 119
174 #define SYS_clone 120
175 #define SYS_setdomainname 121
176 #define SYS_uname 122
177 #define SYS_modify_ldt 123
178 #define SYS_adjtimex 124
179 #define SYS_mprotect 125
180 #define SYS_sigprocmask 126
181 #define SYS_create_module 127
182 #define SYS_init_module 128
183 #define SYS_delete_module 129
184 #define SYS_get_kernel_syms 130
185 #define SYS_quotactl 131
186 #define SYS_getpgid 132
187 #define SYS_fchdir 133
188 #define SYS_bdflush 134
189 #define SYS_sysfs 135
190 #define SYS_personality 136
191 #define SYS_afs_syscall 137 // Syscall for Andrew File System
192 #define SYS_setfsuid 138
193 #define SYS_setfsgid 139
194 #define SYS__llseek 140
195 #define SYS_getdents 141
196 #define SYS__newselect 142
197 #define SYS_flock 143
198 #define SYS_syscall_flock 143
199 #define SYS_msync 144
200 #define SYS_readv 145
201 #define SYS_syscall_readv 145
202 #define SYS_writev 146
203 #define SYS_syscall_writev 146
204 #define SYS_getsid 147
205 #define SYS_fdatasync 148
206 #define SYS__sysctl 149
207 #define SYS_mlock 150
208 #define SYS_munlock 151
209 #define SYS_mlockall 152
210 #define SYS_munlockall 153
211 #define SYS_sched_setparam 154
212 #define SYS_sched_getparam 155
213 #define SYS_sched_setscheduler 156
214 #define SYS_sched_getscheduler 157
215 #define SYS_sched_yield 158
216 #define SYS_sched_get_priority_max 159
217 #define SYS_sched_get_priority_min 160
218 #define SYS_sched_rr_get_interval 161
219 #define SYS_nanosleep 162
220 #define SYS_mremap 163
221 #define SYS_setresuid 164
222 #define SYS_getresuid 165
224 #define SYS_query_module 167
226 #define SYS_nfsservctl 169
227 #define SYS_setresgid 170
228 #define SYS_getresgid 171
229 #define SYS_prctl 172
230 #define SYS_rt_sigreturn 173
231 #define SYS_rt_sigaction 174
232 #define SYS_rt_sigprocmask 175
233 #define SYS_rt_sigpending 176
234 #define SYS_rt_sigtimedwait 177
235 #define SYS_rt_sigqueueinfo 178
236 #define SYS_rt_sigsuspend 179
237 #define SYS_pread 180
238 #define SYS_pwrite 181
239 #define SYS_chown 182
240 #define SYS_getcwd 183
241 #define SYS_capget 184
242 #define SYS_capset 185
243 #define SYS_sigaltstack 186
244 #define SYS_sendfile 187
245 #define SYS_getpmsg 188
246 #define SYS_putpmsg 189
247 #define SYS_vfork 190
248 #define SYS_ugetrlimit 191
249 #define SYS_mmap2 192
250 #define SYS_truncate64 193
251 #define SYS_ftruncate64 194
252 #define SYS_stat64 195
253 #define SYS_lstat64 196
254 #define SYS_fstat64 197
255 #define SYS_lchown32 198
256 #define SYS_getuid32 199
257 #define SYS_getgid32 200
258 #define SYS_geteuid32 201
259 #define SYS_getegid32 202
260 #define SYS_setreuid32 203
261 #define SYS_setregid32 204
262 #define SYS_getgroups32 205
263 #define SYS_setgroups32 206
264 #define SYS_fchown32 207
265 #define SYS_setresuid32 208
266 #define SYS_getresuid32 209
267 #define SYS_setresgid32 210
268 #define SYS_getresgid32 211
269 #define SYS_chown32 212
270 #define SYS_setuid32 213
271 #define SYS_setgid32 214
272 #define SYS_setfsuid32 215
273 #define SYS_setfsgid32 216
274 #define SYS_pivot_root 217
275 #define SYS_mincore 218
276 #define SYS_madvise 219
277 #define SYS_madvise1 219
278 #define SYS_getdents64 220
279 #define SYS_fcntl64 221
282 #define NAME(X) cyg_hal_sys_##X
283 #define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
285 #define SYSCALL0(x) \
298 #define SYSCALL1(x) \
312 #define SYSCALL2(x) \
319 mov 12(%esp), %ecx; \
327 #define SYSCALL3(x) \
334 mov 12(%esp), %ecx; \
335 mov 16(%esp), %edx; \
343 #define SYSCALL4(x) \
350 mov 12(%esp), %ebx; \
351 mov 16(%esp), %ecx; \
352 mov 20(%esp), %edx; \
353 mov 24(%esp), %esi; \
361 #define SYSCALL5(x) \
369 mov 16(%esp), %ebx; \
370 mov 20(%esp), %ecx; \
371 mov 24(%esp), %edx; \
372 mov 28(%esp), %esi; \
373 mov 32(%esp), %edi; \
383 //==========================================================================
384 // Initial asm stuff for all functions.
415 SYSCALL2(gettimeofday)
419 SYSCALL3(sigprocmask)
436 // ----------------------------------------------------------------------------
437 // Special support for returning from a signal handler. In theory no special
438 // action is needed, but with some versions of the kernel on some
439 // architectures that is not good enough. Instead returning has to happen
440 // via another system call.
443 .global cyg_hal_sys_restore_rt
444 cyg_hal_sys_restore_rt:
445 movl $SYS_rt_sigreturn, %eax
448 .type __restore_rt,@function
449 .size __restore_rt,1b - __restore_rt
452 .global cyg_hal_sys_restore
455 movl $SYS_sigreturn, %eax
458 .type __restore,@function
459 .size __restore,1b - __restore