Browse Source

* Patch from Henry Vermaak to fix EABI kernel API for arm.

git-svn-id: trunk@13563 -
michael 16 years ago
parent
commit
e8a375c774

+ 22 - 3
rtl/linux/arm/sysnr.inc

@@ -39,7 +39,9 @@ Const
   syscall_nr_unlink                     =  syscall_nr_base+10;
   syscall_nr_unlink                     =  syscall_nr_base+10;
   syscall_nr_execve                     =  syscall_nr_base+11;
   syscall_nr_execve                     =  syscall_nr_base+11;
   syscall_nr_chdir                      =  syscall_nr_base+12;
   syscall_nr_chdir                      =  syscall_nr_base+12;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_time                       =  syscall_nr_base+13;
   syscall_nr_time                       =  syscall_nr_base+13;
+{$endif}
   syscall_nr_mknod                      =  syscall_nr_base+14;
   syscall_nr_mknod                      =  syscall_nr_base+14;
   syscall_nr_chmod                      =  syscall_nr_base+15;
   syscall_nr_chmod                      =  syscall_nr_base+15;
   syscall_nr_lchown                     =  syscall_nr_base+16;
   syscall_nr_lchown                     =  syscall_nr_base+16;
@@ -48,15 +50,23 @@ Const
   syscall_nr_lseek                      =  syscall_nr_base+19;
   syscall_nr_lseek                      =  syscall_nr_base+19;
   syscall_nr_getpid                     =  syscall_nr_base+20;
   syscall_nr_getpid                     =  syscall_nr_base+20;
   syscall_nr_mount                      =  syscall_nr_base+21;
   syscall_nr_mount                      =  syscall_nr_base+21;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_umount                     =  syscall_nr_base+22;
   syscall_nr_umount                     =  syscall_nr_base+22;
+{$endif}
   syscall_nr_setuid                     =  syscall_nr_base+23;
   syscall_nr_setuid                     =  syscall_nr_base+23;
   syscall_nr_getuid                     =  syscall_nr_base+24;
   syscall_nr_getuid                     =  syscall_nr_base+24;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_stime                      =  syscall_nr_base+25;
   syscall_nr_stime                      =  syscall_nr_base+25;
+{$endif}
   syscall_nr_ptrace                     =  syscall_nr_base+26;
   syscall_nr_ptrace                     =  syscall_nr_base+26;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_alarm                      =  syscall_nr_base+27;
   syscall_nr_alarm                      =  syscall_nr_base+27;
+{$endif}
 
 
   syscall_nr_pause                      =  syscall_nr_base+29;
   syscall_nr_pause                      =  syscall_nr_base+29;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_utime                      =  syscall_nr_base+30;
   syscall_nr_utime                      =  syscall_nr_base+30;
+{$endif}
   syscall_nr_stty                       =  syscall_nr_base+31;
   syscall_nr_stty                       =  syscall_nr_base+31;
   syscall_nr_gtty                       =  syscall_nr_base+32;
   syscall_nr_gtty                       =  syscall_nr_base+32;
   syscall_nr_access                     =  syscall_nr_base+33;
   syscall_nr_access                     =  syscall_nr_base+33;
@@ -102,21 +112,27 @@ Const
   syscall_nr_sigpending                 =  syscall_nr_base+73;
   syscall_nr_sigpending                 =  syscall_nr_base+73;
   syscall_nr_sethostname                =  syscall_nr_base+74;
   syscall_nr_sethostname                =  syscall_nr_base+74;
   syscall_nr_setrlimit                  =  syscall_nr_base+75;
   syscall_nr_setrlimit                  =  syscall_nr_base+75;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_getrlimit                  =  syscall_nr_base+76;
   syscall_nr_getrlimit                  =  syscall_nr_base+76;
