Create dlmalloc component
Create CMake component and add malloc wrapper for configuring dlmalloc.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I43d65baf7cb3598ee7ea763151fd360f1a37b1a7
diff --git a/components/common/dlmalloc/malloc_wrapper.c b/components/common/dlmalloc/malloc_wrapper.c
new file mode 100644
index 0000000..f8afec2
--- /dev/null
+++ b/components/common/dlmalloc/malloc_wrapper.c
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2021-2024, Arm Limited and Contributors. All rights reserved.
+ */
+
+#include "compiler.h"
+#include <errno.h>
+#include <stddef.h> /* dlmalloc requires size_t */
+#include <stdint.h>
+#include <string.h>
+
+/* Allocating heap area */
+#ifndef SP_HEAP_SIZE
+#error "SP_HEAP_SIZE is undefined, please define it in the build system"
+#endif
+
+static uint8_t sp_heap[SP_HEAP_SIZE] __aligned(16);
+static uint8_t *program_break = sp_heap;
+
+/**
+ * Basic sbrk implementation which increases the program break through the
+ * sp_heap buffer.
+ */
+void *sbrk(ptrdiff_t incr)
+{
+ uint8_t *previous_break = program_break;
+ uint8_t *new_break = program_break + incr;
+
+ if ((new_break < sp_heap) || (new_break > (sp_heap + sizeof(sp_heap))))
+ return (void *)(uintptr_t) -1;
+
+ program_break += incr;
+
+ return (void *) previous_break;
+}
+
+
+
+/*
+ * There's no way of including a custom configuration file without modifying
+ * malloc.c. As a workaround this file includes the missing stddef.h, sets the
+ * configuration values of dlmalloc and then includes malloc.c.
+ */
+
+/* dlmalloc configuration */
+#define USE_SPIN_LOCKS 0
+#define HAVE_MORECORE 1
+#define HAVE_MMAP 0
+#define HAVE_MREMAP 0
+#define MALLOC_FAILURE_ACTION do {} while (0)
+#define MMAP_CLEARS 0
+#define MORECORE_CONTIGUOUS 1
+#define MORECORE_CANNOT_TRIM 1
+#define LACKS_SYS_PARAM_H 1
+#define LACKS_SYS_TYPES_H 1
+#define LACKS_TIME_H 1
+#define LACKS_UNISTD_H 1
+#define NO_MALLINFO 1
+#define NO_MALLOC_STATS 1
+#define DEFAULT_GRANULARITY 64
+
+#include "malloc.c"