README 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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/*
  23. Dev/Mod/*
  24. all except ElfLinker16
  25. Dev/Rsrc/*
  26. Docu/BB-License.odc
  27. Docu/BB-Licensing-Policy.odc
  28. Docu/BB-Open-Source-License.odc
  29. Obx/*
  30. Std/*
  31. System/Mod/
  32. all except Console
  33. System/Rsrc/*
  34. Text/*
  35. Xhtml
  36. OpenBUGS:
  37. Dev/Mod/ElfLinker16.odc
  38. Dev/Docu/ElfLinker.odc
  39. Docu/OpenBUGS-License.odc
  40. http://forum.oberoncore.ru/viewtopic.php?f=34&t=1159&sid=3e82517160caa46c64331178c1b61e95:
  41. {_LinuxOpenBSD_}/System/Mod/Kernel_so_init.odc
  42. http://oberoncore.ru/projects/bb16ru-kras/:
  43. Dev/Rsrc/ru/Strings.odc
  44. Std/Rsrc/ru/Strings.odc
  45. System/Rsrc/ru/Strings.odc
  46. modified:
  47. _OpenBSD_/System/Mod/Kernel.odc:
  48. 1.6-rc6 System/Mod/Kernel.odc, OpenBUGS Lin/Mod/linKernel.odc:
  49. OpenBSD specific:
  50. Memory management rewritten (based on mmap)
  51. Kernel.TrapHandler
  52. OpenBSD sigcontext-specific
  53. Kernel.Time
  54. CLOCKS_PER_SEC related
  55. Kernel.InitModule
  56. mprotect call added
  57. Kernel.InstallSignals:
  58. do not install signal handler for SIGTHR (when executable linked with -pthread)
  59. IsReadable
  60. Kernel.cmdLine support:
  61. Kernel.INIT (SetCmdLine2)
  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. _OpenBSD_/Host/Mod/Files.odc:
  70. OpenBUGS Lin/Mod/linHostFiles.odc:
  71. OpenBSD-specific:
  72. size_t
  73. __xstat -> stat
  74. Kernel.cmdLine support:
  75. str := "" -> str := Kernel.cmdLine$
  76. _Linux_/Host/Mod/Files.odc:
  77. OpenBUGS Lin/Mod/linHostFiles.odc:
  78. Kernel.cmdLine support:
  79. str := "" -> str := Kernel.cmdLine$
  80. _OpenBSD_/Lin/Mod/Libc.txt:
  81. OpenBUGS Lin/Mod/Libc.odc:
  82. OpenBSD-specific
  83. _Linux_/Lin/Mod/Libc.odc:
  84. OpenBUGS Lin/Mod/Libc.odc:
  85. PROT_*, MAP_*, O_*, _SC_PAGESIZE, SIGSTKSZ CONSTs added
  86. open, close, read, write, mmap, munmap, mprotect, getenv, sysconf, sigaltstack functions added
  87. _Linux_/Lin/Mod/Dl.odc:
  88. OpenBUGS Lin/Mod/Dl.odc
  89. _Linux_/Host/Mod/Dates.odc: from http://oberoncore.ru/
  90. _OpenBSD_/Host/Mod/Dates.odc:
  91. _Linux_/Host/Mod/Dates.odc: OpenBSD-specific
  92. Dev0/Mod:
  93. CP*
  94. BlackBox 1.6-rc6 Dev CP* modified to not depend on Dates, Texts etc.
  95. Compiler.odc:
  96. modified original BlackBox Dev/Mod/Compiler.odc
  97. Linker.odc:
  98. modified original BlackBox Dev/Mod/Linker.odc
  99. ElfLinker16.odc:
  100. modified OpenBUGS Dev/Mod/ElfLinker16.odc
  101. _LinuxOpenBSD_/Host/Mod/TextConv.odc:
  102. BlackBox 1.6-rc6 Host/Mod/TextConv.odc:
  103. Windows-specific converters removed
  104. new:
  105. Console:
  106. System/Mod/Console.odc: Console interface
  107. _Linux_/Host/Mod/Console.odc: Console implementation for Linux
  108. _OpenBSD_/Host/Mod/Console.odc:
  109. _Linux_/Host/Mod/Console.odc: stdin -> SYSTEM.ADR(__sF[0]) (OpenBSD-specific)
  110. _Windows_/Host/Mod/Console.odc:
  111. Console implementation for Windows
  112. Cons/Mod
  113. Interp.odc: console interpreter
  114. Compiler.odc: console interface to Dev compiler
  115. Log.odc: Log.Hook console implementation
  116. Enc: encodings conversion subsystem
  117. typical usage -- from low level modules (from Hosts), as libiconv
  118. _LinuxOpenBSD_/Host/Mod/Lang.odc: Dialog.LanguageHook implementation and LANG environment variable support
  119. {_OpenBSD_,_Linux_}/libBB.so: compiled and linked shared library to run BlackBox
  120. {_OpenBSD_,_Linux_}/libBB0.so: compiled and linked shared library to run simple development interpreter
  121. _Windows_/dev0.exe: compiled and linked simple development interpreter
  122. Dev0/Views.odc: minimal Views implementation required to compile StdInterpreter
  123. __Interp/Host/Mod: Fonts.odc, Dialog.odc, Windows.odc: simple Hosts implementation
  124. _LinuxOpenBSD_/System/Mod/Init.odc: Init for console interpreter
  125. Notes:
  126. Dev0:
  127. I will not remove Dev0 because I can not link .so library based on ConsInterp and Dev
  128. Kernel.baseStack issue (preliminary description):
  129. baseStack is upper border:
  130. * of garbage collector stack scan range (see Kernel.MarkLocals)
  131. * of TrapViewer stack show range (see Kernel.TrapHandler)
  132. it is initialized in Kernel.INIT and initially points close to upper
  133. border of library stack (because Kernel.INIT called from library
  134. constructor, which executes close to upper border of library stack)
  135. it can be changed in Kernel.Start to skip unnecessary stack addresses
  136. if libBB.so exports procedure for calling from main program,
  137. then it will be executed on main program stack, not on library
  138. stack, at stack addresses higher than baseStack.
  139. Thus, MarkLocals and TrapViewer will work incorrectly.
  140. in this case, to solve problem, baseStack should be adjusted and
  141. should point to stack on which this exported procedure executes
  142. if necessary, this can be done using auxiliary module Kernel_so_init
  143. A. V. Shiryaev, 2012