+{$endif}
   syscall_nr_getrusage                  =  syscall_nr_base+77;
   syscall_nr_getrusage                  =  syscall_nr_base+77;
   syscall_nr_gettimeofday               =  syscall_nr_base+78;
   syscall_nr_gettimeofday               =  syscall_nr_base+78;
   syscall_nr_settimeofday               =  syscall_nr_base+79;
   syscall_nr_settimeofday               =  syscall_nr_base+79;
   syscall_nr_getgroups                  =  syscall_nr_base+80;
   syscall_nr_getgroups                  =  syscall_nr_base+80;
   syscall_nr_setgroups                  =  syscall_nr_base+81;
   syscall_nr_setgroups                  =  syscall_nr_base+81;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_select                     =  syscall_nr_base+82;
   syscall_nr_select                     =  syscall_nr_base+82;
+{$endif}
   syscall_nr_symlink                    =  syscall_nr_base+83;
   syscall_nr_symlink                    =  syscall_nr_base+83;
 
 
   syscall_nr_readlink                   =  syscall_nr_base+85;
   syscall_nr_readlink                   =  syscall_nr_base+85;
   syscall_nr_uselib                     =  syscall_nr_base+86;
   syscall_nr_uselib                     =  syscall_nr_base+86;
   syscall_nr_swapon                     =  syscall_nr_base+87;
   syscall_nr_swapon                     =  syscall_nr_base+87;
   syscall_nr_reboot                     =  syscall_nr_base+88;
   syscall_nr_reboot                     =  syscall_nr_base+88;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_readdir                    =  syscall_nr_base+89;
   syscall_nr_readdir                    =  syscall_nr_base+89;
   syscall_nr_mmap                       =  syscall_nr_base+90;
   syscall_nr_mmap                       =  syscall_nr_base+90;
+{$endif}
   syscall_nr_munmap                     =  syscall_nr_base+91;
   syscall_nr_munmap                     =  syscall_nr_base+91;
   syscall_nr_truncate                   =  syscall_nr_base+92;
   syscall_nr_truncate                   =  syscall_nr_base+92;
   syscall_nr_ftruncate                  =  syscall_nr_base+93;
   syscall_nr_ftruncate                  =  syscall_nr_base+93;
@@ -128,7 +144,9 @@ Const
   syscall_nr_statfs                     =  syscall_nr_base+99;
   syscall_nr_statfs                     =  syscall_nr_base+99;
   syscall_nr_fstatfs                    = syscall_nr_base+100;
   syscall_nr_fstatfs                    = syscall_nr_base+100;
   syscall_nr_ioperm                     = syscall_nr_base+101;
   syscall_nr_ioperm                     = syscall_nr_base+101;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_socketcall                 = syscall_nr_base+102;
   syscall_nr_socketcall                 = syscall_nr_base+102;
+{$endif}
   syscall_nr_syslog                     = syscall_nr_base+103;
   syscall_nr_syslog                     = syscall_nr_base+103;
   syscall_nr_setitimer                  = syscall_nr_base+104;
   syscall_nr_setitimer                  = syscall_nr_base+104;
   syscall_nr_getitimer                  = syscall_nr_base+105;
   syscall_nr_getitimer                  = syscall_nr_base+105;
@@ -137,11 +155,15 @@ Const
   syscall_nr_fstat                      = syscall_nr_base+108;
   syscall_nr_fstat                      = syscall_nr_base+108;
   syscall_nr_vhangup                    = syscall_nr_base+111;
   syscall_nr_vhangup                    = syscall_nr_base+111;
   syscall_nr_idle                       = syscall_nr_base+112;
   syscall_nr_idle                       = syscall_nr_base+112;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_syscall                    = syscall_nr_base+113;
   syscall_nr_syscall                    = syscall_nr_base+113;
+{$endif}
   syscall_nr_wait4                      = syscall_nr_base+114;
   syscall_nr_wait4                      = syscall_nr_base+114;
   syscall_nr_swapoff                    = syscall_nr_base+115;
   syscall_nr_swapoff                    = syscall_nr_base+115;
   syscall_nr_sysinfo                    = syscall_nr_base+116;
   syscall_nr_sysinfo                    = syscall_nr_base+116;
