]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/hal/synth/i386linux/v2_0/src/syscall-i386-linux-1.0.S
unified MX27, MX25, MX37 trees
[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_newstat             106
161 #define SYS_newlstat            107
162 #define SYS_newfstat            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 SYSCALL3(x)                             \
328         .globl NAME(x) ;                        \
329                                                 \
330 NAME(x):                                        \
331                                                 \
332         push %ebx;                              \
333         mov 8(%esp), %ebx;                      \
334         mov 12(%esp), %ecx;                     \
335         mov 16(%esp), %edx;                     \
336         lea     SYS_##x, %eax;                  \
337         int $0x80;                              \
338         pop %ebx;                               \
339         ret;                                    \
340         END(x)
341
342
343 #define SYSCALL4(x)                             \
344         .globl NAME(x) ;                        \
345                                                 \
346 NAME(x):                                        \
347                                                 \
348         push %ebx;                              \
349         push %esi;                              \
350         mov 12(%esp), %ebx;                     \
351         mov 16(%esp), %ecx;                     \
352         mov 20(%esp), %edx;                     \
353         mov 24(%esp), %esi;                     \
354         lea     SYS_##x, %eax;                  \
355         int $0x80;                              \
356         pop %esi;                               \
357         pop %ebx;                               \
358         ret;                                    \
359         END(x)
360
361 #define SYSCALL5(x)                             \
362         .globl NAME(x) ;                        \
363                                                 \
364 NAME(x):                                        \
365                                                 \
366         push %ebx;                              \
367         push %esi;                              \
368         push %edi;                              \
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;                     \
374         lea     SYS_##x, %eax;                  \
375         int $0x80;                              \
376         pop %edi;                               \
377         pop %esi;                               \
378         pop %ebx;                               \
379         ret;                                    \
380         END(x)
381
382
383 //==========================================================================
384 // Initial asm stuff for all functions.
385         .text
386         .align  2
387
388 SYSCALL1(exit)
389 SYSCALL0(fork)
390 SYSCALL3(read)
391 SYSCALL3(write)
392 SYSCALL3(open)
393 SYSCALL1(close)
394 SYSCALL3(waitpid)
395 SYSCALL2(creat)
396 SYSCALL2(link)
397 SYSCALL1(unlink)
398 SYSCALL3(execve)
399 SYSCALL1(chdir)
400 SYSCALL1(time)
401 SYSCALL2(chmod)
402 SYSCALL3(lseek)
403 SYSCALL0(getpid)
404 SYSCALL0(getuid)
405 SYSCALL1(nice)
406 SYSCALL2(kill)
407 SYSCALL1(dup)
408 SYSCALL1(pipe)
409 SYSCALL1(brk)
410 SYSCALL3(ioctl)
411 SYSCALL3(fcntl)
412 SYSCALL1(chroot)
413 SYSCALL2(dup2)
414 SYSCALL3(sigaction)
415 SYSCALL2(gettimeofday)
416 SYSCALL1(mmapx)
417 SYSCALL2(socketcall)
418 SYSCALL3(setitimer)
419 SYSCALL3(sigprocmask)
420 SYSCALL5(_newselect)
421 SYSCALL3(readv)
422 SYSCALL3(writev)
423 SYSCALL1(fdatasync)
424 SYSCALL2(getcwd)
425 SYSCALL2(access)
426 SYSCALL3(readdir)
427 SYSCALL2(oldlstat)
428 SYSCALL2(oldfstat)
429 SYSCALL2(oldstat)
430 SYSCALL2(newlstat)
431 SYSCALL2(newfstat)
432 SYSCALL2(newstat)        
433 SYSCALL2(mkdir)
434 SYSCALL5(ipc)
435
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.         
441
442         .align 16
443         .global cyg_hal_sys_restore_rt
444 cyg_hal_sys_restore_rt:
445         movl    $SYS_rt_sigreturn, %eax
446         int     $0x80
447 1:              
448         .type __restore_rt,@function
449         .size __restore_rt,1b - __restore_rt
450                 
451         .align 8
452         .global cyg_hal_sys_restore
453 cyg_hal_sys_restore:
454         popl    %eax
455         movl    $SYS_sigreturn, %eax
456         int     $0x80
457 1:              
458         .type __restore,@function
459         .size __restore,1b - __restore