|
@@ -19,262 +19,162 @@
|
|
|
|
|
|
Procedure fpc_geteipasebx;[external name 'fpc_geteipasebx'];
|
|
|
|
|
|
-function FpSysCall(sysnr:TSysParam):TSysResult; assembler; oldfpccall;[public,alias:'FPC_SYSCALL0'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr:TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL0'];
|
|
|
+{ Var sysnr located in register eax }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+// movl sysnr,%eax
|
|
|
+ int $0x80
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-function FpSysCall(sysnr,param1 : TSysParam):TSysResult; assembler; oldfpccall;[public,alias:'FPC_SYSCALL1'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1 : TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL1'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ movl %ebx,%ecx
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+ int $0x80
|
|
|
+ movl %ecx,%ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-function FpSysCall(sysnr,param1,param2 : TSysParam):TSysResult; assembler; oldfpccall; [public,alias:'FPC_SYSCALL2'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1,param2 : TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL2'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx
|
|
|
+ Var param2 located in register ecx }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- movl param2,%ecx
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ push %ebx
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+// movl param2,%ecx
|
|
|
+ int $0x80
|
|
|
+ pop %ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; oldfpccall; [public,alias:'FPC_SYSCALL3'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL3'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx
|
|
|
+ Var param2 located in register ecx
|
|
|
+ Var param3 located at ebp+20 }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- movl param2,%ecx
|
|
|
- movl param3,%edx
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ push %ebx
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+// movl param2,%ecx
|
|
|
+ movl param3,%edx
|
|
|
+ int $0x80
|
|
|
+ pop %ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; oldfpccall; [public,alias:'FPC_SYSCALL4'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL4'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx
|
|
|
+ Var param2 located in register ecx
|
|
|
+ Var param3 located at ebp+20
|
|
|
+ Var param4 located at ebp+16 }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- movl param2,%ecx
|
|
|
- movl param3,%edx
|
|
|
- movl param4,%esi
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ push %ebx
|
|
|
+ push %esi
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+// movl param2,%ecx
|
|
|
+ movl param3,%edx
|
|
|
+ movl param4,%esi
|
|
|
+ int $0x80
|
|
|
+ pop %esi
|
|
|
+ pop %ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-function FpSysCall(sysnr,param1,param2,param3,param4,param5 : TSysParam):TSysResult; assembler; oldfpccall;[public,alias:'FPC_SYSCALL5'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4,param5 : TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL5'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx
|
|
|
+ Var param2 located in register ecx
|
|
|
+ Var param3 located at ebp+20
|
|
|
+ Var param4 located at ebp+16
|
|
|
+ Var param5 located at ebp+12 }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- movl param2,%ecx
|
|
|
- movl param3,%edx
|
|
|
- movl param4,%esi
|
|
|
- movl param5,%edi
|
|
|
- int $0x80
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ push %ebx
|
|
|
+ push %esi
|
|
|
+ push %edi
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+// movl param2,%ecx
|
|
|
+ movl param3,%edx
|
|
|
+ movl param4,%esi
|
|
|
+ movl param5,%edi
|
|
|
+ int $0x80
|
|
|
+ pop %edi
|
|
|
+ pop %esi
|
|
|
+ pop %ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
|
|
|
-{.$ifdef notsupported}
|
|
|
-{ Only 5 params are pushed, so it'll not work as expected (PFV) }
|
|
|
-function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6 : TSysParam):TSysResult; assembler; oldfpccall;[public,alias:'FPC_SYSCALL6'];
|
|
|
-
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6: TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL6'];
|
|
|
+{ Var sysnr located in register eax
|
|
|
+ Var param1 located in register edx
|
|
|
+ Var param2 located in register ecx
|
|
|
+ Var param3 located at ebp+20
|
|
|
+ Var param4 located at ebp+16
|
|
|
+ Var param5 located at ebp+12
|
|
|
+ Var param6 located at ebp+8 }
|
|
|
asm
|
|
|
-{ load the registers... }
|
|
|
- push %ebp
|
|
|
- movl sysnr,%eax
|
|
|
- movl param1,%ebx
|
|
|
- movl param2,%ecx
|
|
|
- movl param3,%edx
|
|
|
- movl param4,%esi
|
|
|
- movl param5,%edi
|
|
|
- movl param6,%ebp
|
|
|
- int $0x80
|
|
|
- pop %ebp
|
|
|
- cmpl $-4095,%eax
|
|
|
- jb .LSyscOK
|
|
|
- negl %eax
|
|
|
-{$ifdef FPC_PIC}
|
|
|
- call fpc_geteipasebx
|
|
|
- addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
- movl fpc_threadvar_relocate_proc@GOT(%ebx),%ecx
|
|
|
- movl (%ecx),%ecx
|
|
|
- movl Errno@GOT(%ebx),%edi
|
|
|
-{$else FPC_PIC}
|
|
|
- leal Errno,%edi
|
|
|
- movl fpc_threadvar_relocate_proc,%ecx
|
|
|
-{$endif FPC_PIC}
|
|
|
- testl %ecx,%ecx
|
|
|
- jne .LThread
|
|
|
- movl %eax,4(%edi)
|
|
|
- jmp .LNoThread
|
|
|
-.LThread:
|
|
|
- movl %eax,%ebx
|
|
|
- movl (%edi),%eax
|
|
|
- call *%ecx
|
|
|
- movl %ebx,(%eax)
|
|
|
-.LNoThread:
|
|
|
- movl $-1,%eax
|
|
|
-.LSyscOK:
|
|
|
+ push %ebx
|
|
|
+ push %esi
|
|
|
+ push %edi
|
|
|
+ push %ebp
|
|
|
+// movl sysnr,%eax
|
|
|
+ movl %edx,%ebx
|
|
|
+// movl param2,%ecx
|
|
|
+ movl param3,%edx
|
|
|
+ movl param4,%esi
|
|
|
+ movl param5,%edi
|
|
|
+ movl param6,%ebp
|
|
|
+ int $0x80
|
|
|
+ pop %ebp
|
|
|
+ pop %edi
|
|
|
+ pop %esi
|
|
|
+ pop %ebx
|
|
|
+ cmpl $-4095,%eax
|
|
|
+ jb .LSyscOK
|
|
|
+ negl %eax
|
|
|
+ call seterrno
|
|
|
+ movl $-1,%eax
|
|
|
+ .LSyscOK:
|
|
|
end;
|
|
|
-{.$endif notsupported}
|
|
|
|
|
|
{No debugging for syslinux include !}
|
|
|
{$IFDEF SYS_LINUX}
|