+{$ifndef FPC_ABI_EABI}
   syscall_nr_ipc                        = syscall_nr_base+117;
   syscall_nr_ipc                        = syscall_nr_base+117;
+{$endif}
   syscall_nr_fsync                      = syscall_nr_base+118;
   syscall_nr_fsync                      = syscall_nr_base+118;
   syscall_nr_sigreturn                  = syscall_nr_base+119;
   syscall_nr_sigreturn                  = syscall_nr_base+119;
   syscall_nr_clone                      = syscall_nr_base+120;
   syscall_nr_clone                      = syscall_nr_base+120;
@@ -394,6 +416,3 @@ Const
   __ARM_NR_usr32			= __ARM_NR_BASE+4;
   __ARM_NR_usr32			= __ARM_NR_BASE+4;
   __ARM_NR_set_tls		        = __ARM_NR_BASE+5;
   __ARM_NR_set_tls		        = __ARM_NR_BASE+5;
 
 
-
-
-

+ 18 - 1
rtl/linux/bunxsysc.inc

@@ -330,12 +330,29 @@ begin
   fpChOwn:=do_syscall(syscall_nr_chown,TSysParam(path),TSysParam(owner),TSysParam(group));
   fpChOwn:=do_syscall(syscall_nr_chown,TSysParam(path),TSysParam(owner),TSysParam(group));
 end;
 end;
 
 
+{$ifndef NO_SYSCALL_UTIME}
+
 Function fpUtime(path:pchar;times:putimbuf):cint;
 Function fpUtime(path:pchar;times:putimbuf):cint;
 
 
 begin
 begin
- fputime:=do_syscall(syscall_nr_utime,TSysParam(path),TSysParam(times));
+  fputime:=do_syscall(syscall_nr_utime,TSysParam(path),TSysParam(times));
+end;
+
+{$else}
+
+Function fpUtime(path:pchar;times:putimbuf):cint;
+var
+  tva: Array[0..1] of timeval;
+begin
+  tva[0].tv_sec := times^.actime;
+  tva[0].tv_usec := 0;
+  tva[1].tv_sec := times^.modtime;
+  tva[1].tv_usec := 0;
+  fputime:=do_syscall(syscall_nr_utimes,TSysParam(path),TSysParam(@tva));
 end;
 end;
 
 
+{$endif}
+
 
 
 {$ifndef FPC_BASEUNIX_HAS_FPPIPE}
 {$ifndef FPC_BASEUNIX_HAS_FPPIPE}
 Function fppipe(var fildes : tfildes):cint;
 Function fppipe(var fildes : tfildes):cint;

+ 15 - 1
rtl/linux/osdefs.inc

@@ -39,7 +39,21 @@
 {$endif}
 {$endif}
 
 
 {$if (defined(cpuarm) and defined(FPC_ABI_EABI))}
 {$if (defined(cpuarm) and defined(FPC_ABI_EABI))}
-{$define FPC_USEGETTIMEOFDAY}
+  {$define FPC_USEGETTIMEOFDAY}
+  {$undef usestime}
+
+  {$define NO_SYSCALL_TIME}
+  {$define NO_SYSCALL_UMOUNT}
+  {$define NO_SYSCALL_STIME}
+  {$define NO_SYSCALL_ALARM}
+  {$define NO_SYSCALL_UTIME}
+  {$define NO_SYSCALL_GETRLIMIT}
+  {$define NO_SYSCALL_SELECT}
+  {$define NO_SYSCALL_READDIR}
+  {$define NO_SYSCALL_MMAP}
+  {$define NO_SYSCALL_SOCKETCALL}
+  {$define NO_SYSCALL_SYSCALL}
+  {$define NO_SYSCALL_IPC}
 {$endif}
 {$endif}
 
 
  {$ifdef CPUARM}
  {$ifdef CPUARM}

