|
@@ -17,9 +17,18 @@
|
|
|
|
|
|
{$ASMMODE GAS}
|
|
|
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+procedure mcount; external name 'mcount';
|
|
|
+{$endif FPC_PROFILE}
|
|
|
+
|
|
|
function FpSysCall(sysnr:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL0'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ call mcount
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
syscall { Do the system call. }
|
|
|
cmpq $-4095, %rax { Check %rax for error. }
|
|
@@ -52,6 +61,13 @@ end;
|
|
|
function FpSysCall(sysnr,param1 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ call mcount
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
syscall { Do the system call. }
|
|
@@ -85,6 +101,15 @@ end;
|
|
|
function FpSysCall(sysnr,param1,param2 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ pushq param2
|
|
|
+ call mcount
|
|
|
+ popq param2
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
movq param2, %rsi
|
|
@@ -119,6 +144,17 @@ end;
|
|
|
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ pushq param2
|
|
|
+ pushq param3
|
|
|
+ call mcount
|
|
|
+ popq param3
|
|
|
+ popq param2
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
movq param2, %rsi
|
|
@@ -154,6 +190,19 @@ end;
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL4'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ pushq param2
|
|
|
+ pushq param3
|
|
|
+ pushq param4
|
|
|
+ call mcount
|
|
|
+ popq param4
|
|
|
+ popq param3
|
|
|
+ popq param2
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
movq param2, %rsi
|
|
@@ -190,6 +239,21 @@ end;
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ pushq param2
|
|
|
+ pushq param3
|
|
|
+ pushq param4
|
|
|
+ pushq param5
|
|
|
+ call mcount
|
|
|
+ popq param5
|
|
|
+ popq param4
|
|
|
+ popq param3
|
|
|
+ popq param2
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
movq param2, %rsi
|
|
@@ -228,6 +292,23 @@ end;
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
|
|
|
|
|
|
asm
|
|
|
+{$ifdef FPC_PROFILE}
|
|
|
+ pushq sysnr
|
|
|
+ pushq param1
|
|
|
+ pushq param2
|
|
|
+ pushq param3
|
|
|
+ pushq param4
|
|
|
+ pushq param5
|
|
|
+ pushq param6
|
|
|
+ call mcount
|
|
|
+ popq param6
|
|
|
+ popq param5
|
|
|
+ popq param4
|
|
|
+ popq param3
|
|
|
+ popq param2
|
|
|
+ popq param1
|
|
|
+ popq sysnr
|
|
|
+{$endif FPC_PROFILE}
|
|
|
movq sysnr, %rax { Syscall number -> rax. }
|
|
|
movq param1, %rdi { shift arg1 - arg5. }
|
|
|
movq param2, %rsi
|
|
@@ -268,3 +349,4 @@ end;
|
|
|
{$IFDEF SYS_LINUX}
|
|
|
{$UNDEF SYSCALL_DEBUG}
|
|
|
{$ENDIF SYS_LINUX}
|
|
|
+
|