helos1/memory/heap_break.c

27 lines
824 B
C

#include "heap_break.h"
#include "memory.h"
#include "paging_internal.h"
#include "../runtime/stdio.h"
static uintptr_t heapBreak = KERNEL_HEAP_VIRTUAL, pageBreak = KERNEL_HEAP_VIRTUAL;
void *memory_AddBreak(intptr_t inc) {
if (heapBreak + inc < KERNEL_HEAP_VIRTUAL)
return (void *)-1;
heapBreak += inc;
if (heapBreak > pageBreak) {
// we need more pages
int pageCount = roundUpToPageCount(heapBreak - pageBreak);
io_Printf("memory_AddBreak(): 0x%llx -> 0x%llx, add %d, allocating %d pages\n", heapBreak - inc, heapBreak, inc, pageCount);
paging_map_PageAllocated(pageBreak, pageCount, MAP_PROT_READ | MAP_PROT_WRITE);
pageBreak += SYSTEM_PAGE_SIZE * pageCount;
} else
io_Printf("memory_AddBreak(): 0x%llx -> 0x%llx, add %d\n", heapBreak - inc, heapBreak, inc);
return (void *)(heapBreak - inc);
}