mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 20:29:32 +02:00
* changed i386 syscall from oldfpccall to register calling convention
git-svn-id: trunk@6776 -
This commit is contained in:
parent
ed87187cad
commit
e7fb4e6a32
@ -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}
|
||||
|
@ -33,13 +33,10 @@ Type
|
||||
|
||||
TSysParam = Longint;
|
||||
|
||||
function Do_SysCall(sysnr:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL0';
|
||||
function Do_SysCall(sysnr,param1:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL1';
|
||||
function Do_SysCall(sysnr,param1,param2:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL2';
|
||||
function Do_SysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL3';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL4';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL5';
|
||||
{.$ifdef notsupported}
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; oldfpccall; external name 'FPC_SYSCALL6';
|
||||
{.$endif notsupported}
|
||||
|
||||
function Do_SysCall(sysnr:TSysParam):TSysResult; register; external name 'FPC_SYSCALL0';
|
||||
function Do_SysCall(sysnr,param1:TSysParam):TSysResult; register; external name 'FPC_SYSCALL1';
|
||||
function Do_SysCall(sysnr,param1,param2:TSysParam):TSysResult; register; external name 'FPC_SYSCALL2';
|
||||
function Do_SysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; register; external name 'FPC_SYSCALL3';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; register; external name 'FPC_SYSCALL4';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; register; external name 'FPC_SYSCALL5';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; register; external name 'FPC_SYSCALL6';
|
||||
|
Loading…
Reference in New Issue
Block a user