X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fheap.c;h=3a0edb37993d0cf5775163eb92d16a1289400c9e;hb=d1714d8a27a603ce8ac4ba91e8c0c3d060d767ee;hp=61f7881eb54dab15095ab1ab42871de10c65e82d;hpb=b3fa9a08edcbc459bd8e9df73186e292470ebfc3;p=tpg%2Facess2.git diff --git a/Kernel/heap.c b/Kernel/heap.c index 61f7881e..3a0edb37 100644 --- a/Kernel/heap.c +++ b/Kernel/heap.c @@ -252,36 +252,37 @@ void free(void *Ptr) // Alignment Check if( (Uint)Ptr & (sizeof(Uint)-1) ) { - Warning("free - Passed a non-aligned address (%p)", Ptr); + Log_Warning("Heap", "free - Passed a non-aligned address (%p)", Ptr); return; } // Sanity check if((Uint)Ptr < (Uint)gHeapStart || (Uint)Ptr > (Uint)gHeapEnd) { - Warning("free - Passed a non-heap address (%p)\n", Ptr); + Log_Warning("Heap", "free - Passed a non-heap address (%p < %p < %p)\n", + gHeapStart, Ptr, gHeapEnd); return; } // Check memory block - Header head = (void*)( (Uint)Ptr - sizeof(tHeapHead) ); if(head->Magic == MAGIC_FREE) { - Warning("free - Passed a freed block (%p) by %p", head, __builtin_return_address(0)); + Log_Warning("Heap", "free - Passed a freed block (%p) by %p", head, __builtin_return_address(0)); return; } if(head->Magic != MAGIC_USED) { - Warning("free - Magic value is invalid (%p, 0x%x)\n", head, head->Magic); + Log_Warning("Heap", "free - Magic value is invalid (%p, 0x%x)\n", head, head->Magic); return; } // Check memory block - Footer foot = (void*)( (Uint)head + head->Size - sizeof(tHeapFoot) ); if(foot->Head != head) { - Warning("free - Footer backlink is incorrect (%p, 0x%x)\n", head, foot->Head); + Log_Warning("Heap", "free - Footer backlink is incorrect (%p, 0x%x)\n", head, foot->Head); return; } if(foot->Magic != MAGIC_FOOT) { - Warning("free - Footer magic is invalid (%p, %p = 0x%x)\n", head, &foot->Magic, foot->Magic); + Log_Warning("Heap", "free - Footer magic is invalid (%p, %p = 0x%x)\n", head, &foot->Magic, foot->Magic); return; } @@ -387,13 +388,14 @@ void *calloc(size_t num, size_t size) /** * \fn int IsHeap(void *Ptr) - * \brief Checks if an address is a heap address + * \brief Checks if an address is a heap pointer */ int IsHeap(void *Ptr) { tHeapHead *head; if((Uint)Ptr < (Uint)gHeapStart) return 0; if((Uint)Ptr > (Uint)gHeapEnd) return 0; + if((Uint)Ptr & (sizeof(Uint)-1)) return 0; head = (void*)( (Uint)Ptr - sizeof(tHeapHead) ); if(head->Magic != MAGIC_USED && head->Magic != MAGIC_FREE)