1{
2    This file is part of the Free Pascal run time library.
3    Copyright (c) 2002 Marco van de Voort
4    member of the Free Pascal development team.
5
6    i386 syscall headers for *BSD
7
8    See the file COPYING.FPC, included in this distribution,
9    for details about the copyright.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 **********************************************************************}
16
17{These functions are the same over all three BSDs, except that some have a
1832-bit Errno, and some a 16-bit}
19
20{$ifdef FPC_USE_SYSCALL}
21
22procedure actualsyscall; assembler; {inline requires a dummy push IIRC}
23    asm
24         int $0x80
25         jb .LErrorcode
26         ret
27.LErrorcode:
28         call SetErrno
29         movl  $-1,%eax
30end;
31
32function FpSysCall(sysnr:TSysParam):TSysResult; oldfpccall; assembler; [public,alias:'FPC_DOSYS0'];
33
34asm
35  movl  sysnr,%eax
36  call  actualsyscall
37end;
38
39function FpSysCall(sysnr,param1:TSysParam):TSysResult; oldfpccall; assembler;[public,alias:'FPC_DOSYS1'];
40
41 asm
42  movl  sysnr,%eax
43  pushl Param1
44  call  actualsyscall
45  addl  $4,%esp
46 end;
47
48function FpSysCall(sysnr,param1:integer):TSysResult; oldfpccall;assembler;[public,alias:'FPC_DOSYS1w'];
49
50 asm
51  movswl  sysnr,%eax
52  pushw Param1
53  call  actualsyscall
54  add   $2,%esp
55 end;
56
57function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; oldfpccall;assembler; [public,alias:'FPC_DOSYS2'];
58
59 asm
60   movl  sysnr,%eax
61   pushl param2
62   pushl Param1
63   call  actualsyscall
64   addl  $8,%esp
65 end;
66
67function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; oldfpccall;assembler;[public,alias:'FPC_DOSYS3'];
68
69 asm
70   movl  sysnr,%eax
71   pushl param3
72   pushl param2
73   pushl Param1
74   call  actualsyscall
75   addl  $12,%esp
76end;
77
78function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;oldfpccall; assembler;[public,alias:'FPC_DOSYS4'];
79
80asm
81   movl  sysnr,%eax
82   pushl param4
83   pushl param3
84   pushl param2
85   pushl Param1
86   call  actualsyscall
87   addl  $16,%esp
88end;
89
90
91function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;oldfpccall;  assembler;[public,alias:'FPC_DOSYS5'];
92
93 asm
94   movl  sysnr,%eax
95   pushl param5
96   pushl param4
97   pushl param3
98   pushl param2
99   pushl Param1
100   call  actualsyscall
101   addl  $20,%esp
102end;
103
104function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):int64; oldfpccall; assembler;[public,alias:'FPC_DOSYS6'];
105
106asm
107   movl  sysnr,%eax
108   pushl param6
109   pushl param5
110   pushl param4
111   pushl param3
112   pushl param2
113   pushl Param1
114   call  actualsyscall
115   addl  $24,%esp
116end;
117
118function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):int64;oldfpccall;  assembler; [public,alias:'FPC_DOSYS7'];
119
120asm
121   movl  sysnr,%eax
122   pushl param7
123   pushl param6
124   pushl param5
125   pushl param4
126   pushl param3
127   pushl param2
128   pushl Param1
129   call  actualsyscall
130   addl  $28,%esp
131end;
132
133function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7,param8:TSysParam):int64;oldfpccall;  assembler; [public,alias:'FPC_DOSYS8'];
134
135asm
136   movl  sysnr,%eax
137   pushl param8
138   pushl param7
139   pushl param6
140   pushl param5
141   pushl param4
142   pushl param3
143   pushl param2
144   pushl Param1
145   call  actualsyscall
146   addl  $32,%esp
147end;
148
149{$endif}
150