README 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. 1.6-rc6 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. new:
  124. Console:
  125. System/Mod/Console.odc: Console interface
  126. _FreeBSDLinux_/Host/Mod/Console.odc: Console implementation for Linux and FreeBSD
  127. _OpenBSD_/Host/Mod/Console.odc:
  128. _Linux_/Host/Mod/Console.odc: stdin -> SYSTEM.ADR(__sF[0]) (OpenBSD-specific)
  129. _Windows_/Host/Mod/Console.odc:
  130. Console implementation for Windows
  131. Cons/Mod
  132. Interp.odc: console interpreter
  133. Compiler.odc: console interface to Dev compiler
  134. Log.odc: Log.Hook console implementation
  135. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Libc.odc: OpenBSD and FreeBSD specific libc interface
  136. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Dl.odc: OpenBSD and FreeBSD specific interface to dl
  137. {_Linux_,_OpenBSD_,_FreeBSD_}/Lin/Mod/Iconv.odc: interface to iconv
  138. {_Linux_,_OpenBSD_}/Lin/Mod/Ioctl.odc: interface to ioctl
  139. {_Linux_,_OpenBSD_}/Lin/Mod/Termios.odc: interface to termios
  140. {_Linux_,_OpenBSD_}/Lin/Mod/Net.odc: interface to network functionality
  141. _FreeBSDLinuxOpenBSD_/Host/Mod/Lang.odc: Dialog.LanguageHook implementation and LANG environment variable support
  142. _LinuxOpenBSD_/Comm/Mod/V24.odc: CommV24 implementation for Linux and OpenBSD
  143. _OpenBSD_/Comm/Mod/TCP.odc: CommTCP implementation for OpenBSD
  144. _Linux_/Comm/Mod/TCP.odc: CommTCP implementation for Linux
  145. {_OpenBSD_,_Linux_}/libBB.so: compiled and linked shared library to run BlackBox
  146. {_OpenBSD_,_Linux_}/libBB0.so: compiled, linked and packed shared library to run console interpreter
  147. _Windows_/dev0.exe: compiled and linked simple development interpreter
  148. Dev0/Views.odc: minimal Views implementation required to compile StdInterpreter
  149. __Interp/Host/Mod: Fonts.odc, Dialog.odc, Windows.odc: simple Host implementation
  150. __Interp/System/Mod/Init.odc: Init for console interpreter
  151. Notes:
  152. Kernel.baseStack issue:
  153. baseStack is upper border:
  154. * of garbage collector stack scan range (see Kernel.MarkLocals)
  155. * of TrapViewer stack show range (see Kernel.TrapHandler)
  156. it is initialized in Kernel.INIT and initially points close to upper
  157. border of library stack (because Kernel.INIT called from library
  158. constructor, which executes close to upper border of library stack)
  159. it can be changed in Kernel.Start to skip unnecessary stack addresses
  160. if libBB.so exports procedure for calling from main program,
  161. then it will be executed on main program stack, not on library
  162. stack, at stack addresses higher than baseStack.
  163. Thus, MarkLocals and TrapViewer will work incorrectly.
  164. in this case, to solve problem, baseStack should be adjusted and
  165. should point to stack on which this exported procedure executes
  166. if necessary, this can be done using auxiliary module Kernel_so_init,
  167. or by using Kernel.Start
  168. Command line support removed because there is no easy way to access argc argv from outside main()
  169. Environment variables supported instead:
  170. BB_PRIMARY_DIR
  171. BB_SECONDARY_DIR (was: /USE command line option)
  172. BB_PACKED_NAME
  173. Alexander V. Shiryaev, 2013