Files
my-os-project2/ulib/dlmalloc/dlmalloc_port.inc
2025-09-27 15:16:26 +02:00

94 lines
1.8 KiB
C++

// Config
#include <stddef.h>
#include <dlmalloc/malloc.h>
#include <uprintf.h>
#include <errors.h>
#include <sync/spinlock.h>
#include <string/string.h>
#include <sysdefs/mman.h>
#include <system/system.h>
#include <write/write.h>
#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;
}