Browse Source

* syscall skeleton

florian 22 năm trước cách đây
mục cha
commit
42640d2b3f
3 tập tin đã thay đổi với 481 bổ sung0 xóa
  1. 155 0
      rtl/linux/arm/syscall.inc
  2. 48 0
      rtl/linux/arm/syscallh.inc
  3. 278 0
      rtl/linux/arm/sysnr.inc

+ 155 - 0
rtl/linux/arm/syscall.inc

@@ -0,0 +1,155 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by Florian Klaempfl,
+    member of the Free Pascal development team.
+
+    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.
+
+ **********************************************************************}
+
+{No debugging for syslinux include !}
+{$IFDEF SYS_LINUX}
+  {$UNDEF SYSCALL_DEBUG}
+{$ENDIF SYS_LINUX}
+
+
+{*****************************************************************************
+                     --- Main:The System Call Self ---
+*****************************************************************************}
+
+function FpSysCall(sysnr:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL0'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+
+function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL4'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+
+function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+// Old style syscall:
+// Better use ktrace/strace/gdb for debugging.
+
+Procedure FpSysCall( callnr:longint;var regs : SysCallregs );assembler;
+{
+  This function puts the registers in place, does the call, and then
+  copies back the registers as they are after the SysCall.
+}
+asm
+end;
+
+{$IFDEF SYSCALL_DEBUG}
+Const
+  DoSysCallDebug : Boolean = False;
+
+var
+  LastCnt,
+  LastEax,
+  LastCall : longint;
+  DebugTxt : string[20];
+{$ENDIF}
+
+Function SysCall( callnr:longint;var regs : SysCallregs ):longint;
+{
+  This function serves as an interface to do_SysCall.
+  If the SysCall returned a negative number, it returns -1, and puts the
+  SysCall result in errno. Otherwise, it returns the SysCall return value
+}
+begin
+  FpSysCall(callnr,regs);
+  if regs.reg1<0 then
+   begin
+{$IFDEF SYSCALL_DEBUG}
+     If DoSysCallDebug then
+       debugtxt:=' syscall error: ';
+{$endif}
+     ErrNo:=-regs.reg1;
+     SysCall:=-1;
+   end
+  else
+   begin
+{$IFDEF SYSCALL_DEBUG}
+  if DoSysCallDebug then
+       debugtxt:=' syscall returned: ';
+{$endif}
+     SysCall:=regs.reg1;
+     errno:=0
+   end;
+{$IFDEF SYSCALL_DEBUG}
+  if DoSysCallDebug then
+    begin
+    inc(lastcnt);
+    if (callnr<>lastcall) or (regs.reg1<>lasteax) then
+      begin
+      if lastcnt>1 then
+        writeln(sys_nr_txt[lastcall],debugtxt,lasteax,' (',lastcnt,'x)');
+      lastcall:=callnr;
+      lasteax:=regs.reg1;
+      lastcnt:=0;
+      writeln(sys_nr_txt[lastcall],debugtxt,lasteax);
+      end;
+    end;
+{$endif}
+end;
+
+{
+  $Log$
+  Revision 1.1  2003-08-28 00:08:29  florian
+    * syscall skeleton
+}
+

+ 48 - 0
rtl/linux/arm/syscallh.inc

@@ -0,0 +1,48 @@
+{
+    $Id$
+    Copyright (c) 2002 by Marco van de Voort
+
+    Header for syscall in system unit for arm *nix.
+
+    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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+
+}
+
+Type
+  TSysResult = longint; // all platforms, cint=32-bit.
+                        // On platforms with off_t =64-bit, people should
+                        // use int64, and typecast all calls that don't
+                        // return off_t to cint.
+
+// I don't think this is going to work on several platforms
+// 64-bit machines don't have only 64-bit params.
+
+  TSysParam  = Longint;
+
+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';
+
+{
+  $Log$
+  Revision 1.1  2003-08-28 00:08:29  florian
+    * syscall skeleton
+}

+ 278 - 0
rtl/linux/arm/sysnr.inc

@@ -0,0 +1,278 @@
+{
+    $Id$
+    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.
+
+    Syscall nrs for arm-linux
+
+    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 file contains the system call numbers.
+  Last update from 2.4.22 kernel sources according to the sources it contains already the 2.5 extensions
+}
+
+Const
+  syscall_nr_exit                       =   1;
+  syscall_nr_fork                       =   2;
+  syscall_nr_read                       =   3;
+  syscall_nr_write                      =   4;
+  syscall_nr_open                       =   5;
+  syscall_nr_close                      =   6;
+  syscall_nr_waitpid                    =   7;
+  syscall_nr_creat                      =   8;
+  syscall_nr_link                       =   9;
+  syscall_nr_unlink                     =  10;
+  syscall_nr_execve                     =  11;
+  syscall_nr_chdir                      =  12;
+  syscall_nr_time                       =  13;
+  syscall_nr_mknod                      =  14;
+  syscall_nr_chmod                      =  15;
+  syscall_nr_lchown                     =  16;
+  syscall_nr_break                      =  17;
+
+  syscall_nr_lseek                      =  19;
+  syscall_nr_getpid                     =  20;
+  syscall_nr_mount                      =  21;
+  syscall_nr_umount                     =  22;
+  syscall_nr_setuid                     =  23;
+  syscall_nr_getuid                     =  24;
+  syscall_nr_stime                      =  25;
+  syscall_nr_ptrace                     =  26;
+  syscall_nr_alarm                      =  27;
+
+  syscall_nr_pause                      =  29;
+  syscall_nr_utime                      =  30;
+  syscall_nr_stty                       =  31;
+  syscall_nr_gtty                       =  32;
+  syscall_nr_access                     =  33;
+  syscall_nr_nice                       =  34;
+  syscall_nr_ftime                      =  35;
+  syscall_nr_sync                       =  36;
+  syscall_nr_kill                       =  37;
+  syscall_nr_rename                     =  38;
+  syscall_nr_mkdir                      =  39;
+  syscall_nr_rmdir                      =  40;
+  syscall_nr_dup                        =  41;
+  syscall_nr_pipe                       =  42;
+  syscall_nr_times                      =  43;
+  syscall_nr_prof                       =  44;
+  syscall_nr_brk                        =  45;
+  syscall_nr_setgid                     =  46;
+  syscall_nr_getgid                     =  47;
+  syscall_nr_signal                     =  48;
+  syscall_nr_geteuid                    =  49;
+  syscall_nr_getegid                    =  50;
+  syscall_nr_acct                       =  51;
+  syscall_nr_umount2                    =  52;
+  syscall_nr_lock                       =  53;
+  syscall_nr_ioctl                      =  54;
+  syscall_nr_fcntl                      =  55;
+  syscall_nr_mpx                        =  56;
+  syscall_nr_setpgid                    =  57;
+  syscall_nr_ulimit                     =  58;
+
+  syscall_nr_umask                      =  60;
+  syscall_nr_chroot                     =  61;
+  syscall_nr_ustat                      =  62;
+  syscall_nr_dup2                       =  63;
+  syscall_nr_getppid                    =  64;
+  syscall_nr_getpgrp                    =  65;
+  syscall_nr_setsid                     =  66;
+  syscall_nr_sigaction                  =  67;
+  syscall_nr_sgetmask                   =  68;
+  syscall_nr_ssetmask                   =  69;
+  syscall_nr_setreuid                   =  70;
+  syscall_nr_setregid                   =  71;
+  syscall_nr_sigsuspend                 =  72;
+  syscall_nr_sigpending                 =  73;
+  syscall_nr_sethostname                =  74;
+  syscall_nr_setrlimit                  =  75;
+  syscall_nr_getrlimit                  =  76;
+  syscall_nr_getrusage                  =  77;
+  syscall_nr_gettimeofday               =  78;
+  syscall_nr_settimeofday               =  79;
+  syscall_nr_getgroups                  =  80;
+  syscall_nr_setgroups                  =  81;
+  syscall_nr_select                     =  82;
+  syscall_nr_symlink                    =  83;
+
+  syscall_nr_readlink                   =  85;
+  syscall_nr_uselib                     =  86;
+  syscall_nr_swapon                     =  87;
+  syscall_nr_reboot                     =  88;
+  syscall_nr_readdir                    =  89;
+  syscall_nr_mmap                       =  90;
+  syscall_nr_munmap                     =  91;
+  syscall_nr_truncate                   =  92;
+  syscall_nr_ftruncate                  =  93;
+  syscall_nr_fchmod                     =  94;
+  syscall_nr_fchown                     =  95;
+  syscall_nr_getpriority                =  96;
+  syscall_nr_setpriority                =  97;
+  syscall_nr_profil                     =  98;
+  syscall_nr_statfs                     =  99;
+  syscall_nr_fstatfs                    = 100;
+  syscall_nr_ioperm                     = 101;
+  syscall_nr_socketcall                 = 102;
+  syscall_nr_syslog                     = 103;
+  syscall_nr_setitimer                  = 104;
+  syscall_nr_getitimer                  = 105;
+  syscall_nr_stat                       = 106;
+  syscall_nr_lstat                      = 107;
+  syscall_nr_fstat                      = 108;
+  syscall_nr_vhangup                    = 111;
+  syscall_nr_idle                       = 112;
+  syscall_nr_syscall                    = 113;
+  syscall_nr_wait4                      = 114;
+  syscall_nr_swapoff                    = 115;
+  syscall_nr_sysinfo                    = 116;
+  syscall_nr_ipc                        = 117;
+  syscall_nr_fsync                      = 118;
+  syscall_nr_sigreturn                  = 119;
+  syscall_nr_clone                      = 120;
+  syscall_nr_setdomainname              = 121;
+  syscall_nr_uname                      = 122;
+  syscall_nr_modify_ldt                 = 123;
+  syscall_nr_adjtimex                   = 124;
+  syscall_nr_mprotect                   = 125;
+  syscall_nr_sigprocmask                = 126;
+  syscall_nr_create_module              = 127;
+  syscall_nr_init_module                = 128;
+  syscall_nr_delete_module              = 129;
+  syscall_nr_get_kernel_syms            = 130;
+  syscall_nr_quotactl                   = 131;
+  syscall_nr_getpgid                    = 132;
+  syscall_nr_fchdir                     = 133;
+  syscall_nr_bdflush                    = 134;
+  syscall_nr_sysfs                      = 135;
+  syscall_nr_personality                = 136;
+  syscall_nr_afs_syscall                = 137;
+  syscall_nr_setfsuid                   = 138;
+  syscall_nr_setfsgid                   = 139;
+  syscall_nr__llseek                    = 140;
+  syscall_nr_getdents                   = 141;
+  syscall_nr__newselect                 = 142;
+  syscall_nr_flock                      = 143;
+  syscall_nr_msync                      = 144;
+  syscall_nr_readv                      = 145;
+  syscall_nr_writev                     = 146;
+  syscall_nr_getsid                     = 147;
+  syscall_nr_fdatasync                  = 148;
+  syscall_nr__sysctl                    = 149;
+  syscall_nr_mlock                      = 150;
+  syscall_nr_munlock                    = 151;
+  syscall_nr_mlockall                   = 152;
+  syscall_nr_munlockall                 = 153;
+  syscall_nr_sched_setparam             = 154;
+  syscall_nr_sched_getparam             = 155;
+  syscall_nr_sched_setscheduler         = 156;
+  syscall_nr_sched_getscheduler         = 157;
+  syscall_nr_sched_yield                = 158;
+  syscall_nr_sched_get_priority_max     = 159;
+  syscall_nr_sched_get_priority_min     = 160;
+  syscall_nr_sched_rr_get_interval      = 161;
+  syscall_nr_nanosleep                  = 162;
+  syscall_nr_mremap                     = 163;
+  syscall_nr_setresuid                  = 164;
+  syscall_nr_getresuid                  = 165;
+  syscall_nr_vm86                       = 166;
+  syscall_nr_query_module               = 167;
+  syscall_nr_poll                       = 168;
+  syscall_nr_nfsservctl                 = 169;
+  syscall_nr_setresgid                  = 170;
+  syscall_nr_getresgid                  = 171;
+  syscall_nr_prctl                      = 172;
+  syscall_nr_rt_sigreturn               = 173;
+  syscall_nr_rt_sigaction               = 174;
+  syscall_nr_rt_sigprocmask             = 175;
+  syscall_nr_rt_sigpending              = 176;
+  syscall_nr_rt_sigtimedwait            = 177;
+  syscall_nr_rt_sigqueueinfo            = 178;
+  syscall_nr_rt_sigsuspend              = 179;
+  syscall_nr_pread                      = 180;
+  syscall_nr_pwrite                     = 181;
+  syscall_nr_chown                      = 182;
+  syscall_nr_getcwd                     = 183;
+  syscall_nr_capget                     = 184;
+  syscall_nr_capset                     = 185;
+  syscall_nr_sigaltstack                = 186;
+  syscall_nr_sendfile                   = 187;
+  syscall_nr_vfork                      = 190;
+  syscall_nr_ugetrlimit                 = 191;
+  syscall_nr_mmap2                      = 192;
+  syscall_nr_truncate64                 = 193;
+  syscall_nr_ftruncate64                = 194;
+  syscall_nr_stat64                     = 195;
+  syscall_nr_lstat64                    = 196;
+  syscall_nr_fstat64                    = 197;
+  syscall_nr_lchown32                   = 198;
+  syscall_nr_getuid32                   = 199;
+  syscall_nr_getgid32                   = 200;
+  syscall_nr_geteuid32                  = 201;
+  syscall_nr_getegid32                  = 202;
+  syscall_nr_setreuid32                 = 203;
+  syscall_nr_setregid32                 = 204;
+  syscall_nr_getgroups32                = 205;
+  syscall_nr_setgroups32                = 206;
+  syscall_nr_fchown32                   = 207;
+  syscall_nr_setresuid32                = 208;
+  syscall_nr_getresuid32                = 209;
+  syscall_nr_setresgid32                = 210;
+  syscall_nr_getresgid32                = 211;
+  syscall_nr_chown32                    = 212;
+  syscall_nr_setuid32                   = 213;
+  syscall_nr_setgid32                   = 214;
+  syscall_nr_setfsuid32                 = 215;
+  syscall_nr_setfsgid32                 = 216;
+  syscall_nr_getdents64                 = 217;
+  syscall_nr_pivot_root                 = 218;
+  syscall_nr_mincore                    = 219;
+  syscall_nr_madvise                    = 220;
+  syscall_nr_fcntl64                    = 221;
+  syscall_nr_security                   = 223;
+  syscall_nr_gettid                     = 224;
+  syscall_nr_readahead                  = 225;
+  syscall_nr_setxattr                   = 226;
+  syscall_nr_lsetxattr                  = 227;
+  syscall_nr_fsetxattr                  = 228;
+  syscall_nr_getxattr                   = 229;
+  syscall_nr_lgetxattr                  = 230;
+  syscall_nr_fgetxattr                  = 231;
+  syscall_nr_listxattr                  = 232;
+  syscall_nr_llistxattr                 = 233;
+  syscall_nr_flistxattr                 = 234;
+  syscall_nr_removexattr                = 235;
+  syscall_nr_lremovexattr               = 236;
+  syscall_nr_fremovexattr               = 237;
+  syscall_nr_tkill                      = 238;
+  syscall_nr_sendfile64                 = 239;
+  syscall_nr_futex                      = 240;
+  syscall_nr_sched_setaffinity          = 241;
+  syscall_nr_sched_getaffinity          = 242;
+  syscall_nr_io_setup                   = 243;
+  syscall_nr_io_destroy                 = 244;
+  syscall_nr_io_getevents               = 245;
+  syscall_nr_io_submit                  = 246;
+  syscall_nr_io_cancel                  = 247;
+  syscall_nr_exit_group                 = 248;
+  syscall_nr_lookup_dcookie             = 249;
+  syscall_nr_epoll_create               = 250;
+  syscall_nr_epoll_ctl                  = 251;
+  syscall_nr_epoll_wait                 = 252;
+  syscall_nr_remap_file_pages           = 253;
+
+{
+    $Log$
+    Revision 1.1  2003-08-28 00:08:29  florian
+      * syscall skeleton
+}