Clearing up kutil/kernel memory code separation
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
#include "kutil/memory_manager.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
kutil::memory_manager g_kernel_memory_manager;
|
|
||||||
|
|
||||||
// kutil malloc/free implementation
|
|
||||||
namespace kutil {
|
|
||||||
|
|
||||||
void *
|
|
||||||
malloc(size_t n) {
|
|
||||||
void *p = g_kernel_memory_manager.allocate(n);
|
|
||||||
log::debug(logs::memory, "Heap allocated %ld bytes: %016lx", n, p);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void free(void *p) { g_kernel_memory_manager.free(p); }
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "page_manager.h"
|
#include "page_manager.h"
|
||||||
|
|
||||||
page_manager g_page_manager;
|
page_manager g_page_manager;
|
||||||
|
kutil::memory_manager g_kernel_memory_manager;
|
||||||
|
|
||||||
|
|
||||||
static addr_t
|
static addr_t
|
||||||
@@ -215,10 +216,10 @@ page_manager::init(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern kutil::memory_manager g_kernel_memory_manager;
|
|
||||||
new (&g_kernel_memory_manager) kutil::memory_manager(
|
new (&g_kernel_memory_manager) kutil::memory_manager(
|
||||||
reinterpret_cast<void *>(end),
|
reinterpret_cast<void *>(end),
|
||||||
mm_grow_callback);
|
mm_grow_callback);
|
||||||
|
kutil::setup::set_heap(&g_kernel_memory_manager);
|
||||||
|
|
||||||
m_kernel_pml4 = get_pml4();
|
m_kernel_pml4 = get_pml4();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "memory_manager.h"
|
||||||
|
|
||||||
void * operator new (size_t, void *p) noexcept { return p; }
|
void * operator new (size_t, void *p) noexcept { return p; }
|
||||||
void * operator new (size_t n) { return kutil::malloc(n); }
|
void * operator new (size_t n) { return kutil::malloc(n); }
|
||||||
@@ -8,6 +9,32 @@ void operator delete[] (void *p) noexcept { return kutil::free(p); }
|
|||||||
|
|
||||||
namespace kutil {
|
namespace kutil {
|
||||||
|
|
||||||
|
namespace setup {
|
||||||
|
|
||||||
|
static memory_manager *heap_memory_manager;
|
||||||
|
|
||||||
|
void
|
||||||
|
set_heap(memory_manager *mm)
|
||||||
|
{
|
||||||
|
setup::heap_memory_manager = mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kutil::setup
|
||||||
|
|
||||||
|
|
||||||
|
void *
|
||||||
|
malloc(size_t n)
|
||||||
|
{
|
||||||
|
return setup::heap_memory_manager->allocate(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
free(void *p)
|
||||||
|
{
|
||||||
|
setup::heap_memory_manager->free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
memset(void *s, uint8_t v, size_t n)
|
memset(void *s, uint8_t v, size_t n)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,15 +11,12 @@ void * operator new (size_t, void *p) noexcept;
|
|||||||
|
|
||||||
namespace kutil {
|
namespace kutil {
|
||||||
|
|
||||||
/// Allocate memory. Note: this needs to be implemented
|
/// Allocate memory.
|
||||||
/// by the kernel, or other program using this library.
|
|
||||||
/// \arg n The number of bytes to allocate
|
/// \arg n The number of bytes to allocate
|
||||||
/// \returns The allocated memory
|
/// \returns The allocated memory
|
||||||
void * malloc(size_t n);
|
void * malloc(size_t n);
|
||||||
|
|
||||||
/// Free memory allocated by malloc(). Note: this needs
|
/// Free memory allocated by malloc().
|
||||||
/// to be implemented by the kernel, or other program
|
|
||||||
/// using this library.
|
|
||||||
/// \arg p A pointer previously returned by malloc()
|
/// \arg p A pointer previously returned by malloc()
|
||||||
void free(void *p);
|
void free(void *p);
|
||||||
|
|
||||||
@@ -72,4 +69,14 @@ inline T* mask_pointer(T *p, addr_t mask)
|
|||||||
/// \arg off An optional offset into the region
|
/// \arg off An optional offset into the region
|
||||||
uint8_t checksum(const void *p, size_t len, size_t off = 0);
|
uint8_t checksum(const void *p, size_t len, size_t off = 0);
|
||||||
|
|
||||||
|
|
||||||
|
class memory_manager;
|
||||||
|
|
||||||
|
namespace setup {
|
||||||
|
|
||||||
|
/// Set the heap that malloc() / free() will use.
|
||||||
|
/// \arg mm The heap manager for the heap to use.
|
||||||
|
void set_heap(memory_manager *mm);
|
||||||
|
|
||||||
|
} // namespace kutil::setup
|
||||||
} // namespace kutil
|
} // namespace kutil
|
||||||
|
|||||||
Reference in New Issue
Block a user