README 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. Oberon Microsystems BlackBox Component Builder (http://www.oberon.ch/)
  2. Port for OpenBSD/i386, GNU/Linux/i386, FreeBSD/i386
  3. Some significant parts taken from OpenBUGS (http://www.openbugs.info/)
  4. Tested on:
  5. OpenBSD 5.4
  6. Fedora Core 17
  7. Ubuntu 12.04 LTS, 12.10
  8. FreeBSD 9.0
  9. Status: stable, but TODO list is not empty
  10. How to build:
  11. if you have 64-bit version of Ubuntu, do this:
  12. sudo apt-get install libc6-dev-i386
  13. cd BlackBox
  14. ./clean
  15. ./switch-target `uname -s`
  16. compile loader executable:
  17. cd BlackBox/Lin/Rsrc/loader
  18. make clean
  19. make
  20. mv loader ../../../_`uname -s`_/Lin/Rsrc/loader/
  21. compile self:
  22. cd BlackBox
  23. ./build
  24. ./pack-dev0
  25. Files:
  26. original:
  27. BlackBox:
  28. Comm/Mod/Streams.odc
  29. Comm/Docu/*
  30. Dev/Mod/*
  31. all except ElfLinker16
  32. Dev/Docu/*
  33. all except ElfLinker
  34. Dev/Rsrc/*
  35. Dev/Spec/*
  36. Docu/BB-License.odc
  37. Obx/*
  38. Std/*
  39. System/Mod/
  40. all except Console
  41. System/Rsrc/*
  42. Text/*
  43. Xhtml
  44. OpenBUGS:
  45. Dev/Mod/ElfLinker16.odc
  46. Dev/Docu/ElfLinker.odc
  47. Docu/OpenBUGS-License.odc
  48. http://forum.oberoncore.ru/viewtopic.php?f=34&t=1159&sid=3e82517160caa46c64331178c1b61e95:
  49. _FreeBSDLinuxOpenBSD_/System/Mod/Kernel_so_init.odc
  50. http://oberoncore.ru/projects/bb16ru-kras/:
  51. Dev/Rsrc/ru/Strings.odc
  52. Std/Rsrc/ru/Strings.odc
  53. System/Rsrc/ru/Strings.odc
  54. modified:
  55. _OpenBSD_/System/Mod/Kernel.odc:
  56. BlackBox 1.6 System/Mod/Kernel.odc, OpenBUGS Lin/Mod/linKernel.odc:
  57. OpenBSD specific:
  58. Memory management rewritten (based on mmap)
  59. Kernel.TrapHandler
  60. OpenBSD sigcontext-specific
  61. Kernel.Time
  62. CLOCKS_PER_SEC related
  63. LEN(clock_t) = 8
  64. Kernel.InitModule
  65. mprotect call added
  66. Kernel.InstallSignals:
  67. do not install signal handler for SIGTHR (when executable linked with -pthread)
  68. IsReadable
  69. GetRefVar memory access protection
  70. _Linux_/System/Mod/Kernel.odc:
  71. _OpenBSD_/System/Mod/Kernel.odc modified for Linux:
  72. Time*
  73. TrapHandler
  74. mmap: use "/dev/zero" device instead of -1
  75. mprotect addresses must be page-aligned
  76. do not show warning message if signal install failed
  77. _FreeBSD_/System/Mod/Kernel.odc:
  78. _OpenBSD_/System/Mod/Kernel.odc modified for FreeBSD:
  79. Time*
  80. TrapHandler
  81. SetupModListAccess: initial module list must be writeable (read only by default in FreeBSD)
  82. _Linux_/Host/Mod/Files.odc:
  83. OpenBUGS Lin/Mod/linHostFiles.odc:
  84. synchronized with BlackBox 1.6
  85. server configuration via BB_PRIMARY_DIR and BB_SECONDARY_DIR environment variables (not command line)
  86. filenames encoding translation implemented
  87. _OpenBSD_/Host/Mod/Files.odc:
  88. _Linux_/Host/Mod/Files.odc:
  89. OpenBSD-specific:
  90. size_t
  91. __xstat -> stat
  92. LEN(clock_t) = 8
  93. _FreeBSD_/Host/Mod/Files.odc:
  94. _Linux_/Host/Mod/Files.odc:
  95. FreeBSD-specific:
  96. size_t
  97. __xstat -> stat
  98. mode_t
  99. _Linux_/Lin/Mod/Libc.odc:
  100. OpenBUGS Lin/Mod/Libc.odc:
  101. PROT_*, MAP_*, O_*, _SC_PAGESIZE, SIGSTKSZ CONSTs added
  102. open, close, read, write, mmap, munmap, mprotect, getenv, sysconf, sigaltstack functions added
  103. _Linux_/Lin/Mod/Dl.odc:
  104. OpenBUGS Lin/Mod/Dl.odc
  105. _Linux_/Host/Mod/Dates.odc: from http://oberoncore.ru/
  106. _FreeBSDOpenBSD_/Host/Mod/Dates.odc:
  107. _Linux_/Host/Mod/Dates.odc: OpenBSD and FreeBSD specific
  108. _FreeBSDLinuxOpenBSD_/Host/Mod/TextConv.odc:
  109. BlackBox 1.6 Host/Mod/TextConv.odc:
  110. Windows-specific converters removed
  111. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  112. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  113. use BB_PACKED_NAME environment variable instead of appName
  114. GetNextSubLoc, GetLoc: filenames-specific
  115. _FreeBSDLinuxOpenBSD_Interp/Host/Mod/DevPackedFiles.odc:
  116. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  117. with priority to packed files
  118. _FreeBSDLinuxOpenBSD_/System/Mod/Config.odc:
  119. BlackBox 1.6 System/Mod/Config.odc:
  120. Windows-specific removed
  121. _FreeBSDLinuxOpenBSD_/Host/Mod/Registry.odc:
  122. BlackBox 1.6 Host/Mod/Registry.odc
  123. _Windows_Interp/Host/Mod/{Dates.odc,Lang.odc}:
  124. part of BlackBox 1.6 Host/Mod/Dialog.odc
  125. _Windows_Interp/Host/Mod/DevPackedFiles.odc:
  126. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  127. with priority to packed files
  128. new:
  129. Console:
  130. System/Mod/Console.odc: Console interface
  131. _FreeBSDLinux_/Host/Mod/Console.odc: Console implementation for Linux and FreeBSD
  132. _OpenBSD_/Host/Mod/Console.odc:
  133. _Linux_/Host/Mod/Console.odc: stdin -> SYSTEM.ADR(__sF[0]) (OpenBSD-specific)
  134. _Windows_/Host/Mod/Console.odc:
  135. Console implementation for Windows
  136. Cons/Mod
  137. Interp.odc: console interpreter
  138. Compiler.odc: console interface to Dev compiler
  139. Log.odc: Log.Hook console implementation
  140. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Libc.odc: OpenBSD and FreeBSD specific libc interface
  141. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Dl.odc: OpenBSD and FreeBSD specific interface to dl
  142. {_Linux_,_OpenBSD_,_FreeBSD_}/Lin/Mod/Iconv.odc: interface to iconv
  143. {_Linux_,_OpenBSD_}/Lin/Mod/Ioctl.odc: interface to ioctl
  144. {_Linux_,_OpenBSD_}/Lin/Mod/Termios.odc: interface to termios
  145. {_Linux_,_OpenBSD_}/Lin/Mod/Net.odc: interface to network functionality
  146. _FreeBSDLinuxOpenBSD_/Host/Mod/Lang.odc: Dialog.LanguageHook implementation and LANG environment variable support
  147. _LinuxOpenBSD_/Comm/Mod/V24.odc: CommV24 implementation for Linux and OpenBSD
  148. _OpenBSD_/Comm/Mod/TCP.odc: CommTCP implementation for OpenBSD
  149. _Linux_/Comm/Mod/TCP.odc: CommTCP implementation for Linux
  150. {_OpenBSD_,_Linux_}/libBB.so: compiled and linked shared library to run BlackBox
  151. {_OpenBSD_,_Linux_}/libBB0.so: compiled, linked and packed shared library to run console interpreter
  152. _Windows_/dev0.exe: compiled and linked simple development interpreter
  153. Dev0/Views.odc: minimal Views implementation required to compile StdInterpreter
  154. __Interp/Host/Mod: Fonts.odc, Dialog.odc, Windows.odc: simple Host implementation
  155. __Interp/System/Mod/Init.odc: Init for console interpreter
  156. Notes:
  157. Kernel.baseStack issue:
  158. baseStack is upper border:
  159. * of garbage collector stack scan range (see Kernel.MarkLocals)
  160. * of TrapViewer stack show range (see Kernel.TrapHandler)
  161. it is initialized in Kernel.INIT and initially points close to upper
  162. border of library stack (because Kernel.INIT called from library
  163. constructor, which executes close to upper border of library stack)
  164. it can be changed in Kernel.Start to skip unnecessary stack addresses
  165. if libBB.so exports procedure for calling from main program,
  166. then it will be executed on main program stack, not on library
  167. stack, at stack addresses higher than baseStack.
  168. Thus, MarkLocals and TrapViewer will work incorrectly.
  169. in this case, to solve problem, baseStack should be adjusted and
  170. should point to stack on which this exported procedure executes
  171. if necessary, this can be done using auxiliary module Kernel_so_init,
  172. or by using Kernel.Start
  173. Command line support removed because there is no easy way to access argc argv from outside main()
  174. Environment variables supported instead:
  175. BB_PRIMARY_DIR
  176. BB_SECONDARY_DIR (was: /USE command line option)
  177. BB_PACKED_NAME
  178. Alexander V. Shiryaev, 2013