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