bibop-gc-package-defs.scm 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: David Frese, Mike Sperber
  3. ;; Packages for BIBOP GC
  4. ;----------------------------------------------------------------
  5. ; Memory management
  6. (define-interface heap-bibop-interface
  7. (export s48-set-max-heap-size!
  8. s48-max-heap-size
  9. s48-min-heap-size
  10. s48-set-new-small-start-addr!
  11. s48-get-new-small-start-addr
  12. s48-set-new-large-start-addr!
  13. s48-get-new-large-start-addr
  14. s48-set-new-weaks-start-addr!
  15. s48-get-new-weaks-start-addr))
  16. (define-structures ((heap heap-interface)
  17. (heap-gc-util heap-gc-util-interface)
  18. (heap-init heap-init-interface)
  19. (heap-bibop heap-bibop-interface))
  20. (open prescheme ps-receive vm-utilities vm-architecture memory data
  21. ps-memory
  22. debugging
  23. bibop-gc-external)
  24. (files (gc-bibop heap)))
  25. (define-structures ((gc gc-interface)
  26. (gc-bibop-util (export s48-trace-continuation)))
  27. (open prescheme ps-receive vm-utilities vm-architecture
  28. memory data
  29. heap heap-gc-util
  30. interpreter-gc
  31. bibop-gc-external)
  32. (files (gc-bibop gc)
  33. (heap trace-continuation)))
  34. (define-structure allocation allocation-interface
  35. (open prescheme memory heap-gc-util gc data vm-architecture
  36. gc-static-hack
  37. bibop-gc-external)
  38. (files (gc-bibop allocation)))
  39. ; This should be in heap.scm except that it needs GC and GC needs HEAP,
  40. ; so we have to put this in its own package to avoid a dependency loop.
  41. (define-structure gc-static-hack (export)
  42. (open prescheme gc heap-gc-util gc-roots)
  43. (begin
  44. (add-gc-root! (lambda ()
  45. (walk-impure-areas
  46. (lambda (start end)
  47. (s48-trace-locations! start end)
  48. #t))))))
  49. ;; These are the things defined in c/bibop/*
  50. (define-structure bibop-gc-external
  51. (export s48-make-available+gc
  52. s48-allocate-small
  53. s48-allocate-traced+gc
  54. s48-allocate-untraced+gc
  55. s48-allocate-traced-unmovable+gc
  56. s48-allocate-untraced-unmovable+gc
  57. s48-allocate-weak+gc
  58. s48-forbid-gc!
  59. s48-allow-gc!
  60. s48-collect
  61. s48-trace-value
  62. s48-trace-locations!
  63. s48-trace-stob-contents!
  64. s48-extant?
  65. s48-gc-count
  66. s48-write-barrier
  67. s48-check-heap
  68. s48-stob-in-heap?
  69. s48-available
  70. s48-find-all
  71. s48-find-all-records
  72. s48-gather-objects
  73. s48-heap-size
  74. s48-initialize-bibop-heap
  75. s48-allocate-heap-size
  76. s48-initialize-image-areas
  77. s48-check-heap-size!)
  78. (open prescheme)
  79. (begin
  80. ;; (pre)allocates space for a small, fixed-sized objects
  81. (define s48-make-available+gc
  82. (external "s48_make_availableAgc" (=> (integer) null)))
  83. ;; actually allocate a small, fixed-sized object, with no heap
  84. ;; check and no GC
  85. (define s48-allocate-small
  86. (external "s48_allocate_small" (=> (integer) address)))
  87. ;; allocate a potentially large object containing pointers, GCing
  88. ;; to get room if necessary
  89. (define s48-allocate-traced+gc
  90. (external "s48_allocate_tracedAgc" (=> (integer) address)))
  91. ;; allocate a potentially large object not containing pointers,
  92. ;; GCing to get room if necessary
  93. (define s48-allocate-untraced+gc
  94. (external "s48_allocate_untracedAgc" (=> (integer) address)))
  95. ;; allocate an unmovable object (allocation uses the large area
  96. ;; discarding the size of the object. The large area is collected
  97. ;; with the non-copy algorithmus). GCing to get room if necessary
  98. (define s48-allocate-traced-unmovable+gc
  99. (external "s48_allocate_untraced_unmovableAgc" (=> (integer) address)))
  100. ;; allocate an unmovable object (allocation uses the large area
  101. ;; discarding the size of the object. The large area is collected
  102. ;; with the non-copy algorithmus). GCing to get room if necessary
  103. (define s48-allocate-untraced-unmovable+gc
  104. (external "s48_allocate_untraced_unmovableAgc" (=> (integer) address)))
  105. ;; allocate a weak-pointer object, GCing to get room if necessary
  106. (define s48-allocate-weak+gc
  107. (external "s48_allocate_weakAgc" (=> (integer) address)))
  108. ;; tell the GC not to collect in any case mainly used on startup
  109. ;; during reading the image
  110. (define s48-forbid-gc!
  111. (external "s48_forbid_gcB" (=> () null)))
  112. ;; the GC may collect again
  113. (define s48-allow-gc!
  114. (external "s48_allow_gcB" (=> () null)))
  115. ;; these are defined in c/bibop/area_gc.c
  116. (define s48-collect
  117. (external "s48_collect" (=> (boolean) null)))
  118. (define s48-trace-value ;; s48_value -> s48_value
  119. (external "s48_trace_value" (=> (integer) integer)))
  120. (define s48-trace-locations! ;; address, address -> void
  121. (external "s48_trace_locationsB" (=> (address address) null)))
  122. (define s48-trace-stob-contents! ;; s48_value -> void
  123. (external "s48_trace_stob_contentsB" (=> (integer) null)))
  124. (define s48-extant? ;; s48_value -> bool
  125. (external "s48_extantP" (=> (integer) boolean)))
  126. (define s48-gc-count ;; void -> integer
  127. (external "s48_gc_count" (=> () integer)))
  128. (define s48-write-barrier
  129. (external "S48_WRITE_BARRIER" (=> (integer address integer) null)))
  130. (define s48-check-heap
  131. (external "s48_check_heap" (=> (integer) boolean)))
  132. (define s48-stob-in-heap?
  133. (external "s48_stob_in_heapP" (=> (integer) boolean)))
  134. (define s48-available ;; void -> integer (cells)
  135. (external "s48_available" (=> () integer)))
  136. (define s48-find-all ;; integer -> s48_value
  137. (external "s48_find_all" (=> (integer) integer)))
  138. (define s48-find-all-records ;; s48_value -> s48_value
  139. (external "s48_find_all_records" (=> (integer) integer)))
  140. (define s48-gather-objects
  141. (external "s48_gather_objects" (=> ((=> (integer) boolean)
  142. (=> ((=> (integer) boolean)) boolean))
  143. integer)))
  144. (define s48-heap-size
  145. (external "s48_heap_size" (=> () integer)))
  146. (define s48-initialize-bibop-heap
  147. (external "s48_initialize_bibop_heap" (=> () null)))
  148. ;; defined in generation_gc.c and used by the dumper
  149. (define s48-initialize-image-areas
  150. (external "s48_initialize_image_areas"
  151. (=> (integer integer integer integer integer integer) null)))
  152. (define s48-check-heap-size!
  153. (external "s48_check_heap_sizeB" (=> () null)))
  154. ))
  155. ; Image handling
  156. (define-structure read-image-gc-specific read-image-gc-specific-interface
  157. (open prescheme ps-receive enum-case
  158. vm-utilities vm-architecture
  159. memory
  160. data struct
  161. (subset string-tables (relocate-table-two-space)) ; ####
  162. ps-memory ;allocate/deallocate-memory
  163. heap ;s48-heap-size
  164. heap-bibop
  165. image-util
  166. image-table ;make-table
  167. heap-init
  168. read-image-util
  169. read-image-portable
  170. )
  171. (files (gc-bibop read-image)))
  172. (define-structure read-image-util-gc-specific read-image-util-gc-specific-interface
  173. (open prescheme
  174. heap-bibop)
  175. (begin
  176. (define (get-small-start-addr heap-image-pointer)
  177. (s48-get-new-small-start-addr))
  178. (define (get-large-start-addr heap-image-pointer)
  179. (s48-get-new-large-start-addr))
  180. (define (get-weaks-start-addr heap-image-pointer)
  181. (s48-get-new-weaks-start-addr))))
  182. (define-structure write-image-gc-specific write-image-gc-specific-interface
  183. (open prescheme ps-receive enum-case
  184. vm-utilities vm-architecture
  185. memory data struct
  186. heap
  187. heap-bibop
  188. image-table
  189. image-util
  190. write-image-util
  191. string-tables
  192. symbols ;s48-symbol-table
  193. shared-bindings-access
  194. ps-record-types
  195. (subset allocation (area-type-size))
  196. )
  197. (files (gc-bibop write-image)))