README 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. Kernel.InitModule
  63. mprotect call added
  64. Kernel.InstallSignals:
  65. do not install signal handler for SIGTHR (when executable linked with -pthread)
  66. IsReadable
  67. GetRefVar memory access protection
  68. _Linux_/System/Mod/Kernel.odc:
  69. _OpenBSD_/System/Mod/Kernel.odc modified for Linux:
  70. Time*
  71. TrapHandler
  72. mmap: use "/dev/zero" device instead of -1
  73. mprotect addresses must be page-aligned
  74. do not show warning message if signal install failed
  75. _FreeBSD_/System/Mod/Kernel.odc:
  76. _OpenBSD_/System/Mod/Kernel.odc modified for FreeBSD:
  77. Time*
  78. TrapHandler
  79. SetupModListAccess: initial module list must be writeable (read only by default in FreeBSD)
  80. _Linux_/Host/Mod/Files.odc:
  81. OpenBUGS Lin/Mod/linHostFiles.odc:
  82. synchronized with BlackBox 1.6
  83. server configuration via BB_PRIMARY_DIR and BB_SECONDARY_DIR environment variables (not command line)
  84. filenames encoding translation implemented
  85. _OpenBSD_/Host/Mod/Files.odc:
  86. _Linux_/Host/Mod/Files.odc:
  87. OpenBSD-specific:
  88. size_t
  89. __xstat -> stat
  90. LEN(clock_t) = 8
  91. _FreeBSD_/Host/Mod/Files.odc:
  92. _Linux_/Host/Mod/Files.odc:
  93. FreeBSD-specific:
  94. size_t
  95. __xstat -> stat
  96. mode_t
  97. _Linux_/Lin/Mod/Libc.odc:
  98. OpenBUGS Lin/Mod/Libc.odc:
  99. PROT_*, MAP_*, O_*, _SC_PAGESIZE, SIGSTKSZ CONSTs added
  100. open, close, read, write, mmap, munmap, mprotect, getenv, sysconf, sigaltstack functions added
  101. _Linux_/Lin/Mod/Dl.odc:
  102. OpenBUGS Lin/Mod/Dl.odc
  103. _Linux_/Host/Mod/Dates.odc: from http://oberoncore.ru/
  104. _FreeBSDOpenBSD_/Host/Mod/Dates.odc:
  105. _Linux_/Host/Mod/Dates.odc: OpenBSD and FreeBSD specific
  106. _FreeBSDLinuxOpenBSD_/Host/Mod/TextConv.odc:
  107. BlackBox 1.6 Host/Mod/TextConv.odc:
  108. Windows-specific converters removed
  109. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  110. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  111. use BB_PACKED_NAME environment variable instead of appName
  112. GetNextSubLoc, GetLoc: filenames-specific
  113. _FreeBSDLinuxOpenBSD_Interp/Host/Mod/DevPackedFiles.odc:
  114. _FreeBSDLinuxOpenBSD_/Host/Mod/PackedFiles.odc:
  115. with priority to packed files
  116. _FreeBSDLinuxOpenBSD_/System/Mod/Config.odc:
  117. BlackBox 1.6 System/Mod/Config.odc:
  118. Windows-specific removed
  119. _FreeBSDLinuxOpenBSD_/Host/Mod/Registry.odc:
  120. BlackBox 1.6 Host/Mod/Registry.odc
  121. _Windows_Interp/Host/Mod/{Dates.odc,Lang.odc}:
  122. part of BlackBox 1.6 Host/Mod/Dialog.odc
  123. _Windows_Interp/Host/Mod/DevPackedFiles.odc:
  124. BlackBox 1.6 Host/Mod/PackedFiles.odc:
  125. with priority to packed files
  126. new:
  127. Console:
  128. System/Mod/Console.odc: Console interface
  129. _FreeBSDLinux_/Host/Mod/Console.odc: Console implementation for Linux and FreeBSD
  130. _OpenBSD_/Host/Mod/Console.odc:
  131. _Linux_/Host/Mod/Console.odc: stdin -> SYSTEM.ADR(__sF[0]) (OpenBSD-specific)
  132. _Windows_/Host/Mod/Console.odc:
  133. Console implementation for Windows
  134. Cons/Mod
  135. Interp.odc: console interpreter
  136. Compiler.odc: console interface to Dev compiler
  137. Log.odc: Log.Hook console implementation
  138. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Libc.odc: OpenBSD and FreeBSD specific libc interface
  139. {_OpenBSD_,_FreeBSD_}/Lin/Mod/Dl.odc: OpenBSD and FreeBSD specific interface to dl
  140. {_Linux_,_OpenBSD_,_FreeBSD_}/Lin/Mod/Iconv.odc: interface to iconv
  141. {_Linux_,_OpenBSD_}/Lin/Mod/Ioctl.odc: interface to ioctl
  142. {_Linux_,_OpenBSD_}/Lin/Mod/Termios.odc: interface to termios
  143. {_Linux_,_OpenBSD_}/Lin/Mod/Net.odc: interface to network functionality
  144. _FreeBSDLinuxOpenBSD_/Host/Mod/Lang.odc: Dialog.LanguageHook implementation and LANG environment variable support
  145. _LinuxOpenBSD_/Comm/Mod/V24.odc: CommV24 implementation for Linux and OpenBSD
  146. _OpenBSD_/Comm/Mod/TCP.odc: CommTCP implementation for OpenBSD
  147. _Linux_/Comm/Mod/TCP.odc: CommTCP implementation for Linux
  148. {_OpenBSD_,_Linux_}/libBB.so: compiled and linked shared library to run BlackBox
  149. {_OpenBSD_,_Linux_}/libBB0.so: compiled, linked and packed shared library to run console interpreter
  150. _Windows_/dev0.exe: compiled and linked simple development interpreter
  151. Dev0/Views.odc: minimal Views implementation required to compile StdInterpreter
  152. __Interp/Host/Mod: Fonts.odc, Dialog.odc, Windows.odc: simple Host implementation
  153. __Interp/System/Mod/Init.odc: Init for console interpreter
  154. Notes:
  155. Kernel.baseStack issue:
  156. baseStack is upper border:
  157. * of garbage collector stack scan range (see Kernel.MarkLocals)
  158. * of TrapViewer stack show range (see Kernel.TrapHandler)
  159. it is initialized in Kernel.INIT and initially points close to upper
  160. border of library stack (because Kernel.INIT called from library
  161. constructor, which executes close to upper border of library stack)
  162. it can be changed in Kernel.Start to skip unnecessary stack addresses
  163. if libBB.so exports procedure for calling from main program,
  164. then it will be executed on main program stack, not on library
  165. stack, at stack addresses higher than baseStack.
  166. Thus, MarkLocals and TrapViewer will work incorrectly.
  167. in this case, to solve problem, baseStack should be adjusted and
  168. should point to stack on which this exported procedure executes
  169. if necessary, this can be done using auxiliary module Kernel_so_init,
  170. or by using Kernel.Start
  171. Command line support removed because there is no easy way to access argc argv from outside main()
  172. Environment variables supported instead:
  173. BB_PRIMARY_DIR
  174. BB_SECONDARY_DIR (was: /USE command line option)
  175. BB_PACKED_NAME
  176. Alexander V. Shiryaev, 2013