Forráskód Böngészése

--- Merging r17061 into '.':
U rtl/unix/aliasptp.inc
U rtl/freebsd/sysnr.inc
U rtl/freebsd/freebsd.pas
U rtl/x86_64/cpu.pp
G .

git-svn-id: tags/release_2_4_4_rc1@17062 -

marco 14 éve
szülő
commit
5a65733dd0
4 módosított fájl, 21 hozzáadás és 1 törlés
  1. 8 0
      rtl/freebsd/freebsd.pas
  2. 1 0
      rtl/freebsd/sysnr.inc
  3. 1 0
      rtl/unix/aliasptp.inc
  4. 11 1
      rtl/x86_64/cpu.pp

+ 8 - 0
rtl/freebsd/freebsd.pas

@@ -185,6 +185,10 @@ Type
   function kse_release(timeout: PTimeSpec): cInt; extdecl;
   function kse_switchin(tmbx: PKseThrMailBox; flags: cInt): cInt; extdecl;
 
+{$ifndef FPC_USE_LIBC}
+function fpgetfsstat(buf:pstatfs;bufsize:clong;flags:cint):cint;
+{$endif} 
+
 Const
  MAP_FILE         = $0000;  { map from file (default) }
  MAP_ANON         = $1000;  { allocated from memory, swap space }
@@ -294,6 +298,10 @@ begin
   kse_switchin:=do_SysCall(syscall_nr_kse_switchin, TSysParam(tmbx), TSysParam(flags));
 end;
 
+function fpgetfsstat(buf:pstatfs;bufsize:clong;flags:cint):cint;
+begin
+  fpgetfsstat:=do_syscall(syscall_nr_getfsstat,TSysParam(buf),TSysParam(Bufsize),TSysParam(Flags));
+end;
 {$ENDIF}
 
 end.

+ 1 - 0
rtl/freebsd/sysnr.inc

@@ -230,6 +230,7 @@ syscall_nr_getdirentries                =196;
 }
 
 {More or less checked/in use FreeBSD syscalls}
+ syscall_nr_getfsstat                   = 18;
  syscall_nr_readv                       = 120;
  syscall_nr_writev                      = 121;
  syscall_nr_pread                       = 173;

+ 1 - 0
rtl/unix/aliasptp.inc

@@ -74,6 +74,7 @@ type
     pthread_t         = UnixType.pthread_t;
 
     tstatfs  = UnixType.TStatFs;
+    pstatfs  = UnixType.PStatFs;
 
 CONST
     ARG_MAX       = UnixType.ARG_MAX;

+ 11 - 1
rtl/x86_64/cpu.pp

@@ -18,6 +18,13 @@ unit cpu;
 
   interface
 
+  {$ifdef freebsd}                 // FreeBSD 7/8 have binutils version that don't support cmpxchg16b
+			           // Unless overridebinutils is defined (for ports usage), use db instead of the instruction
+     {$ifndef overridebinutils}
+       {$define oldbinutils}
+     {$endif} 
+  {$endif}
+
     uses
       sysutils;
 
@@ -60,8 +67,11 @@ unit cpu;
         movq (%r9),%rax
         movq 8(%r9),%rdx
 
+        {$ifdef oldbinutils}
+           .byte 0xF0,0x49,0x0F,0xC7,0x08 
+        {$else}
         lock cmpxchg16b (%r8)
-
+        {$endif}
         { restore result pointer }
         popq %rcx