Heap fixed. w00t.

alentours-dev
q3k 2013-02-03 15:42:40 +01:00
parent 87907c0f75
commit ffff4729ae
4 changed files with 19 additions and 25 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;