summaryrefslogtreecommitdiff
path: root/rtl/linux
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-04 20:57:11 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-04 20:57:11 +0000
commit5d9510928205c6eeda0dffd7d76b518b54bba894 (patch)
tree03c5363d4f11c2d34f60c39534081cabf84654b3 /rtl/linux
parent0439e5a369a0f0e8ab78b45c83fcc8035146a925 (diff)
downloadfpc-5d9510928205c6eeda0dffd7d76b518b54bba894.tar.gz
* x86_64-linux: assembler helpers syscalls do not need a stackframe
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48512 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/linux')
-rw-r--r--rtl/linux/x86_64/syscall.inc24
1 files changed, 18 insertions, 6 deletions
diff --git a/rtl/linux/x86_64/syscall.inc b/rtl/linux/x86_64/syscall.inc
index aad7783a92..1812073032 100644
--- a/rtl/linux/x86_64/syscall.inc
+++ b/rtl/linux/x86_64/syscall.inc
@@ -20,9 +20,10 @@
procedure mcount; external name 'mcount';
{$endif FPC_PROFILE}
-function FpSysCall(sysnr:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL0'];
+function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
call mcount
@@ -37,11 +38,13 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;
-function FpSysCall(sysnr,param1 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
+function FpSysCall(sysnr,param1 : TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
pushq param1
@@ -59,11 +62,13 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;
-function FpSysCall(sysnr,param1,param2 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
+function FpSysCall(sysnr,param1,param2 : TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
pushq param1
@@ -84,11 +89,13 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;
-function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
+function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
pushq param1
@@ -112,11 +119,13 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;
-function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL4'];
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
pushq param1
@@ -143,11 +152,13 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;
-function FpSysCall(sysnr,param1,param2,param3,param4,param5 : TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
+function FpSysCall(sysnr,param1,param2,param3,param4,param5 : TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
asm
+ pushq %rax { keep stack aligned }
{$ifdef FPC_PROFILE}
pushq sysnr
pushq param1
@@ -177,6 +188,7 @@ asm
call seterrno@PLT
movq $-1,%rax
.LSyscOK:
+ popq %rcx { remove alignment }
end;