]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/synth/i386linux/v2_0/src/syscall-i386-linux-1.0.S
38f39d0da455a51cc91a0cb0bef0a8cb561572f0
[karo-tx-redboot.git] / packages / hal / synth / i386linux / v2_0 / src / syscall-i386-linux-1.0.S
1 //=============================================================================
2 //
3 //      syscall-i386-linux-1.0.S
4 //
5 //      Linux system call interface functions for i386.
6 //
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.
13 //
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.
17 //
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
21 // for more details.
22 //
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.
26 //
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.
33 //
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.
36 //
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####
43 //
44 // Author(s):   proven
45 // Contributors:proven,bartv
46 // Date:        1998-10-06
47 // Description: Machine dependent syscalls for i386/i486/i586
48 //
49 //####DESCRIPTIONEND####
50 //
51 //=============================================================================
52
53 // The numbers come from <asm/unistd.h>
54 #define SYS_setup               0 // Used only by init, to get system going.
55 #define SYS_exit                1
56 #define SYS_fork                2
57 #define SYS_read                3
58 #define SYS_write               4
59 #define SYS_open                5
60 #define SYS_close               6
61 #define SYS_waitpid             7
62 #define SYS_creat               8
63 #define SYS_link                9
64 #define SYS_unlink              10
65 #define SYS_execve              11
66 #define SYS_chdir               12
67 #define SYS_time                13
68 #define SYS_prev_mknod          14
69 #define SYS_chmod               15
70 #define SYS_lchown              16
71 #define SYS_break               17
72 #define SYS_oldstat             18
73 #define SYS_lseek               19
74 #define SYS_getpid              20
75 #define SYS_mount               21
76 #define SYS_umount              22
77 #define SYS_setuid              23
78 #define SYS_getuid              24
79 #define SYS_stime               25
80 #define SYS_ptrace              26
81 #define SYS_alarm               27
82 #define SYS_oldfstat            28
83 #define SYS_pause               29
84 #define SYS_utime               30
85 #define SYS_stty                31
86 #define SYS_gtty                32
87 #define SYS_access              33
88 #define SYS_nice                34
89 #define SYS_ftime               35
90 #define SYS_sync                36
91 #define SYS_kill                37
92 #define SYS_rename              38
93 #define SYS_mkdir               39
94 #define SYS_rmdir               40
95 #define SYS_dup                 41
96 #define SYS_pipe                42
97 #define SYS_times               43
98 #define SYS_prof                44
99 #define SYS_brk                 45
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
105 #define SYS_acct                51
106 #define SYS_phys                52
107 #define SYS_lock                53
108 #define SYS_ioctl               54
109 #define SYS_fcntl               55
110 #define SYS_mpx                 56
111 #define SYS_setpgid             57
112 #define SYS_ulimit              58
113 #define SYS_oldolduname         59
114 #define SYS_umask               60
115 #define SYS_chroot              61
116 #define SYS_prev_ustat          62
117 #define SYS_dup2                63
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
144 #define SYS_mmapx               90
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
157 #define SYS_klog                103
158 #define SYS_setitimer           104
159 #define SYS_getitimer           105
160 #define SYS_prev_stat           106
161 #define SYS_prev_lstat          107
162 #define SYS_prev_fstat          108
163 #define SYS_olduname            109
164 #define SYS_iopl                110
165 #define SYS_vhangup             111
166 #define SYS_idle                112
167 #define SYS_vm86old             113
168 #define SYS_wait4               114
169 #define SYS_swapoff             115
170 #define SYS_sysinfo             116
171 #define SYS_ipc                 117
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
223 #define SYS_vm86                166
224 #define SYS_query_module        167
225 #define SYS_poll                168
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
280
281
282 #define NAME(X) cyg_hal_sys_##X 
283 #define END(X)  1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
284
285 #define SYSCALL0(x)                             \
286         .globl NAME(x) ;                        \
287                                                 \
288 NAME(x):                                        \
289                                                 \
290         push %ebx;                              \
291         lea     SYS_##x, %eax;                  \
292         int $0x80;                              \
293         pop %ebx;                               \
294         ret;                                    \
295                                                 \
296         END(x)
297
298 #define SYSCALL1(x)                             \
299         .globl NAME(x) ;                        \
300                                                 \
301 NAME(x):                                        \
302                                                 \
303         push %ebx;                              \
304         mov 8(%esp), %ebx;                      \
305         lea     SYS_##x, %eax;                  \
306         int $0x80;                              \
307         pop %ebx;                               \
308         ret;                                    \
309                                                 \
310     END(x)
311
312 #define SYSCALL2(x)                             \
313         .globl NAME(x) ;                        \
314                                                 \
315 NAME(x):                                        \
316                                                 \
317         push %ebx;                              \
318         mov 8(%esp), %ebx;                      \
319         mov 12(%esp), %ecx;                     \
320         lea     SYS_##x, %eax;                  \
321         int $0x80;                              \
322         pop %ebx;                               \
323         ret;                                    \
324                                                 \
325     END(x)
326
327 #define STATCALL2(x)                            \
328    .globl NAME(x) ;                             \
329                                                 \
330 NAME(x):                                        \
331                                                 \
332         push %ebx;                              \
333         mov 8(%esp), %ebx;                      \
334         mov 12(%esp), %ecx;                     \
335         lea SYS_prev_##x, %eax;                 \
336         int $0x80;                              \
337         pop %ebx;                               \
338         ret;                                    \
339         END(x)
340
341 #define SYSCALL3(x)                             \
342         .globl NAME(x) ;                        \
343                                                 \
344 NAME(x):                                        \
345                                                 \
346         push %ebx;                              \
347         mov 8(%esp), %ebx;                      \
348         mov 12(%esp), %ecx;                     \
349         mov 16(%esp), %edx;                     \
350         lea     SYS_##x, %eax;                  \
351         int $0x80;                              \
352         pop %ebx;                               \
353         ret;                                    \
354         END(x)
355
356
357 #define SYSCALL4(x)                             \
358         .globl NAME(x) ;                        \
359                                                 \
360 NAME(x):                                        \
361                                                 \
362         push %ebx;                              \
363         push %esi;                              \
364         mov 12(%esp), %ebx;                     \
365         mov 16(%esp), %ecx;                     \
366         mov 20(%esp), %edx;                     \
367         mov 24(%esp), %esi;                     \
368         lea     SYS_##x, %eax;                  \
369         int $0x80;                              \
370         pop %esi;                               \
371         pop %ebx;                               \
372         ret;                                    \
373         END(x)
374
375 #define SYSCALL5(x)                             \
376         .globl NAME(x) ;                        \
377                                                 \
378 NAME(x):                                        \
379                                                 \
380         push %ebx;                              \
381         push %esi;                              \
382         push %edi;                              \
383         mov 16(%esp), %ebx;                     \
384         mov 20(%esp), %ecx;                     \
385         mov 24(%esp), %edx;                     \
386         mov 28(%esp), %esi;                     \
387         mov 32(%esp), %edi;                     \
388         lea     SYS_##x, %eax;                  \
389         int $0x80;                              \
390         pop %edi;                               \
391         pop %esi;                               \
392         pop %ebx;                               \
393         ret;                                    \
394         END(x)
395
396
397 //==========================================================================
398 // Initial asm stuff for all functions.
399         .text
400         .align  2
401
402 SYSCALL1(exit)
403 SYSCALL0(fork)
404 SYSCALL3(read)
405 SYSCALL3(write)
406 SYSCALL3(open)
407 SYSCALL1(close)
408 SYSCALL3(waitpid)
409 SYSCALL2(creat)
410 SYSCALL2(link)
411 SYSCALL1(unlink)
412 SYSCALL3(execve)
413 SYSCALL1(chdir)
414 SYSCALL1(time)
415 SYSCALL2(chmod)
416 SYSCALL3(lseek)
417 SYSCALL0(getpid)
418 SYSCALL0(getuid)
419 SYSCALL1(nice)
420 SYSCALL2(kill)
421 SYSCALL1(dup)
422 SYSCALL1(pipe)
423 SYSCALL1(brk)
424 SYSCALL3(ioctl)
425 SYSCALL3(fcntl)
426 SYSCALL1(chroot)
427 SYSCALL2(dup2)
428 SYSCALL3(sigaction)
429 SYSCALL2(gettimeofday)
430 SYSCALL1(mmapx)
431 SYSCALL2(socketcall)
432 SYSCALL3(setitimer)
433 SYSCALL3(sigprocmask)
434 SYSCALL5(_newselect)
435 SYSCALL3(readv)
436 SYSCALL3(writev)
437 SYSCALL1(fdatasync)
438 SYSCALL2(getcwd)
439 SYSCALL2(access)
440 SYSCALL3(readdir)
441 STATCALL2(lstat)
442 STATCALL2(fstat)
443 SYSCALL2(mkdir)
444 SYSCALL5(ipc)
445
446 // ----------------------------------------------------------------------------
447 // Special support for returning from a signal handler. In theory no special
448 // action is needed, but with some versions of the kernel on some
449 // architectures that is not good enough. Instead returning has to happen
450 // via another system call.         
451
452         .align 16
453         .global cyg_hal_sys_restore_rt
454 cyg_hal_sys_restore_rt:
455         movl    $SYS_rt_sigreturn, %eax
456         int     $0x80
457 1:              
458         .type __restore_rt,@function
459         .size __restore_rt,1b - __restore_rt
460                 
461         .align 8
462         .global cyg_hal_sys_restore
463 cyg_hal_sys_restore:
464         popl    %eax
465         movl    $SYS_sigreturn, %eax
466         int     $0x80
467 1:              
468         .type __restore,@function
469         .size __restore,1b - __restore