Просмотр исходного кода

OpenBSD Kernel.Time: clock -> clock_gettime

Alexander Shiryaev 11 лет назад
Родитель
Сommit
7f3e914824

+ 18 - 0
BlackBox/_OpenBSD_/Lin/Mod/Libc.txt

@@ -365,6 +365,14 @@ MODULE LinLibc ["libc.so.70.0"];
 		O_DIRECTORY* = {17}; (* fail if not a directory *)
 
 
+		CLOCK_REALTIME* = 0;
+		CLOCK_VIRTUAL* = 1;
+		CLOCK_PROCESS_CPUTIME_ID* = 2;
+		CLOCK_MONOTONIC* = 3;
+		CLOCK_THREAD_CPUTIME_ID* = 4;
+		CLOCK_UPTIME* = 5;
+
+
 	TYPE
 		StrArray* = POINTER TO ARRAY [untagged] OF PtrSTR;
 		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
@@ -379,6 +387,7 @@ MODULE LinLibc ["libc.so.70.0"];
 		ssize_t* = INTEGER;
 		off_t* = LONGINT;
 		clock_t* = LONGINT;
+		clockid_t* = INTEGER;
 		time_t* = LONGINT;
 		mode_t* = SET;
 		pid_t* = INTEGER;
@@ -564,6 +573,12 @@ MODULE LinLibc ["libc.so.70.0"];
 				d_name*: ARRAY [untagged] 255 + 1 OF SHORTCHAR;
 		END;
 
+		timespec_t* = RECORD [untagged]
+			(* OpenBSD 5.4 /usr/include/time.h *)
+				tv_sec*: time_t; (* seconds *)
+				tv_nsec*: long; (* and nanoseconds *)
+		END;
+
 (*
 	VAR
 		stdin*: INTEGER;
@@ -594,6 +609,9 @@ MODULE LinLibc ["libc.so.70.0"];
 	(* ANSI C 89 *)
 		PROCEDURE [ccall] clock* (): clock_t;
 
+	(* POSIX.1 *)
+		PROCEDURE [ccall] clock_gettime* (clock_id: clockid_t; VAR tp: timespec_t): int;
+
 	PROCEDURE [ccall] mmap* (adr: PtrVoid; len: size_t; prot: intFlags; flags: intFlags; fd: int; offset: off_t): PtrVoid;
 	(* BSD *)
 		PROCEDURE [ccall] munmap* (adr: PtrVoid; len: size_t): int;

+ 5 - 2
BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/Makefile

@@ -8,11 +8,11 @@ INCDIR ?= /usr/include
 
 PY = python2.7
 
-DEFS = clockspersec defs-map defs-prot defs-sigmask nsig defs-signo defs-fpe defs-sa defs-errno namemax defs-fcntlo defs-basictypes defs-sc
+DEFS = clockspersec defs-map defs-prot defs-sigmask nsig defs-signo defs-fpe defs-sa defs-errno namemax defs-fcntlo defs-basictypes defs-sc defs-clockid
 
 all: Libc.txt ${DEFS} strerrnocase.txt
 
-Libc.txt: Libc.txt.templ ${DEFS} libver osname machine custom fields-dirent fields-sigaction fields-siginfo fields-stack fields-stat fields-tm fields-ucontext
+Libc.txt: Libc.txt.templ ${DEFS} libver osname machine custom fields-dirent fields-sigaction fields-siginfo fields-stack fields-stat fields-tm fields-ucontext fields-timespec
 	${PY} ./untempl.py Libc.txt.templ ${.TARGET}
 
 clockspersec:
@@ -59,6 +59,9 @@ defs-basictypes: sizeofs
 defs-sc:
 	./dumpdefs.py 2 1 i ${INCDIR}/unistd.h | grep _SC_ > ${.TARGET}
 
+defs-clockid:
+	./dumpdefs.py 2 1 i ${INCDIR}/sys/_time.h | grep CLOCK_ > ${.TARGET}
+
 #defs-madv:
 #	./dumpdefs.py 2 0 i ${INCDIR}/sys/mman.h | grep MADV > ${.TARGET}
 #	./dumpdefs.py 2 1 i ${INCDIR}/sys/mman.h | grep MADV >> ${.TARGET}

+ 3 - 0
BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/fields-timespec

@@ -0,0 +1,3 @@
+			(* OpenBSD 5.4 /usr/include/time.h *)
+				tv_sec*: time_t; (* seconds *)
+				tv_nsec*: long; (* and nanoseconds *)

+ 2 - 0
BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/sizeofs.c

@@ -3,6 +3,7 @@
 #include <setjmp.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <time.h>
 
 #define TABS "\t\t"
 
@@ -59,6 +60,7 @@ int main ()
 	D("ssize_t", sizeof(ssize_t), FALSE, TRUE);
 	D("off_t", sizeof(off_t), FALSE, TRUE);
 	D("clock_t", sizeof(clock_t), FALSE, TRUE);
+	D("clockid_t", sizeof(clockid_t), FALSE, TRUE);
 	D("time_t", sizeof(time_t), FALSE, TRUE);
 	D("mode_t", sizeof(mode_t), TRUE, TRUE);
 	D("pid_t", sizeof(pid_t), FALSE, TRUE);

BIN
BlackBox/_OpenBSD_/System/Mod/Kernel.odc


BIN
BlackBox/_OpenBSD_/libBB.so


BIN
BlackBox/_OpenBSD_/libBB0.so


+ 0 - 2
README

@@ -67,8 +67,6 @@ Files:
 					Kernel.TrapHandler
 						OpenBSD sigcontext-specific
 					Kernel.Time
-						CLOCKS_PER_SEC related
-						LEN(clock_t) = 8
 					Kernel.InitModule
 						mprotect call added
 					Kernel.InstallSignals: