* update sysnr.inc for x86 and x86_64 to latest kernel

* add splice syscall to linux unit for x86 and x86_64

git-svn-id: trunk@8364 -
This commit is contained in:
Almindor 2007-09-02 22:06:04 +00:00
parent 3ed12b0229
commit 6fd901181a
3 changed files with 89 additions and 182 deletions

View File

@ -313,184 +313,30 @@ Const
syscall_nr_inotify_init = 291;
syscall_nr_inotify_add_watch = 292;
syscall_nr_inotify_rm_watch = 293;
syscall_nr_migrate_pages = 294;
syscall_nr_openat = 295;
syscall_nr_mkdirat = 296;
syscall_nr_mknodat = 297;
syscall_nr_fchownat = 298;
syscall_nr_futimesat = 299;
syscall_nr_fstatat64 = 300;
syscall_nr_unlinkat = 301;
syscall_nr_renameat = 302;
syscall_nr_linkat = 303;
syscall_nr_symlinkat = 304;
syscall_nr_readlinkat = 305;
syscall_nr_fchmodat = 306;
syscall_nr_faccessat = 307;
syscall_nr_pselect6 = 308;
syscall_nr_ppoll = 309;
syscall_nr_unshare = 310;
syscall_nr_set_robust_list = 311;
syscall_nr_get_robust_list = 312;
syscall_nr_splice = 313;
syscall_nr_sync_file_range = 314;
syscall_nr_tee = 315;
syscall_nr_vmsplice = 316;
syscall_nr_move_pages = 317;
syscall_nr_getcpu = 318;
syscall_nr_epoll_pwait = 319;

View File

@ -22,7 +22,7 @@ unit Linux;
interface
uses
ctypes;
BaseUnix;//, ctypes;
type
TSysInfo = record
@ -295,6 +295,28 @@ const CAP_CHOWN = 0;
LINUX_CAPABILITY_VERSION = $19980330;
//***********************************************SPLICE from kernel 2.6.17+****************************************
const
{* Flags for SPLICE and VMSPLICE. *}
SPLICE_F_MOVE = 1; { Move pages instead of copying. }
SPLICE_F_NONBLOCK = 2; {* Don't block on the pipe splicing
(but we may still block on the fd
we splice from/to). *}
SPLICE_F_MORE = 4; {* Expect more data. *}
SPLICE_F_GIFT = 8; {* Pages passed in are a gift. *}
{$ifdef x86}
{* Splice address range into a pipe. *}
function vmsplice (fdout: cInt; iov: PIOVec; count: size_t; flags: cuInt): cInt; {$ifdef FPC_USE_LIBC} cdecl; external name 'vmsplice'; {$ENDIF}
{* Splice two files together. *}
// NOTE: offin and offout should be "off64_t" but we don't have that type. It's an "always 64 bit offset" so I use cint64
function splice (fdin: cInt; offin: cInt64; fdout: cInt; offout: cInt64; len: size_t; flags: cuInt): cInt; {$ifdef FPC_USE_LIBC} cdecl; external name 'splice'; {$ENDIF}
{$endif} // x86
implementation
@ -416,6 +438,21 @@ begin
capset:=do_syscall(syscall_nr_capset,Tsysparam(header),Tsysparam(data));
end;
// TODO: update also on non x86!
{$ifdef x86} // didn't update syscall_nr on others yet
function vmsplice (fdout: cInt; iov: PIOVec; count: size_t; flags: cuInt): cInt;
begin
vmsplice := do_syscall(syscall_nr_vmsplice, TSysParam(fdout), TSysParam(iov), TSysParam(count), TSysParam(flags));
end;
function splice (fdin: cInt; offin: cint64; fdout: cInt; offout: cint64; len: size_t; flags: cuInt): cInt;
begin
splice := do_syscall(syscall_nr_splice, TSysParam(fdin), TSysParam(offin), TSysParam(fdout), TSysParam(offout),
TSysParam(len), TSysParam(flags));
end;
{$endif} // x86
{$endif}
{ FUTEX_OP is a macro, doesn't exist in libC as function}
@ -424,5 +461,4 @@ begin
FUTEX_OP := ((op and $F) shl 28) or ((cmp and $F) shl 24) or ((oparg and $FFF) shl 12) or (cmparg and $FFF);
end;
end.

View File

@ -316,3 +316,28 @@ const
syscall_nr_inotify_add_watch = 254;
syscall_nr_inotify_rm_watch = 255;
syscall_migrate_pages = 256;
syscall_openat = 257;
syscall_mkdirat = 258;
syscall_mknodat = 259;
syscall_fchownat = 260;
syscall_futimesat = 261;
syscall_newfstatat = 262;
syscall_unlinkat = 263;
syscall_renameat = 264;
syscall_linkat = 265;
syscall_symlinkat = 266;
syscall_readlinkat = 267;
syscall_fchmodat = 268;
syscall_faccessat = 269;
syscall_pselect6 = 270;
syscall_ppoll = 271;
syscall_unshare = 272;
syscall_set_robust_list = 273;
syscall_get_robust_list = 274;
syscall_splice = 275;
syscall_tee = 276;
syscall_sync_file_range = 277;
syscall_vmsplice = 278;
syscall_move_pages = 279;