mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 19:29:26 +02:00
+ Linux/AArch64 RTL support (patch by Edmund Grimley Evans)
o uses new generic Linux syscall numbers, used for recent architectures git-svn-id: trunk@30895 -
This commit is contained in:
parent
3c8068ad0b
commit
4fa2edc638
12
.gitattributes
vendored
12
.gitattributes
vendored
@ -8631,6 +8631,17 @@ rtl/jvm/setjump.inc svneol=native#text/plain
|
||||
rtl/jvm/setjumph.inc svneol=native#text/plain
|
||||
rtl/linux/Makefile svneol=native#text/plain
|
||||
rtl/linux/Makefile.fpc svneol=native#text/plain
|
||||
rtl/linux/aarch64/bsyscall.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/cprt0.as svneol=native#text/plain
|
||||
rtl/linux/aarch64/dllprt0.as svneol=native#text/plain
|
||||
rtl/linux/aarch64/gprt0.as svneol=native#text/plain
|
||||
rtl/linux/aarch64/prt0.as svneol=native#text/plain
|
||||
rtl/linux/aarch64/sighnd.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/sighndh.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/stat.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/syscall.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/syscallh.inc svneol=native#text/plain
|
||||
rtl/linux/aarch64/sysnr.inc svneol=native#text/plain
|
||||
rtl/linux/arm/bsyscall.inc svneol=native#text/plain
|
||||
rtl/linux/arm/cprt0.as svneol=native#text/plain
|
||||
rtl/linux/arm/dllprt0.as svneol=native#text/plain
|
||||
@ -8766,6 +8777,7 @@ rtl/linux/sparc/syscall.inc svneol=native#text/plain
|
||||
rtl/linux/sparc/syscallh.inc svneol=native#text/plain
|
||||
rtl/linux/sparc/sysnr.inc svneol=native#text/plain
|
||||
rtl/linux/suuid.inc svneol=native#text/plain
|
||||
rtl/linux/sysnr-gen.inc svneol=native#text/plain
|
||||
rtl/linux/sysos.inc svneol=native#text/plain
|
||||
rtl/linux/sysosh.inc svneol=native#text/plain
|
||||
rtl/linux/system.pp svneol=native#text/plain
|
||||
|
1
rtl/linux/aarch64/bsyscall.inc
Normal file
1
rtl/linux/aarch64/bsyscall.inc
Normal file
@ -0,0 +1 @@
|
||||
{ nothing }
|
91
rtl/linux/aarch64/cprt0.as
Normal file
91
rtl/linux/aarch64/cprt0.as
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
Start-up code for Free Pascal Compiler when linking with C library.
|
||||
|
||||
Written by Edmund Grimley Evans in 2015 and released into the public domain.
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.globl _start
|
||||
.type _start,#function
|
||||
_start:
|
||||
/* Initialise FP to zero */
|
||||
mov x29,#0
|
||||
|
||||
/* This is rtld_fini */
|
||||
mov x5,x0
|
||||
|
||||
/* Get argc, argv, envp */
|
||||
ldr x1,[sp]
|
||||
add x2,sp,#8
|
||||
add x11,x1,#1
|
||||
add x11,x2,x11,lsl #3
|
||||
|
||||
/* Save argc, argv, envp, and initial stack pointer */
|
||||
adrp x10,:got:operatingsystem_parameter_argc
|
||||
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argc]
|
||||
str x1,[x10]
|
||||
adrp x10,:got:operatingsystem_parameter_argv
|
||||
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argv]
|
||||
str x2,[x10]
|
||||
adrp x10,:got:operatingsystem_parameter_envp
|
||||
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_envp]
|
||||
str x11,[x10]
|
||||
adrp x10,:got:__stkptr
|
||||
ldr x10,[x10,#:got_lo12:__stkptr]
|
||||
mov x6,sp
|
||||
str x6,[x10]
|
||||
|
||||
/* __libc_start_main(main, argc, argv,
|
||||
init, fini, rtld_fini, stack_end) */
|
||||
adrp x0,:got:PASCALMAIN
|
||||
ldr x0,[x0,#:got_lo12:PASCALMAIN]
|
||||
adrp x3,:got:__libc_csu_init
|
||||
ldr x3,[x3,#:got_lo12:__libc_csu_init]
|
||||
adrp x4,:got:__libc_csu_fini
|
||||
ldr x4,[x4,#:got_lo12:__libc_csu_fini]
|
||||
bl __libc_start_main
|
||||
|
||||
/* This should never happen */
|
||||
b abort
|
||||
|
||||
.globl _init
|
||||
.type _init,#function
|
||||
_init:
|
||||
ret
|
||||
|
||||
.globl _fini
|
||||
.type _fini,#function
|
||||
_fini:
|
||||
ret
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,#function
|
||||
_haltproc:
|
||||
adrp x0,:got:operatingsystem_result
|
||||
ldr x0,[x0,#:got_lo12:operatingsystem_result]
|
||||
ldr w0,[x0]
|
||||
mov w8,#94 // syscall_nr_exit_group
|
||||
svc #0
|
||||
b _haltproc
|
||||
|
||||
/* Define a symbol for the first piece of initialized data. */
|
||||
.data
|
||||
.align 3
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
|
||||
.bss
|
||||
.align 3
|
||||
|
||||
.comm __stkptr,8
|
||||
|
||||
.comm operatingsystem_parameter_envp,8
|
||||
.comm operatingsystem_parameter_argc,8
|
||||
.comm operatingsystem_parameter_argv,8
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
72
rtl/linux/aarch64/dllprt0.as
Normal file
72
rtl/linux/aarch64/dllprt0.as
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
Start-up code for Free Pascal Compiler in a shared library,
|
||||
not linking with C library.
|
||||
|
||||
Written by Edmund Grimley Evans in 2015 and released into the public domain.
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.globl _startlib
|
||||
.type _startlib,#function
|
||||
_startlib:
|
||||
.globl FPC_SHARED_LIB_START
|
||||
.type FPC_SHARED_LIB_START,#function
|
||||
FPC_SHARED_LIB_START:
|
||||
stp x29,x30,[sp,#-16]!
|
||||
|
||||
/* Save argc, argv and envp */
|
||||
adrp x9,:got:operatingsystem_parameter_argc
|
||||
ldr x9,[x9,#:got_lo12:operatingsystem_parameter_argc]
|
||||
str x0,[x9]
|
||||
adrp x9,:got:operatingsystem_parameter_argv
|
||||
ldr x9,[x9,#:got_lo12:operatingsystem_parameter_argv]
|
||||
str x1,[x9]
|
||||
adrp x9,:got:operatingsystem_parameter_envp
|
||||
ldr x9,[x9,#:got_lo12:operatingsystem_parameter_envp]
|
||||
str x2,[x9]
|
||||
|
||||
/* Save initial stackpointer */
|
||||
adrp x9,:got:__stkptr
|
||||
ldr x9,[x9,#:got_lo12:__stkptr]
|
||||
mov x10,sp
|
||||
str x10,[x9]
|
||||
|
||||
/* Call main */
|
||||
bl PASCALMAIN
|
||||
|
||||
/* Return */
|
||||
ldp x29,x30,[sp],#16
|
||||
ret
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,#function
|
||||
_haltproc:
|
||||
adrp x0,:got:operatingsystem_result
|
||||
ldr x0,[x0,#:got_lo12:operatingsystem_result]
|
||||
ldr w0,[x0]
|
||||
mov w8,#94 // syscall_nr_exit_group
|
||||
svc #0
|
||||
b _haltproc
|
||||
|
||||
/* Define a symbol for the first piece of initialized data. */
|
||||
.data
|
||||
.align 3
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
|
||||
.bss
|
||||
.align 3
|
||||
|
||||
.comm __dl_fini,8
|
||||
.comm __stkptr,8
|
||||
|
||||
.comm operatingsystem_parameter_envp,8
|
||||
.comm operatingsystem_parameter_argc,8
|
||||
.comm operatingsystem_parameter_argv,8
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
10
rtl/linux/aarch64/gprt0.as
Normal file
10
rtl/linux/aarch64/gprt0.as
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
Start-up code for Free Pascal Compiler when linking with C library
|
||||
with profiling support.
|
||||
|
||||
Written by Edmund Grimley Evans in 2015 and released into the public domain.
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
b xx_aarch64_gprt0_unimplemented
|
77
rtl/linux/aarch64/prt0.as
Normal file
77
rtl/linux/aarch64/prt0.as
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
Start-up code for Free Pascal Compiler, not in a shared library,
|
||||
not linking with C library.
|
||||
|
||||
Written by Edmund Grimley Evans in 2015 and released into the public domain.
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.globl _dynamic_start
|
||||
.type _dynamic_start,#function
|
||||
_dynamic_start:
|
||||
ldr x10,=__dl_fini
|
||||
str x0,[x10]
|
||||
b _start
|
||||
|
||||
.globl _start
|
||||
.type _start,#function
|
||||
_start:
|
||||
/* Initialise FP to zero */
|
||||
mov x29,#0
|
||||
|
||||
/* Get argc, argv, envp */
|
||||
ldr x1,[sp]
|
||||
add x2,sp,#8
|
||||
add x11,x1,#1
|
||||
add x11,x2,x11,lsl #3
|
||||
|
||||
/* Save argc, argv, envp, and initial stack pointer */
|
||||
ldr x10,=operatingsystem_parameter_argc
|
||||
str x1,[x10]
|
||||
ldr x10,=operatingsystem_parameter_argv
|
||||
str x2,[x10]
|
||||
ldr x10,=operatingsystem_parameter_envp
|
||||
str x11,[x10]
|
||||
ldr x10,=__stkptr
|
||||
mov x6,sp
|
||||
str x6,[x10]
|
||||
|
||||
/* Call main */
|
||||
bl PASCALMAIN
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,#function
|
||||
_haltproc:
|
||||
ldr x10,=__dl_fini
|
||||
ldr x0,[x10]
|
||||
cbz x0,.Lexit
|
||||
blr x0
|
||||
.Lexit:
|
||||
ldr x10,=operatingsystem_result
|
||||
ldr w0,[x10]
|
||||
mov w8,#94 // syscall_nr_exit_group
|
||||
svc #0
|
||||
b _haltproc
|
||||
|
||||
/* Define a symbol for the first piece of initialized data. */
|
||||
.data
|
||||
.align 3
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
|
||||
.bss
|
||||
.align 3
|
||||
|
||||
.comm __dl_fini,8
|
||||
.comm __stkptr,8
|
||||
|
||||
.comm operatingsystem_parameter_envp,8
|
||||
.comm operatingsystem_parameter_argc,8
|
||||
.comm operatingsystem_parameter_argv,8
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
44
rtl/linux/aarch64/sighnd.inc
Normal file
44
rtl/linux/aarch64/sighnd.inc
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Michael Van Canneyt,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
Signal handler is arch dependant due to processor to language
|
||||
exception conversion.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
procedure SignalToRunerror(Sig: longint; SigInfo: PSigInfo; UContext: PUContext); public name '_FPC_DEFAULTSIGHANDLER'; cdecl;
|
||||
|
||||
var
|
||||
res : word;
|
||||
begin
|
||||
res:=0;
|
||||
case sig of
|
||||
SIGFPE:
|
||||
res:=207;
|
||||
SIGILL:
|
||||
res:=216;
|
||||
SIGSEGV :
|
||||
res:=216;
|
||||
SIGBUS:
|
||||
res:=214;
|
||||
SIGINT:
|
||||
res:=217;
|
||||
SIGQUIT:
|
||||
res:=233;
|
||||
end;
|
||||
reenable_signal(sig);
|
||||
{ give runtime error at the position where the signal was raised }
|
||||
if res<>0 then
|
||||
HandleErrorAddrFrame(res,
|
||||
pointer(uContext^.uc_mcontext.pc),
|
||||
pointer(uContext^.uc_mcontext.regs[29]));
|
||||
end;
|
47
rtl/linux/aarch64/sighndh.inc
Normal file
47
rtl/linux/aarch64/sighndh.inc
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Jonas Maebe,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
TSigContext and associated structures.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$packrecords C}
|
||||
|
||||
type
|
||||
PSigContext = ^TSigContext;
|
||||
TSigContext = record
|
||||
fault_address : cULong;
|
||||
regs : array[0..30] of cULong;
|
||||
sp : cULong;
|
||||
pc : cULong;
|
||||
pstate : cULong;
|
||||
__pad : cULong;
|
||||
{ The following field should be 16-byte-aligned. Currently the
|
||||
directive for specifying alignment is buggy, so the preceding
|
||||
field was added so that the record has the right size. }
|
||||
__reserved : array[0..4095] of cUChar;
|
||||
end;
|
||||
|
||||
stack_t = record
|
||||
ss_sp : pointer;
|
||||
ss_flags : cInt;
|
||||
ss_size : size_t;
|
||||
end;
|
||||
|
||||
PUContext = ^TUContext;
|
||||
TUContext = record
|
||||
uc_flags : cULong;
|
||||
uc_link : PUContext;
|
||||
uc_stack : stack_t;
|
||||
uc_mcontext : TSigContext;
|
||||
uc_sigmask : sigset_t;
|
||||
end;
|
72
rtl/linux/aarch64/stat.inc
Normal file
72
rtl/linux/aarch64/stat.inc
Normal file
@ -0,0 +1,72 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Jonas Maebe, (c) 2005 Thomas Schatzl,
|
||||
members of the Free Pascal development team.
|
||||
|
||||
Contains the definition of the stat type for the PowerPC64 platform.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{ This structure was adapted from
|
||||
|
||||
include/uapi/asm-generic/stat.h
|
||||
|
||||
in Linux 4.0. Note that the stat record is the same for direct
|
||||
syscalls as for when linking to libc.
|
||||
}
|
||||
|
||||
{$PACKRECORDS C}
|
||||
stat = record
|
||||
case integer of
|
||||
0 : (
|
||||
st_dev : cULong;
|
||||
st_ino : cULong;
|
||||
st_mode : cUInt;
|
||||
st_nlink : cUInt;
|
||||
st_uid : cUInt;
|
||||
st_gid : cUInt;
|
||||
st_rdev : cULong;
|
||||
__pad1a : cULong;
|
||||
st_size : cLong;
|
||||
st_blksize : cInt;
|
||||
__pad2a : cInt;
|
||||
st_blocks : cLong;
|
||||
st_atime : cLong;
|
||||
st_atime_nsec : cULong;
|
||||
st_mtime : cLong;
|
||||
st_mtime_nsec : cULong;
|
||||
st_ctime : cLong;
|
||||
st_ctime_nsec : cULong;
|
||||
__unused4a : cUInt;
|
||||
__unused5a : cUInt;
|
||||
);
|
||||
1 : (
|
||||
dev : cULong deprecated;
|
||||
ino : cULong deprecated;
|
||||
mode : cUInt deprecated;
|
||||
nlink : cUInt deprecated;
|
||||
uid : cUInt deprecated;
|
||||
gid : cUInt deprecated;
|
||||
rdev : cULong deprecated;
|
||||
__pad1b : cULong deprecated;
|
||||
size : cLong deprecated;
|
||||
blksize : cInt deprecated;
|
||||
__pad2b : cInt deprecated;
|
||||
blocks : cLong deprecated;
|
||||
atime : cLong deprecated;
|
||||
atime_nsec : cULong deprecated;
|
||||
mtime : cLong deprecated;
|
||||
mtime_nsec : cULong deprecated;
|
||||
ctime : cLong deprecated;
|
||||
ctime_nsec : cULong deprecated;
|
||||
__unused4b : cUInt deprecated;
|
||||
__unused5b : cUInt deprecated;
|
||||
);
|
||||
end;
|
127
rtl/linux/aarch64/syscall.inc
Normal file
127
rtl/linux/aarch64/syscall.inc
Normal file
@ -0,0 +1,127 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
|
||||
Perform syscall with 0..6 arguments.
|
||||
If syscall return value is negative, negate it, set errno, and return -1.
|
||||
|
||||
Written by Edmund Grimley Evans in 2015 and released into the public domain.
|
||||
}
|
||||
|
||||
function FpSysCall(sysnr:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
|
||||
asm
|
||||
mov w8,w0
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
mov x1,x2
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
mov x1,x2
|
||||
mov x2,x3
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
mov x1,x2
|
||||
mov x2,x3
|
||||
mov x3,x4
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
mov x1,x2
|
||||
mov x2,x3
|
||||
mov x3,x4
|
||||
mov x4,x5
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
||||
|
||||
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
|
||||
assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
|
||||
asm
|
||||
mov w8,w0
|
||||
mov x0,x1
|
||||
mov x1,x2
|
||||
mov x2,x3
|
||||
mov x3,x4
|
||||
mov x4,x5
|
||||
mov x5,x6
|
||||
svc #0
|
||||
tbz x0,#63,.Ldone
|
||||
str x30,[sp,#-16]!
|
||||
neg x0,x0
|
||||
bl seterrno
|
||||
ldr x30,[sp],#16
|
||||
mov x0,#-1
|
||||
.Ldone:
|
||||
end;
|
35
rtl/linux/aarch64/syscallh.inc
Normal file
35
rtl/linux/aarch64/syscallh.inc
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
Copyright (c) 2002 by Marco van de Voort
|
||||
|
||||
Header for syscalls in system unit.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
MA 02110-1301, USA.
|
||||
|
||||
****************************************************************************
|
||||
|
||||
}
|
||||
|
||||
Type
|
||||
TSysResult = Int64;
|
||||
TSysParam = Int64;
|
||||
|
||||
function Do_SysCall(sysnr:TSysParam):TSysResult; external name 'FPC_SYSCALL0';
|
||||
function Do_SysCall(sysnr,param1:TSysParam):TSysResult; external name 'FPC_SYSCALL1';
|
||||
function Do_SysCall(sysnr,param1,param2:TSysParam):TSysResult; external name 'FPC_SYSCALL2';
|
||||
function Do_SysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; external name 'FPC_SYSCALL3';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; external name 'FPC_SYSCALL4';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; external name 'FPC_SYSCALL5';
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; external name 'FPC_SYSCALL6';
|
1
rtl/linux/aarch64/sysnr.inc
Normal file
1
rtl/linux/aarch64/sysnr.inc
Normal file
@ -0,0 +1 @@
|
||||
{$i ../sysnr-gen.inc}
|
@ -297,7 +297,11 @@ end;
|
||||
function fpgetpgrp : pid_t;
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpgetpgrp:=do_syscall(syscall_nr_getpgid,0);
|
||||
{$else}
|
||||
fpgetpgrp:=do_syscall(syscall_nr_getpgrp);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function fpsetsid : pid_t;
|
||||
@ -327,29 +331,59 @@ Function fplink(existing:pchar;newone:pchar):cint;
|
||||
In effect, new will be the same file as old.
|
||||
}
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpLink:=Do_Syscall(syscall_nr_linkat,AT_FDCWD,TSysParam(existing),AT_FDCWD,TSysParam(newone),0);
|
||||
{$else}
|
||||
fpLink:=Do_Syscall(syscall_nr_link,TSysParam(existing),TSysParam(newone));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
Function fpmkfifo(path:pchar;mode:mode_t):cint;
|
||||
|
||||
begin
|
||||
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpmkfifo:=do_syscall(syscall_nr_mknodat,AT_FDCWD,TSysParam(path),TSysParam(mode or S_IFIFO),TSysParam(0));
|
||||
{$else}
|
||||
fpmkfifo:=do_syscall(syscall_nr_mknod,TSysParam(path),TSysParam(mode or S_IFIFO),TSysParam(0));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
Function fpchmod(path:pchar;mode:mode_t):cint;
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpchmod:=do_syscall(syscall_nr_fchmodat,AT_FDCWD,TSysParam(path),TSysParam(mode),0);
|
||||
{$else}
|
||||
fpchmod:=do_syscall(syscall_nr_chmod,TSysParam(path),TSysParam(mode));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
Function fpchown(path:pchar;owner:uid_t;group:gid_t):cint;
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpChOwn:=do_syscall(syscall_nr_fchownat,AT_FDCWD,TSysParam(path),TSysParam(owner),TSysParam(group),0);
|
||||
{$else}
|
||||
fpChOwn:=do_syscall(syscall_nr_chown,TSysParam(path),TSysParam(owner),TSysParam(group));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
{$ifndef NO_SYSCALL_UTIME}
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
|
||||
Function fpUtime(path:pchar;times:putimbuf):cint;
|
||||
var
|
||||
tsa: Array[0..1] of timespec;
|
||||
begin
|
||||
tsa[0].tv_sec := times^.actime;
|
||||
tsa[0].tv_nsec := 0;
|
||||
tsa[1].tv_sec := times^.modtime;
|
||||
tsa[1].tv_nsec := 0;
|
||||
fputime:=do_syscall(syscall_nr_utimensat,AT_FDCWD,TSysParam(path),
|
||||
TSysParam(@tsa),0);
|
||||
end;
|
||||
|
||||
{$elseif not defined(NO_SYSCALL_UTIME)}
|
||||
|
||||
Function fpUtime(path:pchar;times:putimbuf):cint;
|
||||
|
||||
@ -377,7 +411,11 @@ end;
|
||||
Function fppipe(var fildes : tfildes):cint;
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fppipe:=do_syscall(syscall_nr_pipe2,TSysParam(@fildes),0);
|
||||
{$else}
|
||||
fppipe:=do_syscall(syscall_nr_pipe,TSysParam(@fildes));
|
||||
{$endif}
|
||||
end;
|
||||
{$endif FPC_BASEUNIX_HAS_FPPIPE}
|
||||
|
||||
@ -422,6 +460,18 @@ Function fpSelect(N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cin
|
||||
Select checks whether the file descriptor sets in readfs/writefs/exceptfs
|
||||
have changed.
|
||||
}
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
|
||||
var ts : timespec;
|
||||
begin
|
||||
ts.tv_sec := timeout^.tv_sec;
|
||||
ts.tv_nsec := timeout^.tv_usec * 1000;
|
||||
fpSelect:=do_syscall(syscall_nr_pselect6,n,
|
||||
tsysparam(readfds),tsysparam(writefds),
|
||||
tsysparam(exceptfds),tsysparam(@ts),0);
|
||||
end;
|
||||
|
||||
{$else}
|
||||
|
||||
begin
|
||||
{$ifdef cpux86_64}
|
||||
@ -436,10 +486,22 @@ begin
|
||||
{$endif bunxfunc_fpselect_implemented}
|
||||
end;
|
||||
|
||||
{$endif}
|
||||
|
||||
function fpPoll(fds: ppollfd; nfds: cuint; timeout: clong): cint;
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
var ts : timespec;
|
||||
begin
|
||||
ts.tv_sec := timeout div 1000;
|
||||
ts.tv_nsec := (timeout mod 1000) * 1000000;
|
||||
fpPoll:=do_syscall(syscall_nr_ppoll,tsysparam(fds),tsysparam(nfds),
|
||||
tsysparam(@ts),0);
|
||||
end;
|
||||
{$else}
|
||||
begin
|
||||
fpPoll:=do_syscall(syscall_nr_poll,tsysparam(fds),tsysparam(nfds),tsysparam(timeout));
|
||||
end;
|
||||
{$endif}
|
||||
|
||||
Function fpLstat(path:pchar;Info:pstat):cint;
|
||||
{
|
||||
@ -447,6 +509,9 @@ Function fpLstat(path:pchar;Info:pstat):cint;
|
||||
}
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpLStat:=do_syscall(syscall_nr_fstatat,AT_FDCWD,TSysParam(path),TSysParam(info),0)
|
||||
{$else}
|
||||
fpLStat:=do_syscall(
|
||||
{$ifdef cpu64}
|
||||
syscall_nr_lstat,
|
||||
@ -454,6 +519,7 @@ begin
|
||||
syscall_nr_lstat64,
|
||||
{$endif}
|
||||
TSysParam(path),TSysParam(info));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
@ -465,12 +531,12 @@ function fpNice(N:cint):cint;
|
||||
Doesn't exist in BSD. Linux emu uses setpriority in a construct as below:
|
||||
}
|
||||
|
||||
{$ifdef cpux86_64}
|
||||
{$if defined(generic_linux_syscalls) or defined(cpux86_64)}
|
||||
var
|
||||
oldprio : cint;
|
||||
{$endif}
|
||||
begin
|
||||
{$ifdef cpux86_64}
|
||||
{$if defined(generic_linux_syscalls) or defined(cpux86_64)}
|
||||
oldprio:=fpGetPriority(Prio_Process,0);
|
||||
fpNice:=fpSetPriority(Prio_Process,0,oldprio+N);
|
||||
if fpNice=0 then
|
||||
@ -536,7 +602,11 @@ Function fpSymlink(oldname,newname:pchar):cint;
|
||||
}
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
fpsymlink:=do_syscall(syscall_nr_symlinkat,TSysParam(oldname),AT_FDCWD,TSysParam(newname));
|
||||
{$else}
|
||||
fpsymlink:=do_syscall(syscall_nr_symlink,TSysParam(oldname),TSysParam(newname));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function Fppread(fd: cint; buf: pchar; nbytes : size_t; offset:Toff): ssize_t; [public, alias : 'FPC_SYSC_PREAD'];
|
||||
|
@ -17,6 +17,8 @@
|
||||
**********************************************************************}
|
||||
unit Linux;
|
||||
|
||||
{$i osdefs.inc}
|
||||
|
||||
{$packrecords c}
|
||||
{$ifdef FPC_USE_LIBC}
|
||||
{$linklib rt} // for clock* functions
|
||||
@ -527,7 +529,11 @@ end;
|
||||
|
||||
function epoll_create(size: cint): cint;
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
epoll_create := do_syscall(syscall_nr_epoll_create1,0)
|
||||
{$else}
|
||||
epoll_create := do_syscall(syscall_nr_epoll_create,tsysparam(size));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function epoll_ctl(epfd, op, fd: cint; event: pepoll_event): cint;
|
||||
@ -538,8 +544,13 @@ end;
|
||||
|
||||
function epoll_wait(epfd: cint; events: pepoll_event; maxevents, timeout: cint): cint;
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
epoll_wait := do_syscall(syscall_nr_epoll_pwait, tsysparam(epfd),
|
||||
tsysparam(events), tsysparam(maxevents), tsysparam(timeout),0);
|
||||
{$else}
|
||||
epoll_wait := do_syscall(syscall_nr_epoll_wait, tsysparam(epfd),
|
||||
tsysparam(events), tsysparam(maxevents), tsysparam(timeout));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function capget(header:Puser_cap_header;data:Puser_cap_data):cint;
|
||||
@ -695,7 +706,11 @@ end;
|
||||
function inotify_init1(flags:cint):cint;
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
inotify_init1:=do_SysCall(syscall_nr_inotify_init1,tsysparam(flags));
|
||||
{$else}
|
||||
inotify_init1:=do_SysCall(syscall_nr_inotify_init,tsysparam(flags));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function inotify_add_watch(fd:cint; name:Pchar; mask:cuint32):cint;
|
||||
|
@ -1924,9 +1924,16 @@ Function Sys_Mkdir(Filename:pchar;mode:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
regs.reg2:=AT_FDCWD;
|
||||
regs.reg3:=longint(filename);
|
||||
regs.reg4:=mode;
|
||||
Sys_MkDir:=SysCall(SysCall_nr_mkdirat,regs);
|
||||
{$else}
|
||||
regs.reg2:=longint(filename);
|
||||
regs.reg3:=mode;
|
||||
Sys_MkDir:=SysCall(SysCall_nr_mkdir,regs);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
@ -1935,8 +1942,15 @@ Function Sys_Rmdir(Filename:pchar):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
regs.reg2:=AT_FDCWD;
|
||||
regs.reg3:=longint(filename);
|
||||
regs.reg4:=AT_REMOVEDIR;
|
||||
Sys_Rmdir:=SysCall(SysCall_nr_unlinkat,regs);
|
||||
{$else}
|
||||
regs.reg2:=longint(filename);
|
||||
Sys_Rmdir:=SysCall(SysCall_nr_rmdir,regs);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
@ -2744,7 +2758,18 @@ var
|
||||
begin
|
||||
sr.reg2:=oldfile;
|
||||
sr.reg3:=newfile;
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
sr.reg4:=0;
|
||||
if oldfile<>newfile then
|
||||
SysCall(Syscall_nr_dup3,sr)
|
||||
else
|
||||
begin
|
||||
sr.reg3:=F_GetFd;
|
||||
SysCall(Syscall_nr_fcntl,sr);
|
||||
end;
|
||||
{$else}
|
||||
SysCall(Syscall_nr_dup2,sr);
|
||||
{$endif}
|
||||
linuxerror:=errno;
|
||||
Dup2:=(LinuxError=0);
|
||||
end;
|
||||
@ -2782,7 +2807,12 @@ var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(@pip);
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
regs.reg3:=0;
|
||||
SysCall(SysCall_nr_pipe2,regs);
|
||||
{$else}
|
||||
SysCall(SysCall_nr_pipe,regs);
|
||||
{$endif}
|
||||
pipe_in:=pip[1];
|
||||
pipe_out:=pip[2];
|
||||
linuxerror:=errno;
|
||||
|
@ -85,3 +85,7 @@
|
||||
{$endif FPC_ABI_EABI}
|
||||
{$endif cpuarm}
|
||||
|
||||
{$ifdef cpuaarch64}
|
||||
{$define generic_linux_syscalls}
|
||||
{$undef usestime}
|
||||
{$endif cpuaarch64}
|
||||
|
@ -20,7 +20,7 @@
|
||||
*****************************************************************************}
|
||||
|
||||
function Fptime(tloc:pTime_t): Time_t; [public, alias : 'FPC_SYSC_TIME'];
|
||||
{$ifdef FPC_USEGETTIMEOFDAY}
|
||||
{$if defined(generic_linux_syscalls) or defined(FPC_USEGETTIMEOFDAY)}
|
||||
VAR tv : timeval;
|
||||
tz : timezone;
|
||||
retval : longint;
|
||||
@ -49,7 +49,11 @@ end;
|
||||
function Fpopen(path: pchar; flags : cint; mode: mode_t):cint; [public, alias : 'FPC_SYSC_OPEN'];
|
||||
|
||||
Begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpopen:=do_syscall(syscall_nr_openat,AT_FDCWD,TSysParam(path),TSysParam(flags or O_LARGEFILE),TSysParam(mode));
|
||||
{$else}
|
||||
Fpopen:=do_syscall(syscall_nr_open,TSysParam(path),TSysParam(flags or O_LARGEFILE),TSysParam(mode));
|
||||
{$endif}
|
||||
End;
|
||||
|
||||
function Fpclose(fd : cint): cint; [public, alias : 'FPC_SYSC_CLOSE'];
|
||||
@ -98,20 +102,32 @@ end;
|
||||
function Fpunlink(path: pchar): cint; [public, alias : 'FPC_SYSC_UNLINK'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpunlink:=do_syscall(syscall_nr_unlinkat,AT_FDCWD,TSysParam(path),0);
|
||||
{$else}
|
||||
Fpunlink:=do_syscall(syscall_nr_unlink,TSysParam(path));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function Fprename(old : pchar; newpath: pchar): cint; [public, alias : 'FPC_SYSC_RENAME'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fprename:=do_syscall(syscall_nr_renameat,AT_FDCWD,TSysParam(old),AT_FDCWD,TSysParam(newpath));
|
||||
{$else}
|
||||
Fprename:=do_syscall(syscall_nr_rename,TSysParam(old),TSysParam(newpath));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function Fpstat(path: pchar; var buf: stat):cint; [public, alias : 'FPC_SYSC_STAT'];
|
||||
|
||||
begin
|
||||
{$if defined(cpu64)}
|
||||
Fpstat:=do_syscall(syscall_nr_stat,TSysParam(path),TSysParam(@buf));
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpstat:=do_syscall(syscall_nr_fstatat,AT_FDCWD,TSysParam(path),TSysParam(@buf),0);
|
||||
{$else}
|
||||
Fpstat:=do_syscall(syscall_nr_stat,TSysParam(path),TSysParam(@buf));
|
||||
{$endif}
|
||||
{$else}
|
||||
Fpstat:=do_syscall(syscall_nr_stat64,TSysParam(path),TSysParam(@buf));
|
||||
{$endif}
|
||||
@ -130,13 +146,21 @@ end;
|
||||
function Fpmkdir(path : pchar; mode: mode_t):cint; [public, alias : 'FPC_SYSC_MKDIR'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpmkdir:=do_syscall(syscall_nr_mkdirat,AT_FDCWD,TSysParam(path),TSysParam(mode));
|
||||
{$else}
|
||||
Fpmkdir:=do_syscall(syscall_nr_mkdir,TSysParam(path),TSysParam(mode));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function Fprmdir(path : pchar): cint; [public, alias : 'FPC_SYSC_RMDIR'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fprmdir:=do_syscall(syscall_nr_unlinkat,AT_FDCWD,TSysParam(path),AT_REMOVEDIR);
|
||||
{$else}
|
||||
Fprmdir:=do_syscall(syscall_nr_rmdir,TSysParam(path));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
function Fpopendir(dirname : pchar): pdir; [public, alias : 'FPC_SYSC_OPENDIR'];
|
||||
@ -363,7 +387,11 @@ function Fpfstat(fd : cint; var sb : stat): cint; [public, alias : 'FPC_SYSC_FS
|
||||
|
||||
begin
|
||||
{$if defined(cpu64)}
|
||||
FpFStat:=do_SysCall(syscall_nr_fstat,TSysParam(fd),TSysParam(@sb));
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
FpFStat:=do_SysCall(syscall_nr_fstat,TSysParam(fd),TSysParam(@sb));
|
||||
{$else}
|
||||
FpFStat:=do_SysCall(syscall_nr_fstat,TSysParam(fd),TSysParam(@sb));
|
||||
{$endif}
|
||||
{$else}
|
||||
FpFStat:=do_SysCall(syscall_nr_fstat64,TSysParam(fd),TSysParam(@sb));
|
||||
{$endif}
|
||||
@ -380,9 +408,14 @@ function Fpfork : pid_t; [public, alias : 'FPC_SYSC_FORK'];
|
||||
A negative value indicates that an error has occurred, the error is returned in
|
||||
LinuxError.
|
||||
}
|
||||
|
||||
var
|
||||
pid : Int64;
|
||||
Begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpfork:=Do_syscall(syscall_nr_clone,clone_flags_fork,0,0,0,TSysParam(@pid));
|
||||
{$else}
|
||||
Fpfork:=Do_syscall(SysCall_nr_fork);
|
||||
{$endif}
|
||||
End;
|
||||
{$endif FPC_SYSTEM_HAS_FPFORK}
|
||||
|
||||
@ -425,7 +458,7 @@ function Fpwaitpid(pid : pid_t; stat_loc : pcint; options: cint): pid_t; [public
|
||||
}
|
||||
|
||||
begin
|
||||
{$ifdef WAIT4}
|
||||
{$if defined(generic_linux_syscalls) or defined(WAIT4)}
|
||||
FpWaitPID:=do_syscall(syscall_nr_Wait4,PID,TSysParam(Stat_loc),options,0);
|
||||
{$else WAIT4}
|
||||
FpWaitPID:=do_syscall(syscall_nr_WaitPID,PID,TSysParam(Stat_loc),options);
|
||||
@ -447,7 +480,11 @@ function Fpaccess(pathname : pchar; amode : cint): cint; [public, alias : 'FPC_S
|
||||
}
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
FpAccess:=do_syscall(syscall_nr_faccessat,AT_FDCWD,TSysParam(pathname),amode,0);
|
||||
{$else}
|
||||
FpAccess:=do_syscall(syscall_nr_access,TSysParam(pathname),amode);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
(* overloaded
|
||||
@ -481,7 +518,16 @@ end;
|
||||
Function FpDup2(fildes,fildes2:cint):cint; [public, alias : 'FPC_SYSC_DUP2'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
if fildes<>fildes2 then
|
||||
Fpdup2:=do_syscall(syscall_nr_dup3,TSysParam(fildes),TSysParam(fildes2),0)
|
||||
else if do_syscall(syscall_nr_fcntl,TSysParam(fildes),1)<>-1 then
|
||||
Fpdup2:=fildes2
|
||||
else
|
||||
Fpdup2:=-1;
|
||||
{$else}
|
||||
Fpdup2:=do_syscall(syscall_nr_dup2,TSysParam(fildes),TSysParam(fildes2));
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
@ -572,7 +618,11 @@ end;
|
||||
Function FpReadLink(name,linkname:pchar;maxlen:size_t):cint; [public, alias : 'FPC_SYSC_READLINK'];
|
||||
|
||||
begin
|
||||
{$if defined(generic_linux_syscalls)}
|
||||
Fpreadlink:=do_syscall(syscall_nr_readlinkat,AT_FDCWD,TSysParam(name),TSysParam(linkname),maxlen);
|
||||
{$else}
|
||||
Fpreadlink:=do_syscall(syscall_nr_readlink, TSysParam(name),TSysParam(linkname),maxlen);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
|
@ -290,7 +290,12 @@ CONST
|
||||
{$endif not cpumips}
|
||||
{$endif not cpusparc}
|
||||
|
||||
{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k)}
|
||||
AT_FDCWD = -100;
|
||||
AT_REMOVEDIR = $200;
|
||||
clone_flags_fork = $01200011;
|
||||
{ SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID }
|
||||
|
||||
{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k) or defined(aarch64)}
|
||||
O_LARGEFILE = $20000;
|
||||
{$endif}
|
||||
{$if defined(cpusparc) or defined(cpusparc64)}
|
||||
|
@ -19,10 +19,12 @@
|
||||
from the system unit interface; macro's have to be on at this point
|
||||
because they're use to propagate the MUTEXTYPENAME here }
|
||||
|
||||
{$ifdef CPUMIPS}
|
||||
{$if defined(CPUMIPS) or defined(cpuaarch64)}
|
||||
{$define USE_PTHREAD_SIZEOF}
|
||||
|
||||
{$ifdef CPU64}
|
||||
{$if defined(cpuaarch64)}
|
||||
{$define __SIZEOF_PTHREAD_MUTEX_T := 48}
|
||||
{$elseif defined(CPU64)}
|
||||
{$define __SIZEOF_PTHREAD_MUTEX_T := 40}
|
||||
{$else CPU64}
|
||||
{$define __SIZEOF_PTHREAD_MUTEX_T := 24}
|
||||
|
@ -30,9 +30,19 @@ and all three 32-bit systems returned completely identical types too
|
||||
introduction)
|
||||
}
|
||||
|
||||
{$ifdef CPUMIPS}
|
||||
{$if defined(CPUMIPS) or defined(cpuaarch64)}
|
||||
{$define USE_PTHREAD_SIZEOF}
|
||||
{$ifdef CPU64}
|
||||
{$if defined(cpuaarch64)}
|
||||
const
|
||||
__SIZEOF_PTHREAD_ATTR_T = 64;
|
||||
__SIZEOF_PTHREAD_MUTEXATTR_T = 8;
|
||||
__SIZEOF_PTHREAD_COND_T = 48;
|
||||
__SIZEOF_PTHREAD_CONDATTR_T = 8;
|
||||
__SIZEOF_PTHREAD_RWLOCK_T = 56;
|
||||
__SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
|
||||
__SIZEOF_PTHREAD_BARRIER_T = 32;
|
||||
__SIZEOF_PTHREAD_BARRIERATTR_T = 8;
|
||||
{$elseif defined(CPU64)}
|
||||
const
|
||||
__SIZEOF_PTHREAD_ATTR_T = 56;
|
||||
__SIZEOF_PTHREAD_MUTEXATTR_T = 4;
|
||||
@ -53,7 +63,7 @@ const
|
||||
__SIZEOF_PTHREAD_BARRIER_T = 20;
|
||||
__SIZEOF_PTHREAD_BARRIERATTR_T = 4;
|
||||
{$endif CPU32}
|
||||
{$endif MIPS}
|
||||
{$endif}
|
||||
|
||||
{$I ctypes.inc}
|
||||
{$packrecords c}
|
||||
|
277
rtl/linux/sysnr-gen.inc
Normal file
277
rtl/linux/sysnr-gen.inc
Normal file
@ -0,0 +1,277 @@
|
||||
|
||||
{
|
||||
System call numbers taken from include/uapi/asm-generic/unistd.h
|
||||
in a 4.0 Linux kernel. They are therefore architecture-independent,
|
||||
though only the newest architectures use this generic list.
|
||||
}
|
||||
|
||||
Const
|
||||
syscall_nr_io_setup = 0;
|
||||
syscall_nr_io_destroy = 1;
|
||||
syscall_nr_io_submit = 2;
|
||||
syscall_nr_io_cancel = 3;
|
||||
syscall_nr_io_getevents = 4;
|
||||
syscall_nr_setxattr = 5;
|
||||
syscall_nr_lsetxattr = 6;
|
||||
syscall_nr_fsetxattr = 7;
|
||||
syscall_nr_getxattr = 8;
|
||||
syscall_nr_lgetxattr = 9;
|
||||
syscall_nr_fgetxattr = 10;
|
||||
syscall_nr_listxattr = 11;
|
||||
syscall_nr_llistxattr = 12;
|
||||
syscall_nr_flistxattr = 13;
|
||||
syscall_nr_removexattr = 14;
|
||||
syscall_nr_lremovexattr = 15;
|
||||
syscall_nr_fremovexattr = 16;
|
||||
syscall_nr_getcwd = 17;
|
||||
syscall_nr_lookup_dcookie = 18;
|
||||
syscall_nr_eventfd2 = 19;
|
||||
syscall_nr_epoll_create1 = 20;
|
||||
syscall_nr_epoll_ctl = 21;
|
||||
syscall_nr_epoll_pwait = 22;
|
||||
syscall_nr_dup = 23;
|
||||
syscall_nr_dup3 = 24;
|
||||
syscall_nr_fcntl = 25;
|
||||
syscall_nr_inotify_init1 = 26;
|
||||
syscall_nr_inotify_add_watch = 27;
|
||||
syscall_nr_inotify_rm_watch = 28;
|
||||
syscall_nr_ioctl = 29;
|
||||
syscall_nr_ioprio_set = 30;
|
||||
syscall_nr_ioprio_get = 31;
|
||||
syscall_nr_flock = 32;
|
||||
syscall_nr_mknodat = 33;
|
||||
syscall_nr_mkdirat = 34;
|
||||
syscall_nr_unlinkat = 35;
|
||||
syscall_nr_symlinkat = 36;
|
||||
syscall_nr_linkat = 37;
|
||||
syscall_nr_renameat = 38;
|
||||
syscall_nr_umount2 = 39;
|
||||
syscall_nr_mount = 40;
|
||||
syscall_nr_pivot_root = 41;
|
||||
syscall_nr_nfsservctl = 42;
|
||||
syscall_nr_statfs = 43;
|
||||
syscall_nr_fstatfs = 44;
|
||||
syscall_nr_truncate = 45;
|
||||
syscall_nr_ftruncate = 46;
|
||||
syscall_nr_fallocate = 47;
|
||||
syscall_nr_faccessat = 48;
|
||||
syscall_nr_chdir = 49;
|
||||
syscall_nr_fchdir = 50;
|
||||
syscall_nr_chroot = 51;
|
||||
syscall_nr_fchmod = 52;
|
||||
syscall_nr_fchmodat = 53;
|
||||
syscall_nr_fchownat = 54;
|
||||
syscall_nr_fchown = 55;
|
||||
syscall_nr_openat = 56;
|
||||
syscall_nr_close = 57;
|
||||
syscall_nr_vhangup = 58;
|
||||
syscall_nr_pipe2 = 59;
|
||||
syscall_nr_quotactl = 60;
|
||||
syscall_nr_getdents64 = 61;
|
||||
syscall_nr_lseek = 62;
|
||||
syscall_nr_read = 63;
|
||||
syscall_nr_write = 64;
|
||||
syscall_nr_readv = 65;
|
||||
syscall_nr_writev = 66;
|
||||
syscall_nr_pread64 = 67;
|
||||
syscall_nr_pwrite64 = 68;
|
||||
syscall_nr_preadv = 69;
|
||||
syscall_nr_pwritev = 70;
|
||||
syscall_nr_sendfile = 71;
|
||||
syscall_nr_pselect6 = 72;
|
||||
syscall_nr_ppoll = 73;
|
||||
syscall_nr_signalfd4 = 74;
|
||||
syscall_nr_vmsplice = 75;
|
||||
syscall_nr_splice = 76;
|
||||
syscall_nr_tee = 77;
|
||||
syscall_nr_readlinkat = 78;
|
||||
syscall_nr_fstatat = 79;
|
||||
syscall_nr_fstat = 80;
|
||||
syscall_nr_sync = 81;
|
||||
syscall_nr_fsync = 82;
|
||||
syscall_nr_fdatasync = 83;
|
||||
syscall_nr_sync_file_range = 84;
|
||||
syscall_nr_timerfd_create = 85;
|
||||
syscall_nr_timerfd_settime = 86;
|
||||
syscall_nr_timerfd_gettime = 87;
|
||||
syscall_nr_utimensat = 88;
|
||||
syscall_nr_acct = 89;
|
||||
syscall_nr_capget = 90;
|
||||
syscall_nr_capset = 91;
|
||||
syscall_nr_personality = 92;
|
||||
syscall_nr_exit = 93;
|
||||
syscall_nr_exit_group = 94;
|
||||
syscall_nr_waitid = 95;
|
||||
syscall_nr_set_tid_address = 96;
|
||||
syscall_nr_unshare = 97;
|
||||
syscall_nr_futex = 98;
|
||||
syscall_nr_set_robust_list = 99;
|
||||
syscall_nr_get_robust_list = 100;
|
||||
syscall_nr_nanosleep = 101;
|
||||
syscall_nr_getitimer = 102;
|
||||
syscall_nr_setitimer = 103;
|
||||
syscall_nr_kexec_load = 104;
|
||||
syscall_nr_init_module = 105;
|
||||
syscall_nr_delete_module = 106;
|
||||
syscall_nr_timer_create = 107;
|
||||
syscall_nr_timer_gettime = 108;
|
||||
syscall_nr_timer_getoverrun = 109;
|
||||
syscall_nr_timer_settime = 110;
|
||||
syscall_nr_timer_delete = 111;
|
||||
syscall_nr_clock_settime = 112;
|
||||
syscall_nr_clock_gettime = 113;
|
||||
syscall_nr_clock_getres = 114;
|
||||
syscall_nr_clock_nanosleep = 115;
|
||||
syscall_nr_syslog = 116;
|
||||
syscall_nr_ptrace = 117;
|
||||
syscall_nr_sched_setparam = 118;
|
||||
syscall_nr_sched_setscheduler = 119;
|
||||
syscall_nr_sched_getscheduler = 120;
|
||||
syscall_nr_sched_getparam = 121;
|
||||
syscall_nr_sched_setaffinity = 122;
|
||||
syscall_nr_sched_getaffinity = 123;
|
||||
syscall_nr_sched_yield = 124;
|
||||
syscall_nr_sched_get_priority_max = 125;
|
||||
syscall_nr_sched_get_priority_min = 126;
|
||||
syscall_nr_sched_rr_get_interval = 127;
|
||||
syscall_nr_restart_syscall = 128;
|
||||
syscall_nr_kill = 129;
|
||||
syscall_nr_tkill = 130;
|
||||
syscall_nr_tgkill = 131;
|
||||
syscall_nr_sigaltstack = 132;
|
||||
syscall_nr_rt_sigsuspend = 133;
|
||||
syscall_nr_rt_sigaction = 134;
|
||||
syscall_nr_rt_sigprocmask = 135;
|
||||
syscall_nr_rt_sigpending = 136;
|
||||
syscall_nr_rt_sigtimedwait = 137;
|
||||
syscall_nr_rt_sigqueueinfo = 138;
|
||||
syscall_nr_rt_sigreturn = 139;
|
||||
syscall_nr_setpriority = 140;
|
||||
syscall_nr_getpriority = 141;
|
||||
syscall_nr_reboot = 142;
|
||||
syscall_nr_setregid = 143;
|
||||
syscall_nr_setgid = 144;
|
||||
syscall_nr_setreuid = 145;
|
||||
syscall_nr_setuid = 146;
|
||||
syscall_nr_setresuid = 147;
|
||||
syscall_nr_getresuid = 148;
|
||||
syscall_nr_setresgid = 149;
|
||||
syscall_nr_getresgid = 150;
|
||||
syscall_nr_setfsuid = 151;
|
||||
syscall_nr_setfsgid = 152;
|
||||
syscall_nr_times = 153;
|
||||
syscall_nr_setpgid = 154;
|
||||
syscall_nr_getpgid = 155;
|
||||
syscall_nr_getsid = 156;
|
||||
syscall_nr_setsid = 157;
|
||||
syscall_nr_getgroups = 158;
|
||||
syscall_nr_setgroups = 159;
|
||||
syscall_nr_uname = 160;
|
||||
syscall_nr_sethostname = 161;
|
||||
syscall_nr_setdomainname = 162;
|
||||
syscall_nr_getrlimit = 163;
|
||||
syscall_nr_setrlimit = 164;
|
||||
syscall_nr_getrusage = 165;
|
||||
syscall_nr_umask = 166;
|
||||
syscall_nr_prctl = 167;
|
||||
syscall_nr_getcpu = 168;
|
||||
syscall_nr_gettimeofday = 169;
|
||||
syscall_nr_settimeofday = 170;
|
||||
syscall_nr_adjtimex = 171;
|
||||
syscall_nr_getpid = 172;
|
||||
syscall_nr_getppid = 173;
|
||||
syscall_nr_getuid = 174;
|
||||
syscall_nr_geteuid = 175;
|
||||
syscall_nr_getgid = 176;
|
||||
syscall_nr_getegid = 177;
|
||||
syscall_nr_gettid = 178;
|
||||
syscall_nr_sysinfo = 179;
|
||||
syscall_nr_mq_open = 180;
|
||||
syscall_nr_mq_unlink = 181;
|
||||
syscall_nr_mq_timedsend = 182;
|
||||
syscall_nr_mq_timedreceive = 183;
|
||||
syscall_nr_mq_notify = 184;
|
||||
syscall_nr_mq_getsetattr = 185;
|
||||
syscall_nr_msgget = 186;
|
||||
syscall_nr_msgctl = 187;
|
||||
syscall_nr_msgrcv = 188;
|
||||
syscall_nr_msgsnd = 189;
|
||||
syscall_nr_semget = 190;
|
||||
syscall_nr_semctl = 191;
|
||||
syscall_nr_semtimedop = 192;
|
||||
syscall_nr_semop = 193;
|
||||
syscall_nr_shmget = 194;
|
||||
syscall_nr_shmctl = 195;
|
||||
syscall_nr_shmat = 196;
|
||||
syscall_nr_shmdt = 197;
|
||||
syscall_nr_socket = 198;
|
||||
syscall_nr_socketpair = 199;
|
||||
syscall_nr_bind = 200;
|
||||
syscall_nr_listen = 201;
|
||||
syscall_nr_accept = 202;
|
||||
syscall_nr_connect = 203;
|
||||
syscall_nr_getsockname = 204;
|
||||
syscall_nr_getpeername = 205;
|
||||
syscall_nr_sendto = 206;
|
||||
syscall_nr_recvfrom = 207;
|
||||
syscall_nr_setsockopt = 208;
|
||||
syscall_nr_getsockopt = 209;
|
||||
syscall_nr_shutdown = 210;
|
||||
syscall_nr_sendmsg = 211;
|
||||
syscall_nr_recvmsg = 212;
|
||||
syscall_nr_readahead = 213;
|
||||
syscall_nr_brk = 214;
|
||||
syscall_nr_munmap = 215;
|
||||
syscall_nr_mremap = 216;
|
||||
syscall_nr_add_key = 217;
|
||||
syscall_nr_request_key = 218;
|
||||
syscall_nr_keyctl = 219;
|
||||
syscall_nr_clone = 220;
|
||||
syscall_nr_execve = 221;
|
||||
syscall_nr_mmap = 222;
|
||||
syscall_nr_fadvise64 = 223;
|
||||
syscall_nr_swapon = 224;
|
||||
syscall_nr_swapoff = 225;
|
||||
syscall_nr_mprotect = 226;
|
||||
syscall_nr_msync = 227;
|
||||
syscall_nr_mlock = 228;
|
||||
syscall_nr_munlock = 229;
|
||||
syscall_nr_mlockall = 230;
|
||||
syscall_nr_munlockall = 231;
|
||||
syscall_nr_mincore = 232;
|
||||
syscall_nr_madvise = 233;
|
||||
syscall_nr_remap_file_pages = 234;
|
||||
syscall_nr_mbind = 235;
|
||||
syscall_nr_get_mempolicy = 236;
|
||||
syscall_nr_set_mempolicy = 237;
|
||||
syscall_nr_migrate_pages = 238;
|
||||
syscall_nr_move_pages = 239;
|
||||
syscall_nr_rt_tgsigqueueinfo = 240;
|
||||
syscall_nr_perf_event_open = 241;
|
||||
syscall_nr_accept4 = 242;
|
||||
syscall_nr_recvmmsg = 243;
|
||||
syscall_nr_arch_specific_syscall = 244;
|
||||
|
||||
syscall_nr_wait4 = 260;
|
||||
syscall_nr_prlimit64 = 261;
|
||||
syscall_nr_fanotify_init = 262;
|
||||
syscall_nr_fanotify_mark = 263;
|
||||
syscall_nr_name_to_handle_at = 264;
|
||||
syscall_nr_open_by_handle_at = 265;
|
||||
syscall_nr_clock_adjtime = 266;
|
||||
syscall_nr_syncfs = 267;
|
||||
syscall_nr_setns = 268;
|
||||
syscall_nr_sendmmsg = 269;
|
||||
syscall_nr_process_vm_readv = 270;
|
||||
syscall_nr_process_vm_writev = 271;
|
||||
syscall_nr_kcmp = 272;
|
||||
syscall_nr_finit_module = 273;
|
||||
syscall_nr_sched_setattr = 274;
|
||||
syscall_nr_sched_getattr = 275;
|
||||
syscall_nr_renameat2 = 276;
|
||||
syscall_nr_seccomp = 277;
|
||||
syscall_nr_getrandom = 278;
|
||||
syscall_nr_memfd_create = 279;
|
||||
syscall_nr_bpf = 280;
|
||||
syscall_nr_execveat = 281;
|
||||
syscall_nr_syscalls = 282;
|
@ -22,6 +22,271 @@ Const
|
||||
NCCS = 32;
|
||||
NCC = 8;
|
||||
|
||||
{$ifdef cpuaarch64}
|
||||
|
||||
{ from Linux 4.0, include/uapi/asm-generic/ioctls.h }
|
||||
|
||||
{ For Terminal handling }
|
||||
TCGETS = $5401;
|
||||
TCSETS = $5402;
|
||||
TCSETSW = $5403;
|
||||
TCSETSF = $5404;
|
||||
TCGETA = $5405;
|
||||
TCSETA = $5406;
|
||||
TCSETAW = $5407;
|
||||
TCSETAF = $5408;
|
||||
TCSBRK = $5409;
|
||||
TCXONC = $540A;
|
||||
TCFLSH = $540B;
|
||||
TIOCEXCL = $540C;
|
||||
TIOCNXCL = $540D;
|
||||
TIOCSCTTY = $540E;
|
||||
TIOCGPGRP = $540F;
|
||||
TIOCSPGRP = $5410;
|
||||
TIOCOUTQ = $5411;
|
||||
TIOCSTI = $5412;
|
||||
TIOCGWINSZ = $5413;
|
||||
TIOCSWINSZ = $5414;
|
||||
TIOCMGET = $5415;
|
||||
TIOCMBIS = $5416;
|
||||
TIOCMBIC = $5417;
|
||||
TIOCMSET = $5418;
|
||||
TIOCGSOFTCAR = $5419;
|
||||
TIOCSSOFTCAR = $541A;
|
||||
FIONREAD = $541B;
|
||||
TIOCINQ = FIONREAD;
|
||||
TIOCLINUX = $541C;
|
||||
TIOCCONS = $541D;
|
||||
TIOCGSERIAL = $541E;
|
||||
TIOCSSERIAL = $541F;
|
||||
TIOCPKT = $5420;
|
||||
FIONBIO = $5421;
|
||||
TIOCNOTTY = $5422;
|
||||
TIOCSETD = $5423;
|
||||
TIOCGETD = $5424;
|
||||
TCSBRKP = $5425;
|
||||
|
||||
TIOCSBRK = $5427;
|
||||
TIOCCBRK = $5428;
|
||||
TIOCGSID = $5429;
|
||||
|
||||
TIOCGRS485 = $542E;
|
||||
TIOCSRS485 = $542F;
|
||||
|
||||
TCGETX = $5432;
|
||||
TCSETX = $5433;
|
||||
TCSETXF = $5434;
|
||||
TCSETXW = $5435;
|
||||
TIOCVHANGUP = $5437;
|
||||
|
||||
FIONCLEX = $5450;
|
||||
FIOCLEX = $5451;
|
||||
FIOASYNC = $5452;
|
||||
TIOCSERCONFIG = $5453;
|
||||
TIOCSERGWILD = $5454;
|
||||
TIOCSERSWILD = $5455;
|
||||
TIOCGLCKTRMIOS = $5456;
|
||||
TIOCSLCKTRMIOS = $5457;
|
||||
TIOCSERGSTRUCT = $5458;
|
||||
TIOCSERGETLSR = $5459;
|
||||
TIOCSERGETMULTI = $545A;
|
||||
TIOCSERSETMULTI = $545B;
|
||||
TIOCMIWAIT = $545C;
|
||||
TIOCGICOUNT = $545D;
|
||||
|
||||
FIOQSIZE = $5460;
|
||||
|
||||
TIOCPKT_DATA = 0;
|
||||
TIOCPKT_FLUSHREAD = 1;
|
||||
TIOCPKT_FLUSHWRITE = 2;
|
||||
TIOCPKT_STOP = 4;
|
||||
TIOCPKT_START = 8;
|
||||
TIOCPKT_NOSTOP = 16;
|
||||
TIOCPKT_DOSTOP = 32;
|
||||
TIOCPKT_IOCTL = 64;
|
||||
|
||||
TIOCSER_TEMT = $01;
|
||||
|
||||
{ from Linux 4.0, include/uapi/asm-generic/termbits.h }
|
||||
|
||||
{ c_cc characters }
|
||||
VINTR = 0;
|
||||
VQUIT = 1;
|
||||
VERASE = 2;
|
||||
VKILL = 3;
|
||||
VEOF = 4;
|
||||
VTIME = 5;
|
||||
VMIN = 6;
|
||||
VSWTC = 7;
|
||||
VSTART = 8;
|
||||
VSTOP = 9;
|
||||
VSUSP = 10;
|
||||
VEOL = 11;
|
||||
VREPRINT = 12;
|
||||
VDISCARD = 13;
|
||||
VWERASE = 14;
|
||||
VLNEXT = 15;
|
||||
VEOL2 = 16;
|
||||
|
||||
{ c_iflag bits }
|
||||
IGNBRK = &0000001;
|
||||
BRKINT = &0000002;
|
||||
IGNPAR = &0000004;
|
||||
PARMRK = &0000010;
|
||||
INPCK = &0000020;
|
||||
ISTRIP = &0000040;
|
||||
INLCR = &0000100;
|
||||
IGNCR = &0000200;
|
||||
ICRNL = &0000400;
|
||||
IUCLC = &0001000;
|
||||
IXON = &0002000;
|
||||
IXANY = &0004000;
|
||||
IXOFF = &0010000;
|
||||
IMAXBEL = &0020000;
|
||||
IUTF8 = &0040000;
|
||||
|
||||
{ c_oflag bits }
|
||||
OPOST = &0000001;
|
||||
OLCUC = &0000002;
|
||||
ONLCR = &0000004;
|
||||
OCRNL = &0000010;
|
||||
ONOCR = &0000020;
|
||||
ONLRET = &0000040;
|
||||
OFILL = &0000100;
|
||||
OFDEL = &0000200;
|
||||
NLDLY = &0000400;
|
||||
NL0 = &0000000;
|
||||
NL1 = &0000400;
|
||||
CRDLY = &0003000;
|
||||
CR0 = &0000000;
|
||||
CR1 = &0001000;
|
||||
CR2 = &0002000;
|
||||
CR3 = &0003000;
|
||||
TABDLY = &0014000;
|
||||
TAB0 = &0000000;
|
||||
TAB1 = &0004000;
|
||||
TAB2 = &0010000;
|
||||
TAB3 = &0014000;
|
||||
XTABS = &0014000;
|
||||
BSDLY = &0020000;
|
||||
BS0 = &0000000;
|
||||
BS1 = &0020000;
|
||||
VTDLY = &0040000;
|
||||
VT0 = &0000000;
|
||||
VT1 = &0040000;
|
||||
FFDLY = &0100000;
|
||||
FF0 = &0000000;
|
||||
FF1 = &0100000;
|
||||
|
||||
{ c_cflag bits }
|
||||
CBAUD = &0010017;
|
||||
B0 = &0000000;
|
||||
B50 = &0000001;
|
||||
B75 = &0000002;
|
||||
B110 = &0000003;
|
||||
B134 = &0000004;
|
||||
B150 = &0000005;
|
||||
B200 = &0000006;
|
||||
B300 = &0000007;
|
||||
B600 = &0000010;
|
||||
B1200 = &0000011;
|
||||
B1800 = &0000012;
|
||||
B2400 = &0000013;
|
||||
B4800 = &0000014;
|
||||
B9600 = &0000015;
|
||||
B19200 = &0000016;
|
||||
B38400 = &0000017;
|
||||
EXTA = B19200;
|
||||
EXTB = B38400;
|
||||
CSIZE = &0000060;
|
||||
CS5 = &0000000;
|
||||
CS6 = &0000020;
|
||||
CS7 = &0000040;
|
||||
CS8 = &0000060;
|
||||
CSTOPB = &0000100;
|
||||
CREAD = &0000200;
|
||||
PARENB = &0000400;
|
||||
PARODD = &0001000;
|
||||
HUPCL = &0002000;
|
||||
CLOCAL = &0004000;
|
||||
CBAUDEX = &0010000;
|
||||
BOTHER = &0010000;
|
||||
B57600 = &0010001;
|
||||
B115200 = &0010002;
|
||||
B230400 = &0010003;
|
||||
B460800 = &0010004;
|
||||
B500000 = &0010005;
|
||||
B576000 = &0010006;
|
||||
B921600 = &0010007;
|
||||
B1000000 = &0010010;
|
||||
B1152000 = &0010011;
|
||||
B1500000 = &0010012;
|
||||
B2000000 = &0010013;
|
||||
B2500000 = &0010014;
|
||||
B3000000 = &0010015;
|
||||
B3500000 = &0010016;
|
||||
B4000000 = &0010017;
|
||||
|
||||
CIBAUD = &002003600000;
|
||||
CMSPAR = &010000000000;
|
||||
CRTSCTS = &020000000000;
|
||||
|
||||
IBSHIFT = 16;
|
||||
|
||||
{ c_lflag bits }
|
||||
ISIG = &0000001;
|
||||
ICANON = &0000002;
|
||||
XCASE = &0000004;
|
||||
ECHO = &0000010;
|
||||
ECHOE = &0000020;
|
||||
ECHOK = &0000040;
|
||||
ECHONL = &0000100;
|
||||
NOFLSH = &0000200;
|
||||
TOSTOP = &0000400;
|
||||
ECHOCTL = &0001000;
|
||||
ECHOPRT = &0002000;
|
||||
ECHOKE = &0004000;
|
||||
FLUSHO = &0010000;
|
||||
PENDIN = &0040000;
|
||||
IEXTEN = &0100000;
|
||||
EXTPROC = &0200000;
|
||||
|
||||
{ TCFlow }
|
||||
TCOOFF = 0;
|
||||
TCOON = 1;
|
||||
TCIOFF = 2;
|
||||
TCION = 3;
|
||||
|
||||
{ TCFlush }
|
||||
TCIFLUSH = 0;
|
||||
TCOFLUSH = 1;
|
||||
TCIOFLUSH = 2;
|
||||
|
||||
{ TCSetAttr }
|
||||
TCSANOW = 0;
|
||||
TCSADRAIN = 1;
|
||||
TCSAFLUSH = 2;
|
||||
|
||||
{ from Linux 4.0, include/uapi/asm-generic/termios.h }
|
||||
|
||||
{ c_line bits }
|
||||
TIOCM_LE = $001;
|
||||
TIOCM_DTR = $002;
|
||||
TIOCM_RTS = $004;
|
||||
TIOCM_ST = $008;
|
||||
TIOCM_SR = $010;
|
||||
TIOCM_CTS = $020;
|
||||
TIOCM_CAR = $040;
|
||||
TIOCM_RNG = $080;
|
||||
TIOCM_DSR = $100;
|
||||
TIOCM_CD = TIOCM_CAR;
|
||||
TIOCM_RI = TIOCM_RNG;
|
||||
TIOCM_OUT1 = $2000;
|
||||
TIOCM_OUT2 = $4000;
|
||||
TIOCM_LOOP = $8000;
|
||||
|
||||
{$endif cpuaarch64}
|
||||
|
||||
{$ifdef cpupowerpc}
|
||||
TCGETS = $402c7413;
|
||||
TCSETS = $802c7414;
|
||||
|
Loading…
Reference in New Issue
Block a user