#include #include #include #include #include #define LACKS_UNISTD_H 1 #define LACKS_SYS_MMAN_H 1 #define LACKS_SYS_PARAM_H 1 #define LACKS_FCNTL_H 1 #define LACKS_SYS_TYPES_H 1 #define LACKS_SCHED_H 1 #define LACKS_ERRNO_H 1 #define LACKS_STDLIB_H 1 #define LACKS_TIME_H 1 #define LACKS_STRINGS_H 1 #define ABORT \ { \ (void)0; \ } #define MALLOC_ALIGNMENT 16 #define HAVE_MORECORE 0 #define NO_MALLOC_STATS 1 #define USE_LOCKS 2 #define MALLOC_FAILURE_ACTION \ do { \ test('M'); \ } while (0) #define EINVAL -1 #define ENOMEM -1 #define DEFAULT_MMAP_THRESHOLD 0 #define MLOCK_T int #define open _open_dummy #define O_RDWR 0 #define PROT_READ 0 #define PROT_WRITE 0 #define MAP_PRIVATE 0 #define fprintf(...) static MLOCK_T malloc_global_mutex; static int _init_lock(MLOCK_T* lock) { *lock = mutex_create(); return 0; } static int _fini_lock(MLOCK_T* lock) { return mutex_delete(*lock); } static int _acquire_lock(MLOCK_T* lock) { return mutex_lock(*lock); } static int _release_lock(MLOCK_T* lock) { return mutex_unlock(*lock); } #define INITIAL_LOCK(lk) _init_lock((lk)) #define DESTROY_LOCK(lk) _fini_lock((lk)) #define ACQUIRE_LOCK(lk) _acquire_lock((lk)) #define RELEASE_LOCK(lk) _release_lock((lk)) #define TRY_LOCK(lk) int _open_dummy(const char* path, uint16_t modes) { (void)path, (void)modes; return 0; } void* mmap(void* addr, size_t size, int prot, int flags, int fd, size_t off) { (void)prot, (void)fd, (void)off, (void)flags; if (size == 0) return (void*)-1; size = (size + PAGE_SIZE - 1) / PAGE_SIZE; void* r = map((uintptr_t)addr, size, MAP_FLAGS | MAP_RW); if (r == NULL) return (void*)-1; memset(r, 0, size * PAGE_SIZE); return r; } int munmap(void* addr, size_t length) { if (length == 0) return 0; length = (length + PAGE_SIZE - 1) / PAGE_SIZE; return unmap((uintptr_t)addr, length); }