This malloc is a basic interface implementation that works for any platform. It should be replaced in the future for a real malloc implementation for each of the platforms.
Signed-off-by: Marc Marí <marc.mari.barc...@gmail.com> --- tests/libqos/malloc-generic.c | 54 +++++++++++++++++++++++++++++++++++++++++ tests/libqos/malloc-generic.h | 18 ++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 tests/libqos/malloc-generic.c create mode 100644 tests/libqos/malloc-generic.h diff --git a/tests/libqos/malloc-generic.c b/tests/libqos/malloc-generic.c new file mode 100644 index 0000000..32f9bb4 --- /dev/null +++ b/tests/libqos/malloc-generic.c @@ -0,0 +1,54 @@ +/* + * Basic libqos generic malloc support + * + * Copyright (c) 2014 Marc Marí + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "libqos/malloc-generic.h" +#include <glib.h> + +typedef struct GENAlloc { + QGuestAllocator alloc; + + uint64_t start; + uint64_t end; + uint32_t page_size; +} GENAlloc; + +static uint64_t generic_alloc(QGuestAllocator *allocator, size_t size) +{ + GENAlloc *s = (GENAlloc *)allocator; + uint64_t addr; + + size += (s->page_size - 1); + size &= -s->page_size; + + g_assert_cmpint((s->start + size), <=, s->end); + + addr = s->start; + s->start += size; + + return addr; +} + +static void generic_free(QGuestAllocator *allocator, uint64_t addr) +{ +} + +QGuestAllocator *generic_alloc_init(uint64_t base_addr, uint64_t size, + uint32_t page_size) +{ + GENAlloc *s = g_malloc0(sizeof(*s)); + + s->alloc.alloc = generic_alloc; + s->alloc.free = generic_free; + + s->page_size = page_size; + s->start = base_addr; + s->end = base_addr + size; + + return &s->alloc; +} diff --git a/tests/libqos/malloc-generic.h b/tests/libqos/malloc-generic.h new file mode 100644 index 0000000..7bf9f80 --- /dev/null +++ b/tests/libqos/malloc-generic.h @@ -0,0 +1,18 @@ +/* + * Basic libqos generic malloc support + * + * Copyright (c) 2014 Marc Marí + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#ifndef LIBQOS_MALLOC_GENERIC_H +#define LIBQOS_MALLOC_GENERIC_H + +#include "libqos/malloc.h" + +QGuestAllocator *generic_alloc_init(uint64_t base_addr, uint64_t size, + uint32_t page_size); + +#endif -- 1.7.10.4