Browse Source

Add new file to handle changing openbsd syscall numbers

git-svn-id: trunk@28829 -
pierre 10 years ago
parent
commit
787fb75df8
2 changed files with 109 additions and 0 deletions
  1. 1 0
      .gitattributes
  2. 108 0
      rtl/openbsd/setsysnr.inc

+ 1 - 0
.gitattributes

@@ -8943,6 +8943,7 @@ rtl/openbsd/pmutext.inc svneol=native#text/plain
 rtl/openbsd/pthread.inc svneol=native#text/plain
 rtl/openbsd/pthread.inc svneol=native#text/plain
 rtl/openbsd/ptypes.inc svneol=native#text/plain
 rtl/openbsd/ptypes.inc svneol=native#text/plain
 rtl/openbsd/rtldefs.inc svneol=native#text/plain
 rtl/openbsd/rtldefs.inc svneol=native#text/plain
+rtl/openbsd/setsysnr.inc svneol=native#text/plain
 rtl/openbsd/signal.inc svneol=native#text/plain
 rtl/openbsd/signal.inc svneol=native#text/plain
 rtl/openbsd/syscalls.inc svneol=native#text/plain
 rtl/openbsd/syscalls.inc svneol=native#text/plain
 rtl/openbsd/sysconst.inc svneol=native#text/plain
 rtl/openbsd/sysconst.inc svneol=native#text/plain

+ 108 - 0
rtl/openbsd/setsysnr.inc

@@ -0,0 +1,108 @@
+
+procedure SetSyscallNumbers;
+
+Var
+  mib  : array[0..1] of cint;
+  release : shortstring;
+  len  : size_t;
+  oerrno : cint;
+  err : word;
+  point, c : char;
+  i, version_major, version_minor, version : cint;
+Begin
+  mib[0] := 1{ CTL_KERN};
+  mib[1] := 2{KERN_OSRELEASE};
+  len    := sizeof (release) - 1;
+  oerrno := geterrno;
+
+  if (do_syscall(syscall_nr___sysctl,TSysParam(@mib), 2, TSysParam(@release[1]),
+       TSysParam(@len), TSysParam(NIL), 0) = -1) Then
+    Begin
+      if (geterrno = ESysENOMEM) Then
+        seterrno(oerrno);
+      version_major:=3;
+    version_minor:=9;
+    End
+  else
+    begin
+      setlength(release,len);
+      i:=0;
+      while (i < len) do
+        begin
+          if (release[i]='.') then
+            break;
+          inc (i);
+        end;
+      setlength(release,i-1);
+      val (release, version_major, err);
+      if err<> 0 then
+        version_major:=3;
+      setlength(release,len);
+      release:=copy(release,i+1,len);
+      val (release, version_minor, err);
+      if err<> 0 then
+        version_minor:=9;
+    end;
+
+  version:=version_major * 1000 + version_minor;
+
+  if version >= 5005 then
+    begin
+      syscall_nr_waitpid := syscall_nr_wait4_55;
+      syscall_nr_setitimer := syscall_nr_setitimer_55;
+      syscall_nr_getitimer := syscall_nr_getitimer_55;
+      syscall_nr_gettimeofday := syscall_nr_gettimeofday_55;
+      syscall_nr_settimeofday := syscall_nr_settimeofday_55;
+      syscall_nr_clock_gettime := syscall_nr_clock_gettime_55;
+      syscall_nr_clock_settime := syscall_nr_clock_settime_55;
+      syscall_nr_clock_getres := syscall_nr_clock_getres_55;
+      syscall_nr_select := syscall_nr_select_55;
+      syscall_nr_getrusage := syscall_nr_getrusage_55;
+      syscall_nr_utimes := syscall_nr_utimes_55;
+      syscall_nr_futimes := syscall_nr_futimes_55;
+      syscall_nr_nanosleep := syscall_nr_nanosleep_55;
+      syscall_nr_kevent := syscall_nr_kevent_55;
+    end;
+  if version>= 5004 then
+    begin
+      syscall_nr_statfs := syscall_nr_statfs_54;
+      syscall_nr_fstatfs := syscall_nr_fstatfs_54;
+      syscall_nr_fhstatfs := syscall_nr_fhstatfs_54;
+    end
+  else if version >= 4004 then
+    begin
+      syscall_nr_statfs := syscall_nr_statfs_44;
+      syscall_nr_fstatfs := syscall_nr_fstatfs_44;
+      syscall_nr_fhstatfs := syscall_nr_fhstatfs_44;
+    end
+  else if version < 2006 then
+    begin
+      syscall_nr_statfs := syscall_nr_statfs_20;
+      syscall_nr_fstatfs := syscall_nr_fstatfs_20;
+      syscall_nr_pipe := syscall_nr_pipe_20;
+    end;
+
+  if version>= 5005 then
+    begin
+      syscall_nr_stat := syscall_nr_stat_55;
+      syscall_nr_fstat := syscall_nr_fstat_55;
+      syscall_nr_lstat := syscall_nr_lstat_55;
+      syscall_nr_fstatat := syscall_nr_fstatat_55;
+    end
+  else if version < 3006 then
+    begin
+      syscall_nr_stat := syscall_nr_stat_20;
+      syscall_nr_fstat := syscall_nr_fstat_20;
+      syscall_nr_lstat := syscall_nr_lstat_20;
+      syscall_nr_fhstat := syscall_nr_fhstat_20;
+    end;
+  if version < 3005 then
+    syscall_nr_sigaltstack := syscall_nr_sigaltstack_20;
+  if version = 5001 then
+    syscall_nr___tfork := syscall_nr___tfork_51
+  else if version > 5001 then
+    syscall_nr___tfork := syscall_nr___tfork_52;
+
+
+
+end;