// Config #include #include #include #include #include #include #include #include #include #define USE_DL_PREFIX 1 #define LACKS_SYS_TYPES_H 1 #define NO_MALLOC_STATS 1 #define LACKS_ERRNO_H 1 #define LACKS_TIME_H 1 #define LACKS_STDLIB_H 1 #define LACKS_SYS_MMAN_H 1 #define LACKS_FCNTL_H 1 #define LACKS_UNISTD_H 1 #define LACKS_SYS_PARAM_H 1 #define LACKS_STRINGS_H 1 #define LACKS_SCHED_H 1 #define HAVE_MMAP 1 #define HAVE_MORECORE 0 #define ABORT writefmt("dlmalloc: Aborting...\n") #define MALLOC_FAILURE_ACTION #define USE_LOCKS 2 #define malloc_getpagesize 0x1000 #define EINVAL E_INVALIDARGUMENT #define ENOMEM E_NOMEMORY #define MLOCK_T SpinLock int ACQUIRE_LOCK(SpinLock *sl) { spinlock_acquire(sl); return 0; } int RELEASE_LOCK(SpinLock *sl) { spinlock_release(sl); return 0; } int INITIAL_LOCK(SpinLock *sl) { spinlock_init(sl); return 0; } static MLOCK_T malloc_global_mutex = { 0 }; #define PAGE_SIZE 0x1000 static size_t _roundpage(size_t sz) { return (sz + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); } #define MAP_PRIVATE 0 #define PROT_READ 0 #define PROT_WRITE 0 #define O_RDWR 0 #define EMUL_DEV_ZERO_FD 123 #define EMUL_MAP_FAILED ((void *)-1) int open(const char *path, int flags, ...) { return EMUL_DEV_ZERO_FD; } void *mmap(void *addr, size_t len, int prot, int flags, int fd, int off) { (void)off; uint8_t *outaddr = NULL; size_t need = _roundpage(len); int32_t err = mman_map(NULL, need, MMAN_MAP_PF_RW, 0, &outaddr); if (err != E_OK || outaddr == NULL) { return EMUL_MAP_FAILED; } if (fd == EMUL_DEV_ZERO_FD) { string_memset(outaddr, 0, need); } return outaddr; } int munmap(void *addr, size_t len) { (void)len; mman_unmap((uint8_t *)addr); return 0; }