+ 2 - 1
rtl/linux/ossysc.inc

@@ -568,12 +568,13 @@ begin
  fpgettimeofday:=do_syscall(syscall_nr_gettimeofday,TSysParam(tp),TSysParam(tzp));
  fpgettimeofday:=do_syscall(syscall_nr_gettimeofday,TSysParam(tp),TSysParam(tzp));
 end;
 end;
 
 
-
+{$ifndef NO_SYSCALL_GETRLIMIT}
 function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt;
 function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt;
 begin
 begin
   FpGetRLimit := do_syscall(syscall_nr_getrlimit,
   FpGetRLimit := do_syscall(syscall_nr_getrlimit,
     TSysParam(resource), TSysParam(rlim));
     TSysParam(resource), TSysParam(rlim));
 end;
 end;
+{$endif}
 
 
 {$ifdef HAS_UGETRLIMIT}
 {$ifdef HAS_UGETRLIMIT}
 function fpugetrlimit(resource : cInt; rlim : PRLimit) : cInt;
 function fpugetrlimit(resource : cInt; rlim : PRLimit) : cInt;

+ 2 - 0
rtl/linux/system.pp

@@ -312,8 +312,10 @@ begin
   {$ifdef has_ugetrlimit}
   {$ifdef has_ugetrlimit}
   success := fpugetrlimit(RLIMIT_STACK, @limits)=0;
   success := fpugetrlimit(RLIMIT_STACK, @limits)=0;
   {$endif}
   {$endif}
+  {$ifndef NO_SYSCALL_GETRLIMIT}
   if (not success) then
   if (not success) then
     success := fpgetrlimit(RLIMIT_STACK, @limits)=0;
     success := fpgetrlimit(RLIMIT_STACK, @limits)=0;
+  {$endif}
   if (success) and (limits.rlim_cur < stklen) then
   if (success) and (limits.rlim_cur < stklen) then
     result := limits.rlim_cur
     result := limits.rlim_cur
   else
   else

+ 1 - 1
rtl/linux/unixsock.inc

@@ -13,7 +13,7 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 }
 }
 
 
-{$ifndef cpux86_64}
+{$if not defined(cpux86_64) and not defined(NO_SYSCALL_SOCKETCALL)}
   {$define NEED_SOCKETCALL}
   {$define NEED_SOCKETCALL}
 {$endif}
 {$endif}
 
 

+ 3 - 1
rtl/unix/ipc.pp

@@ -23,6 +23,8 @@ Uses
 {$endif}
 {$endif}
   BaseUnix,UnixType;
   BaseUnix,UnixType;
 
 
+{$i osdefs.inc}       { Compile time defines }
+
 { ----------------------------------------------------------------------
 { ----------------------------------------------------------------------
   General IPC stuff
   General IPC stuff
   ----------------------------------------------------------------------}
   ----------------------------------------------------------------------}
@@ -517,7 +519,7 @@ uses Syscall;
 
 
 {$ifndef FPC_USE_LIBC}
 {$ifndef FPC_USE_LIBC}
  {$ifdef Linux}
  {$ifdef Linux}
-  {$ifdef cpux86_64}
+  {$if defined(cpux86_64) or defined(NO_SYSCALL_IPC)}
     {$i ipcsys.inc}
     {$i ipcsys.inc}
   {$else}
   {$else}
     {$i ipccall.inc}
     {$i ipccall.inc}

+ 2 - 0
rtl/unix/sockets.pp

@@ -17,6 +17,8 @@ Interface
 Uses baseunix,UnixType;
 Uses baseunix,UnixType;
 {$endif}
 {$endif}
 
 
+{$i osdefs.inc}       { Compile time defines }
+
 {$ifdef FreeBSD}
 {$ifdef FreeBSD}
 {$DEFINE SOCK_HAS_SINLEN}               // BSD definition of socketaddr
 {$DEFINE SOCK_HAS_SINLEN}               // BSD definition of socketaddr
 {$endif}
 {$endif}