0.8.5.22:
[sbcl.git] / src / runtime / gencgc.h
index 85304fe..170fc09 100644 (file)
@@ -16,6 +16,8 @@
 #ifndef _GENCGC_H_
 #define _GENCGC_H_
 
+#include "genesis/code.h"
+
 void gc_free_heap(void);
 inline int find_page_index(void *);
 inline void *page_address(int);
@@ -30,11 +32,12 @@ struct page {
         * (If the page is written into, we catch the exception, make
         * the page writable, and clear this flag.) */
         write_protected :1,
-       /* This flag is set when the above write_protected flag is
-         * cleared by the sigbus handler. This is useful for
-         * re-scavenging pages that are written during a GC. */
+       /* This flag is set when the above write_protected flag is 
+        * cleared by the SIGBUS handler (or SIGSEGV handler, for some
+        * OSes). This is useful for re-scavenging pages that are
+        * written during a GC. */
        write_protected_cleared :1,
-       /* The region the page is allocated to: 0 for a free page; 1
+       /* the region the page is allocated to: 0 for a free page; 1
          * for boxed objects; 2 for unboxed objects. If the page is
          * free the following slots are invalid (well the bytes_used
          * must be 0). */
@@ -65,30 +68,21 @@ struct page {
     int  first_object_offset;
 };
 
+/* values for the page.allocated field */
 #define FREE_PAGE 0
 #define BOXED_PAGE 1
 #define UNBOXED_PAGE 2
+
+/* values for the *_alloc_* parameters */
+#define ALLOC_BOXED 0
+#define ALLOC_UNBOXED 1
+#define ALLOC_QUICK 1
+
 \f
 /* the number of pages needed for the dynamic space - rounding up */
 #define NUM_PAGES ((DYNAMIC_SPACE_SIZE+4095)/4096)
 extern struct page page_table[NUM_PAGES];
 \f
-/* Abstract out the data for an allocation region allowing a single
- * routine to be used for allocation and closing. */
-struct alloc_region {
-
-    /* These two are needed for quick allocation. */
-    void  *free_pointer;
-    void  *end_addr; /* pointer to the byte after the last usable byte */
-
-    /* needed when closing the region */
-    int  first_page;
-    int  last_page;
-    void  *start_addr;
-};
-
-extern struct alloc_region  boxed_region;
-extern struct alloc_region  unboxed_region;
 \f
 void  gencgc_pickup_dynamic(void);
 
@@ -97,5 +91,6 @@ void sniff_code_object(struct code *code, unsigned displacement);
 int  update_x86_dynamic_space_free_pointer(void);
 void  gc_alloc_update_page_tables(int unboxed,
                                  struct alloc_region *alloc_region);
-
-#endif _GENCGC_H_
+void gc_alloc_update_all_page_tables(void);
+void gc_set_region_empty(struct alloc_region *region);
+#endif /* _GENCGC_H_ */