kernel: add c++ support

This commit is contained in:
2023-03-20 20:41:39 +00:00
parent a4d850cc03
commit 2bfb6bcd78
41 changed files with 333 additions and 38 deletions

View File

@@ -106,11 +106,12 @@ static vm_slab_t *alloc_slab(vm_cache_t *cache, vm_flags_t flags)
slab_hdr->s_obj_allocated = 0;
slab_hdr->s_free = 0;
unsigned int *freelist = (unsigned int *)(slab_hdr + 1);
for (unsigned int i = 0; i < cache->c_obj_count; i++) {
slab_hdr->s_freelist[i] = i + 1;
freelist[i] = i + 1;
}
slab_hdr->s_freelist[cache->c_obj_count - 1] = FREELIST_END;
freelist[cache->c_obj_count - 1] = FREELIST_END;
vm_page_foreach (slab_page, i) {
i->p_slab = slab_hdr;
@@ -131,7 +132,8 @@ static unsigned int slab_allocate_slot(vm_slab_t *slab)
}
unsigned int slot = slab->s_free;
slab->s_free = slab->s_freelist[slab->s_free];
unsigned int *freelist = (unsigned int *)(slab + 1);
slab->s_free = freelist[slab->s_free];
slab->s_obj_allocated++;
return slot;
@@ -140,8 +142,10 @@ static unsigned int slab_allocate_slot(vm_slab_t *slab)
static void slab_free_slot(vm_slab_t *slab, unsigned int slot)
{
unsigned int next = slab->s_free;
unsigned int *freelist = (unsigned int *)(slab + 1);
slab->s_free = slot;
slab->s_freelist[slot] = next;
freelist[slot] = next;
slab->s_obj_allocated--;
}