4 #if defined(WINDOWS) && defined(FACTOR_64)
5 const cell seh_area_size = 1024;
7 const cell seh_area_size = 0;
11 /* The actual memory area */
14 /* Memory area reserved for safepoint guard page */
17 /* Memory area reserved for SEH. Only used on Windows */
20 /* Memory allocator */
21 free_list_allocator<code_block> *allocator;
23 /* Keys are blocks which need to be initialized by initialize_code_block().
24 Values are literal tables. Literal table arrays are GC roots until the
25 time the block is initialized, after which point they are discarded. */
26 std::map<code_block *, cell> uninitialized_blocks;
28 /* Code blocks which may reference objects in the nursery */
29 std::set<code_block *> points_to_nursery;
31 /* Code blocks which may reference objects in aging space or the nursery */
32 std::set<code_block *> points_to_aging;
34 explicit code_heap(cell size);
36 void write_barrier(code_block *compiled);
37 void clear_remembered_set();
38 bool uninitialized_p(code_block *compiled);
39 bool marked_p(code_block *compiled);
40 void set_marked_p(code_block *compiled);
41 void clear_mark_bits();
42 void free(code_block *compiled);
44 void guard_safepoint();
45 void unguard_safepoint();
47 code_block *code_block_for_address(cell address);
49 bool safepoint_p(cell addr)
51 cell page_mask = ~(getpagesize() - 1);
52 return (addr & page_mask) == (cell)safepoint_page;
56 struct code_heap_room {
61 cell free_block_count;