浏览代码

Kernel rewritten (memory management; catch stack overflow exceptions)

Alexander Shiryaev 12 年之前
父节点
当前提交
d32fa349b6

+ 0 - 0
BlackBox/Lin/Mod/Dates.odc → BlackBox/Lin/Mod/Obsd.Dates.odc


+ 1 - 1
BlackBox/Lin/Mod/Dates.txt → BlackBox/Lin/Mod/Obsd.Dates.txt

@@ -1,6 +1,6 @@
 MODULE HostDates;
 
-	(* THIS IS TEXT COPY OF Dates.odc *)
+	(* THIS IS TEXT COPY OF Obsd.Dates.odc *)
 	(* DO NOT EDIT *)
 
 	IMPORT 

二进制
BlackBox/Lin/Mod/Obsd.Kernel.odc


文件差异内容过多而无法显示
+ 295 - 422
BlackBox/Lin/Mod/Obsd.Kernel.txt


+ 187 - 1
BlackBox/Lin/Mod/Obsd.Libc.txt

@@ -186,18 +186,189 @@ MODULE LinLibc ["libc.so.66.0"];
 		MAP_TRYFIXED* = {10}; (* attempt hint address, even within heap *)
 		MAP_COPY* = {2}; (* "copy" region at mmap time *)
 
+		MAP_FAILED* = -1;
+
 		(* OpenBSD 5.2 /usr/include/i386/param.h *)
 		PAGE_SHIFT* = 12;
 		PAGE_SIZE* = 4096; (* LSL(1, PAGE_SHIFT) *)
 		PAGE_MASK* = PAGE_SIZE - 1;
 
