diff --git a/repos/dde_linux/src/include/lx_emul/alloc.h b/repos/dde_linux/src/include/lx_emul/alloc.h index 5ab27da3cf..93116925ae 100644 --- a/repos/dde_linux/src/include/lx_emul/alloc.h +++ b/repos/dde_linux/src/include/lx_emul/alloc.h @@ -1,6 +1,7 @@ /* * \brief Lx_emul support to allocate memory * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-25 */ @@ -27,6 +28,13 @@ unsigned long lx_emul_mem_size(const void * ptr); void lx_emul_mem_cache_clean_invalidate(const void * ptr, unsigned long size); void lx_emul_mem_cache_invalidate(const void * ptr, unsigned long size); +/* + * Heap for lx_emul metadata - cleared but unprepared for Linux code + */ + +void * lx_emul_heap_alloc(unsigned long size); +void lx_emul_heap_free(void * ptr); + #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/lib/lx_emul/alloc.cc b/repos/dde_linux/src/lib/lx_emul/alloc.cc index 2ef487bcad..05fe7a6012 100644 --- a/repos/dde_linux/src/lib/lx_emul/alloc.cc +++ b/repos/dde_linux/src/lib/lx_emul/alloc.cc @@ -1,6 +1,7 @@ /* * \brief Lx_emul backend for memory allocation * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-22 */ @@ -17,6 +18,7 @@ #include #include + extern "C" void * lx_emul_mem_alloc_aligned(unsigned long size, unsigned long align) { void * const ptr = Lx_kit::env().memory.alloc(size, align); @@ -93,3 +95,22 @@ extern "C" void lx_emul_mem_cache_invalidate(const void * addr, { Genode::cache_invalidate_data((Genode::addr_t)addr, size); } + + +/* + * Heap for lx_emul metadata - unprepared for Linux code + */ + +void * lx_emul_heap_alloc(unsigned long size) +{ + void *ptr = Lx_kit::env().heap.alloc(size); + if (ptr) + Genode::memset(ptr, 0, size); + return ptr; +} + + +void lx_emul_heap_free(void * ptr) +{ + Lx_kit::env().heap.free(ptr, 0); +}