Heap fixed. w00t.
parent
87907c0f75
commit
ffff4729ae
|
@ -143,4 +143,4 @@ clean:
|
|||
@make -C src/Lua clean
|
||||
@if [ -e kernel.bin ] ; then rm kernel.bin ; fi
|
||||
@if [ -e hdd_temp.img ] ; then rm hdd_temp.img ; fi
|
||||
@if [ -e hdd.img ] ; then rm hdd.img; fi
|
||||
@if [ -e hdd.img ] ; then rm hdd.img; fi
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
#include "types.h"
|
||||
|
||||
#define HEAP_HEADER_MAGIC 0x8A4DF92E
|
||||
#define HEAP_FOOTER_MAGIC 0x9AFE352B
|
||||
#define HEAP_HEADER_MAGIC 0x8A4DF92ED6EAB782
|
||||
#define HEAP_FOOTER_MAGIC 0x9AFE352B73FE48AB
|
||||
|
||||
#define HEAP_INITIAL_SIZE 0x00010000
|
||||
#define HEAP_MIN_SIZE 0x00010000
|
||||
|
@ -12,13 +12,13 @@
|
|||
#define HEAP_INDEX_SIZE 0x00002000
|
||||
|
||||
typedef struct {
|
||||
u32 Magic;
|
||||
u64 Magic;
|
||||
u8 Hole;
|
||||
u64 Size;
|
||||
} T_HEAP_HEADER;
|
||||
|
||||
typedef struct {
|
||||
u32 Magic;
|
||||
u64 Magic;
|
||||
T_HEAP_HEADER *Header;
|
||||
} T_HEAP_FOOTER;
|
||||
|
||||
|
|
|
@ -74,29 +74,28 @@ T_HEAP *heap_create(u64 Size)
|
|||
for (u32 i = 0; i < NumPages; i++)
|
||||
{
|
||||
if (!Start)
|
||||
kprintf("%x\n", Start = (u64)paging_scratch_allocate());
|
||||
Start = (u64)paging_scratch_allocate();
|
||||
else
|
||||
kprintf("%x\n", paging_scratch_allocate());
|
||||
paging_scratch_allocate();
|
||||
}
|
||||
//kprintf("[i] Heap starts at 0x%x\n", Start);
|
||||
|
||||
T_HEAP* Heap = (T_HEAP *)Start;
|
||||
Start += sizeof(T_HEAP);
|
||||
u64 DataStart = Start;
|
||||
DataStart += sizeof(T_HEAP);
|
||||
|
||||
Heap->Index = heap_index_initialize((void*)Start, HEAP_INDEX_SIZE / 4);
|
||||
Heap->Index = heap_index_initialize((void*)DataStart, HEAP_INDEX_SIZE / 4);
|
||||
|
||||
Start += HEAP_INDEX_SIZE;
|
||||
kprintf("[[i] Heap %x - %x\n", Start, Start + NumPages * 4096);
|
||||
Heap->Start = Start;
|
||||
DataStart += HEAP_INDEX_SIZE;
|
||||
kprintf("[i] Heap %x - %x\n", DataStart, Start + NumPages * 4096);
|
||||
Heap->Start = DataStart;
|
||||
Heap->End = Start + NumPages * 4096;
|
||||
|
||||
T_HEAP_HEADER *Hole = (T_HEAP_HEADER *)Start;
|
||||
Hole->Size = Size;
|
||||
T_HEAP_HEADER *Hole = (T_HEAP_HEADER *)DataStart;
|
||||
Hole->Size = Heap->End - Heap->Start;
|
||||
Hole->Magic = HEAP_HEADER_MAGIC;
|
||||
Hole->Hole = 1;
|
||||
|
||||
heap_index_insert(&Heap->Index, (void*)Hole);
|
||||
//for (;;) {}
|
||||
return Heap;
|
||||
}
|
||||
|
||||
|
@ -190,7 +189,6 @@ void *heap_alloc(T_HEAP *Heap, u64 Size, u8 Aligned)
|
|||
{
|
||||
u64 RealSize = Size + sizeof(T_HEAP_HEADER) + sizeof(T_HEAP_FOOTER);
|
||||
s64 Iterator = _heap_find_smallest_hole(Heap, RealSize, Aligned);
|
||||
kprintf("%i\n", Iterator);
|
||||
if (Iterator == -1)
|
||||
{
|
||||
u64 OldSize = Heap->End - Heap->Start;
|
||||
|
@ -245,7 +243,6 @@ void *heap_alloc(T_HEAP *Heap, u64 Size, u8 Aligned)
|
|||
Iterator);
|
||||
u64 HoleStart = (u64)Header;
|
||||
u64 HoleSize = Header->Size;
|
||||
kprintf("%x %x, %x, %i\n", Heap, &Heap->Index, HoleStart, HoleSize);
|
||||
|
||||
if (HoleSize - RealSize < sizeof(T_HEAP_HEADER) + sizeof(T_HEAP_FOOTER))
|
||||
{
|
||||
|
@ -277,7 +274,6 @@ void *heap_alloc(T_HEAP *Heap, u64 Size, u8 Aligned)
|
|||
BlockHeader->Size = RealSize;
|
||||
BlockHeader->Hole = 0;
|
||||
|
||||
|
||||
T_HEAP_FOOTER *BlockFooter = (T_HEAP_FOOTER *)(HoleStart + RealSize
|
||||
- sizeof(T_HEAP_FOOTER));
|
||||
BlockFooter->Magic = HEAP_FOOTER_MAGIC;
|
||||
|
|
|
@ -69,8 +69,6 @@ void kpanic_ex(const s8 *Error, const s8 *File, u64 Line, T_ISR_REGISTERS R)
|
|||
|
||||
kprintf("%x\n", Line);
|
||||
}
|
||||
|
||||
for(;;) {}
|
||||
|
||||
// Dumping registers
|
||||
|
||||
|
@ -85,10 +83,10 @@ void kpanic_ex(const s8 *Error, const s8 *File, u64 Line, T_ISR_REGISTERS R)
|
|||
kprintf(" cr0: 0x%X cr3: 0x%x cs: 0x%x\n", cr0, cr3, R.cs, ds);
|
||||
kprintf(" rip 0x%X rax: 0x%X rbx: 0x%x\n", R.rip, R.rax, R.rbx);
|
||||
kprintf(" rcx: 0x%x rdx: 0x%x rsi: 0x%x\n", R.rcx, R.rdx, R.rsi);
|
||||
kprintf(" rdi: 0x%x rbp: 0x%x rsp: 0x%x\n", R.rdi, R.rbp, R.rsp);
|
||||
kprintf(" r8 : 0x%x r9 : 0x%x r10: 0x%x\n", R.r8, R.r9, R.r10);
|
||||
kprintf(" r11: 0x%x r12: 0x%x r13: 0x%x\n", R.r11, R.r12, R.r13);
|
||||
kprintf(" r14: 0x%x r15: 0x%x\n", R.r14, R.r15);
|
||||
// kprintf(" rdi: 0x%x rbp: 0x%x rsp: 0x%x\n", R.rdi, R.rbp, R.rsp);
|
||||
// kprintf(" r8 : 0x%x r9 : 0x%x r10: 0x%x\n", R.r8, R.r9, R.r10);
|
||||
// kprintf(" r11: 0x%x r12: 0x%x r13: 0x%x\n", R.r11, R.r12, R.r13);
|
||||
// kprintf(" r14: 0x%x r15: 0x%x\n", R.r14, R.r15);
|
||||
|
||||
// s64 FrameSize = R.rbp - R.rsp;
|
||||
|
||||
|
|
Loading…
Reference in New Issue