2 #include <l4/sys/ipc_gate>
5 #include <l4/sys/kdebug.h>
8 #include "page_alloc.h"
11 #include <private/gc_priv.h>
16 extern void *__libc_stack_end;
20 void GC_register_data_segments(void);
21 ptr_t GC_get_main_stack_base(void);
22 struct hblk *GC_get_mem(size_t bytes);
26 void GC_register_data_segments(void)
28 GC_add_roots_inner((ptr_t)&_etext, (ptr_t)&_end, FALSE);
31 ptr_t GC_get_main_stack_base(void)
33 return (ptr_t)__libc_stack_end;
38 static void GC_default_push_other_roots(void)
40 l4_msg_regs_t *mr = l4_utcb_mr();
41 static l4_umword_t b[2];
44 l4_cap_idx_t const start = Cap_alloc::Gc_cap_0 << L4_CAP_SHIFT;
45 l4_cap_idx_t const end = (Cap_alloc::Gc_cap_0 + Cap_alloc::Gc_caps) << L4_CAP_SHIFT;
47 for (l4_cap_idx_t c = start; c < end; c += L4_CAP_OFFSET)
49 L4::Cap<L4::Ipc_gate> g(c);
50 if (!object_pool.cap_alloc()->is_allocated(g))
53 if (l4_error(g->get_infos(&o)) < 0)
58 //printf("found so @ %lx\n", o);
65 GC_INNER void (*GC_push_other_roots)(void) = GC_default_push_other_roots;
67 hblk *GC_get_mem(size_t s)
69 //printf("MOE: ps=%lx\n", GC_page_size);
70 if (s & (GC_page_size - 1))
72 //printf("MOE: stupidly sized memory requested\n");
77 //printf("MOE: real_malloc(%zx)\n", s);
78 return (hblk*)Single_page_alloc_base::_alloc(Single_page_alloc_base::nothrow, s, GC_page_size);
81 /* Find the page size */
82 GC_INNER word GC_page_size = L4_PAGESIZE;
83 GC_INNER GC_bool GC_dirty_maintained = FALSE;
85 extern "C" GC_INNER void GC_setpagesize(void);
86 GC_INNER void GC_setpagesize() {}
89 extern "C" GC_INNER void GC_dirty_init(void);
90 GC_INNER void GC_dirty_init()
92 if (GC_print_stats == VERBOSE)
93 GC_log_printf("Initializing DEFAULT_VDB...\n");
94 //GC_dirty_maintained = TRUE;
97 extern "C" GC_INNER void GC_read_dirty(void);
98 GC_INNER void GC_read_dirty() {}
100 extern "C" GC_INNER GC_bool GC_page_was_dirty(struct hblk *h);
102 GC_INNER GC_bool GC_page_was_dirty(struct hblk *h)
108 extern "C" GC_INNER void GC_remove_protection(struct hblk *h, word nblocks,
110 GC_INNER void GC_remove_protection(struct hblk *h, word nblocks,