4 #if defined(WINDOWS) && defined(FACTOR_64)
5 const cell seh_area_size = 1024;
7 const cell seh_area_size = 0;
10 struct compaction_fixup;
13 /* The actual memory area */
16 /* Memory area reserved for safepoint guard page */
19 /* Memory area reserved for SEH. Only used on Windows */
22 /* Memory allocator */
23 free_list_allocator<code_block> *allocator;
25 std::set<code_block *> all_blocks;
27 /* Keys are blocks which need to be initialized by initialize_code_block().
28 Values are literal tables. Literal table arrays are GC roots until the
29 time the block is initialized, after which point they are discarded. */
30 std::map<code_block *, cell> uninitialized_blocks;
32 /* Code blocks which may reference objects in the nursery */
33 std::set<code_block *> points_to_nursery;
35 /* Code blocks which may reference objects in aging space or the nursery */
36 std::set<code_block *> points_to_aging;
38 explicit code_heap(cell size);
40 void write_barrier(code_block *compiled);
41 void clear_remembered_set();
42 bool uninitialized_p(code_block *compiled);
43 bool marked_p(code_block *compiled);
44 void set_marked_p(code_block *compiled);
45 void clear_mark_bits();
46 void free(code_block *compiled);
48 void guard_safepoint();
49 void unguard_safepoint();
50 void verify_all_blocks_set();
51 void initialize_all_blocks_set();
52 void update_all_blocks_set(mark_bits<code_block> *code_forwarding_map);
54 code_block *code_block_for_address(cell address);
56 bool safepoint_p(cell addr)
58 cell page_mask = ~(getpagesize() - 1);
59 return (addr & page_mask) == (cell)safepoint_page;
64 struct code_heap_room {
69 cell free_block_count;