README 6.0 KB

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