27 lines
824 B
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);
|
||
|
}
|