#include #include #include #include #include "libc.h" #define ALIGN 16 void *__expand_heap(size_t *); static void *__simple_malloc(size_t n) { static char *cur, *end; static volatile int lock[2]; size_t align=1, pad; void *p; if (!n) n++; while (align end-cur) { size_t m = n; char *new = __expand_heap(&m); if (!new) { UNLOCK(lock); return 0; } if (new != end) { cur = new; n -= pad; pad = 0; } end = new + m; } p = cur + pad; cur += n; UNLOCK(lock); return p; } weak_alias(__simple_malloc, malloc); weak_alias(__simple_malloc, __malloc0);