+		(* OpenBSD 5.2: /usr/include/fcntl.h *)
+		O_RDONLY* = {};
+		O_WRONLY* = {0};
+		O_RDWR* = {1};
+		O_ACCMODE* = {0,1};
+
+		O_NONBLOCK* = {2}; (* Do not block on open or for data to become available *)
+		O_APPEND* = {3}; (* Append on each write *)
+		O_CREAT* = {9}; (* Create file if it does not exist *)
+		O_TRUNC* = {10}; (* Truncate size to 0 *)
+		O_EXCL* = {11}; (* Error if create and file exists *)
+		O_SYNC* = {7}; (* Perform synchronous I/O operations *)
+		O_SHLOCK* = {4}; (* Atomically obtain a shared lock *)
+		O_EXLOCK* = {5}; (* Atomically obtain an exclusive lock *)
+		O_NOFOLLOW* = {8}; (* If last path element is a symlink, don't follow it *)
+		O_CLOEXEC* = {16}; (* Set FD_CLOEXEC on the new file descriptor *)
+		O_DIRECTORY* = {17}; (* Error if path does not name a directory *)
+
+		(* OpenBSD 5.2 /usr/include/unistd.h *)
+		_SC_ARG_MAX* = 1;
+		_SC_CHILD_MAX* = 2;
+		_SC_CLK_TCK* = 3;
+		_SC_NGROUPS_MAX* = 4;
+		_SC_OPEN_MAX* = 5;
+		_SC_JOB_CONTROL* = 6;
+		_SC_SAVED_IDS* = 7;
+		_SC_VERSION* = 8;
+		_SC_BC_BASE_MAX* = 9;
+		_SC_BC_DIM_MAX* = 10;
+		_SC_BC_SCALE_MAX* = 11;
+		_SC_BC_STRING_MAX* = 12;
+		_SC_COLL_WEIGHTS_MAX* = 13;
+		_SC_EXPR_NEST_MAX* = 14;
+		_SC_LINE_MAX* = 15;
+		_SC_RE_DUP_MAX* = 16;
+		_SC_2_VERSION* = 17;
+		_SC_2_C_BIND* = 18;
+		_SC_2_C_DEV* = 19;
+		_SC_2_CHAR_TERM* = 20;
+		_SC_2_FORT_DEV* = 21;
+		_SC_2_FORT_RUN* = 22;
+		_SC_2_LOCALEDEF* = 23;
+		_SC_2_SW_DEV* = 24;
+		_SC_2_UPE* = 25;
+		_SC_STREAM_MAX* = 26;
+		_SC_TZNAME_MAX* = 27;
+		_SC_PAGESIZE* = 28;
+		_SC_PAGE_SIZE* = _SC_PAGESIZE; (* 1170 compatibility *)
+		_SC_FSYNC* = 29;
+		_SC_XOPEN_SHM* = 30;
+		_SC_SEM_NSEMS_MAX* = 31;
+		_SC_SEM_VALUE_MAX* = 32;
+		_SC_HOST_NAME_MAX* = 33;
+		_SC_MONOTONIC_CLOCK* = 34;
+		_SC_2_PBS* = 35;
+		_SC_2_PBS_ACCOUNTING* = 36;
+		_SC_2_PBS_CHECKPOINT* = 37;
+		_SC_2_PBS_LOCATE* = 38;
+		_SC_2_PBS_MESSAGE* = 39;
+		_SC_2_PBS_TRACK* = 40;
+		_SC_ADVISORY_INFO* = 41;
+		_SC_AIO_LISTIO_MAX* = 42;
+		_SC_AIO_MAX* = 43;
+		_SC_AIO_PRIO_DELTA_MAX* = 44;
+		_SC_ASYNCHRONOUS_IO* = 45;
+		_SC_ATEXIT_MAX* = 46;
+		_SC_BARRIERS* = 47;
+		_SC_CLOCK_SELECTION* = 48;
+		_SC_CPUTIME* = 49;
+		_SC_DELAYTIMER_MAX* = 50;
+		_SC_IOV_MAX* = 51;
+		_SC_IPV6* = 52;
+		_SC_MAPPED_FILES* = 53;
+		_SC_MEMLOCK* = 54;
+		_SC_MEMLOCK_RANGE* = 55;
+		_SC_MEMORY_PROTECTION* = 56;
+		_SC_MESSAGE_PASSING* = 57;
+		_SC_MQ_OPEN_MAX* = 58;
+		_SC_MQ_PRIO_MAX* = 59;
+		_SC_PRIORITIZED_IO* = 60;
+		_SC_PRIORITY_SCHEDULING* = 61;
+		_SC_RAW_SOCKETS* = 62;
+		_SC_READER_WRITER_LOCKS* = 63;
+		_SC_REALTIME_SIGNALS* = 64;
+		_SC_REGEXP* = 65;
+		_SC_RTSIG_MAX* = 66;
+		_SC_SEMAPHORES* = 67;
+		_SC_SHARED_MEMORY_OBJECTS* = 68;
+		_SC_SHELL* = 69;
+		_SC_SIGQUEUE_MAX* = 70;
+		_SC_SPAWN* = 71;
+		_SC_SPIN_LOCKS* = 72;
+		_SC_SPORADIC_SERVER* = 73;
+		_SC_SS_REPL_MAX* = 74;
+		_SC_SYNCHRONIZED_IO* = 75;
+		_SC_SYMLOOP_MAX* = 76;
+		_SC_THREAD_ATTR_STACKADDR* = 77;
+		_SC_THREAD_ATTR_STACKSIZE* = 78;
+		_SC_THREAD_CPUTIME* = 79;
+		_SC_THREAD_DESTRUCTOR_ITERATIONS* = 80;
+		_SC_THREAD_KEYS_MAX* = 81;
+		_SC_THREAD_PRIO_INHERIT* = 82;
+		_SC_THREAD_PRIO_PROTECT* = 83;
+		_SC_THREAD_PRIORITY_SCHEDULING* = 84;
+		_SC_THREAD_PROCESS_SHARED* = 85;
+		_SC_THREAD_ROBUST_PRIO_INHERIT* = 86;
+		_SC_THREAD_ROBUST_PRIO_PROTECT* = 87;
+		_SC_THREAD_SPORADIC_SERVER* = 88;
+		_SC_THREAD_STACK_MIN* = 89;
+		_SC_THREAD_THREADS_MAX* = 90;
+		_SC_THREADS* = 91;
+		_SC_TIMEOUTS* = 92;
+		_SC_TIMER_MAX* = 93;
+		_SC_TIMERS* = 94;
+		_SC_TRACE* = 95;
+		_SC_TRACE_EVENT_FILTER* = 96;
+		_SC_TRACE_EVENT_NAME_MAX* = 97;
+		_SC_TRACE_INHERIT* = 98;
+		_SC_TRACE_LOG* = 99;
+		_SC_GETGR_R_SIZE_MAX* = 100;
+		_SC_GETPW_R_SIZE_MAX* = 101;
+		_SC_LOGIN_NAME_MAX* = 102;
+		_SC_THREAD_SAFE_FUNCTIONS* = 103;
+		_SC_TRACE_NAME_MAX* = 104;
+		_SC_TRACE_SYS_MAX* = 105;
+		_SC_TRACE_USER_EVENT_MAX* = 106;
+		_SC_TTY_NAME_MAX* = 107;
+		_SC_TYPED_MEMORY_OBJECTS* = 108;
+		_SC_V6_ILP32_OFF32* = 109;
+		_SC_V6_ILP32_OFFBIG* = 110;
+		_SC_V6_LP64_OFF64* = 111;
+		_SC_V6_LPBIG_OFFBIG* = 112;
+		_SC_V7_ILP32_OFF32* = 113;
+		_SC_V7_ILP32_OFFBIG* = 114;
+		_SC_V7_LP64_OFF64* = 115;
+		_SC_V7_LPBIG_OFFBIG* = 116;
+		_SC_XOPEN_CRYPT* = 117;
+		_SC_XOPEN_ENH_I18N* = 118;
+		_SC_XOPEN_LEGACY* = 119;
+		_SC_XOPEN_REALTIME* = 120;
+		_SC_XOPEN_REALTIME_THREADS* = 121;
+		_SC_XOPEN_STREAMS* = 122;
+		_SC_XOPEN_UNIX* = 123;
+		_SC_XOPEN_UUCP* = 124;
+		_SC_XOPEN_VERSION* = 125;
+		_SC_PHYS_PAGES* = 500;
+		_SC_AVPHYS_PAGES* = 501;
+		_SC_NPROCESSORS_CONF* = 502;
+		_SC_NPROCESSORS_ONLN* = 503;
+
+
+		(* OpenBSD 5.2 /usr/include/sys/mman.h *)
+		POSIX_MADV_NORMAL* = 0; (* no further special treatment *)
+		POSIX_MADV_RANDOM* = 1; (* expect random page references *)
+		POSIX_MADV_SEQUENTIAL* = 2; (* expect sequential page references *)
+		POSIX_MADV_WILLNEED* = 3; (* will need these pages *)
+		POSIX_MADV_DONTNEED* = 4; (* don't need these pages *)
+		MADV_SPACEAVAIL* = 5; (* insure that resources are reserved *)
+		MADV_FREE* = 6; (* pages are empty, free them *)
+
+		MADV_NORMAL* = POSIX_MADV_NORMAL;
+		MADV_RANDOM* = POSIX_MADV_RANDOM;
+		MADV_SEQUENTIAL* = POSIX_MADV_SEQUENTIAL;
+		MADV_WILLNEED* = POSIX_MADV_WILLNEED;
+		MADV_DONTNEED* = POSIX_MADV_DONTNEED;
+
+		(* OpenBSD 5.2 /usr/include/sys/signal.h *)
+		MINSIGSTKSZ* = 8192; (* minimum allowable stack *)
+		SIGSTKSZ* = MINSIGSTKSZ + 32768; (* recommended stack size *)
 
 	TYPE
 		(* OpenBSD OK *)
 		__ftw_func_t* = PROCEDURE (fileName: PtrSTR; VAR [nil] stat: stat_t; flag: INTEGER): INTEGER; (* OpenBSD 5.2: OK *)
 		PtrVoid* = INTEGER;
 		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
-		(* PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR; *) (* OpenBSD *)
+		(* PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR; *)
 		PtrInt* = INTEGER;
 		StrArray* = POINTER TO ARRAY [untagged] OF PtrSTR;
 		PtrFILE* = INTEGER;
@@ -472,6 +643,13 @@ MODULE LinLibc ["libc.so.66.0"];
 		wchar_t* = INTEGER; (* OpenBSD 5.2: 32-bit *)
 		PtrWSTR* = POINTER TO ARRAY [untagged] OF wchar_t;
 
+		(* OpenBSD 5.2 *)
+		sigaltstack_t* = RECORD [untagged]
+			ss_sp*: PtrVoid;
+			ss_size*: size_t;
+			ss_flags*: INTEGER;
+		END;
+
 	VAR
 		(* timezone*: INTEGER; (* seconds from GMT *) *) (* OpenBSD: not present *)
 		(* stdin*, stdout*, stderr* : PtrFILE; (* OpenBSD: not present *) *)
@@ -571,4 +749,12 @@ MODULE LinLibc ["libc.so.66.0"];
 	PROCEDURE [ccall] mbtowc* (pwc: PtrWSTR; s: PtrSTR; n: size_t): INTEGER;
 	PROCEDURE [ccall] mbstowcs* (pwcs: PtrWSTR; s: PtrSTR; n: size_t): size_t;
 
+	(* OpenBSD 5.2 *)
+	PROCEDURE [ccall] sysconf* (name: INTEGER): INTEGER;
+
+	(* OpenBSD 5.2 *)
+	PROCEDURE [ccall] madvise* (addr: PtrVoid; len: size_t; behav: INTEGER): INTEGER;
+
+	PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: sigaltstack_t; VAR [nil] oss: sigaltstack_t): INTEGER;
+
 END LinLibc.

二进制
BlackBox/Lin/Mod/Obsd.linKernel.odc


+ 2 - 2
BlackBox/build

@@ -3,7 +3,7 @@
 ./run-lindev <<DATA
 LindevCompiler.Compile('Lin/Mod', 'Obsd.Dl.txt')
 LindevCompiler.Compile('Lin/Mod', 'Obsd.Libc.txt')
-LindevCompiler.Compile('Lin/Mod', 'Obsd.linKernel.txt')
+LindevCompiler.Compile('Lin/Mod', 'Obsd.Kernel.txt')
 
 LindevCompiler.Compile('System/Mod', 'Files.txt')
 LindevCompiler.Compile('System/Mod', 'Console.txt')
@@ -96,7 +96,7 @@ LindevCompiler.Compile('', 'HostFonts.txt')
 LindevCompiler.Compile('', 'HostDialog.txt')
 LindevCompiler.Compile('', 'HostWindows.txt')
 # HostDates:
-LindevCompiler.Compile('Lin/Mod', 'Dates.txt')
+LindevCompiler.Compile('Lin/Mod', 'Obsd.Dates.txt')
 
 LindevCompiler.Compile('Cons/Mod', 'Interp.txt')
 

+ 1 - 1
BlackBox/build-lindev

@@ -3,7 +3,7 @@
 ./run-lindev <<DATA
 LindevCompiler.Compile('Lin/Mod', 'Obsd.Dl.txt')
 LindevCompiler.Compile('Lin/Mod', 'Obsd.Libc.txt')
-LindevCompiler.Compile('Lin/Mod', 'Obsd.linKernel.txt')
+LindevCompiler.Compile('Lin/Mod', 'Obsd.Kernel.txt')
 
 LindevCompiler.Compile('System/Mod', 'Files.txt')
 LindevCompiler.Compile('System/Mod', 'Console.txt')

+ 3 - 1
BlackBox/run-BlackBox

@@ -1,10 +1,12 @@
 #!/bin/sh
 
+# ulimit -s 32000
+
 rn=`readlink -f "${0}"`
 d=`dirname "${rn}"`
 
 exe="BlackBox"
 appName=${exe}
 
-# export LD_DEBUG=1
+# export LD_DEBUG=all
 env LD_LIBRARY_PATH="${d}" CMDLINE="${d}/${appName} `echo ${@}`" "${d}"/${exe}

+ 3 - 1
BlackBox/run-BlackBox-dl

@@ -1,10 +1,12 @@
 #!/bin/sh
 
+# ulimit -s 32000
+
 rn=`readlink -f "${0}"`
 d=`dirname "${rn}"`
 
 exe="BlackBox-dl"
 appName=${exe}
 
-# export LD_DEBUG=1
+# export LD_DEBUG=all
 env LD_LIBRARY_PATH="${d}" CMDLINE="${d}/${appName} `echo ${@}`" "${d}"/${exe}

+ 7 - 5
README

@@ -36,16 +36,18 @@ Files:
 		http://forum.oberoncore.ru/viewtopic.php?f=34&t=1159&sid=3e82517160caa46c64331178c1b61e95:
 			Lin/Mod/Kernel_so_init.odc
 	modified:
-		Lin/Mod/Obsd.linKernel.odc:
-			OpenBUGS Lin/Mod/linKernel.odc:
+		Lin/Mod/Obsd.Kernel.odc:
+			1.6-rc6 System/Mod/Kernel.odc, OpenBUGS Lin/Mod/linKernel.odc:
 				OpenBSD specific:
+					Memory management rewritten (based on mmap)
 					Kernel.TrapHandler
-						OpenBSD sigcontext related
+						OpenBSD sigcontext-specific
 					Kernel.Time
 						CLOCKS_PER_SEC related
 					Kernel.InitModule
-						mprotect added
+						mprotect call added
 					Kernel.InstallSignals:
+						use alternate stack on which signals are to be processed (to catch stack overflow)
 						do not install signal handler for SIGTHR (when executable linked with -pthread)
 				Kernel.cmdLine support:
 					Kernel.INIT (SetCmdLine2)
@@ -62,7 +64,7 @@ Files:
 		Lin/Mod/Obsd.Libc.txt:
 			OpenBUGS Lin/Mod/Libc.odc:
 				OpenBSD-specific
-		Lin/Mod/Dates.odc:
+		Lin/Mod/Obsd.Dates.odc:
 			HostDates, from http://oberoncore.ru/:
 				OpenBSD-specific
 		Lindev/Mod

+ 0 - 2
TODO

@@ -1,6 +1,4 @@
 By priority:
-	TRAPs
-
 	ConsCompiler:
 		interface similar to DevCompiler
 		txt files Converter

部分文件因为文件数量过多而无法显示