Request process arguments differently, mmap-style dlmalloc port, new linklist utils

This commit is contained in:
2025-09-21 22:51:38 +02:00
parent 397379bca3
commit 5c7fb3e1cf
4 changed files with 96 additions and 53 deletions

View File

@ -21,14 +21,10 @@
#define LACKS_SYS_PARAM_H 1
#define LACKS_STRINGS_H 1
#define LACKS_SCHED_H 1
#define HAVE_MMAP 0
#define MORECORE_CONTIGUOUS 0
#define ABORT \
do { \
uprintf("dlmalloc: Aborting...\n"); \
} while(0)
#define HAVE_MMAP 1
#define HAVE_MORECORE 0
#define ABORT uprintf("dlmalloc: Aborting...\n")
#define MALLOC_FAILURE_ACTION
#define HAVE_MORECORE 1
#define USE_LOCKS 2
#define malloc_getpagesize 0x1000
#define EINVAL E_INVALIDARGUMENT
@ -59,24 +55,37 @@ static size_t _roundpage(size_t sz) {
return (sz + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1);
}
void *_last = 0;
#define MAP_PRIVATE 0
#define PROT_READ 0
#define PROT_WRITE 0
#define O_RDWR 0
void *sbrk(ptrdiff_t inc) {
if (inc < 0) {
return 0;
}
if (!inc) {
return _last;
}
#define EMUL_DEV_ZERO_FD 123
uint64_t pages = _roundpage(inc);
uint8_t *maddr = NULL;
int32_t ret = mman_map(NULL, pages, MMAN_MAP_PF_RW, 0, &maddr);
if (ret != E_OK || maddr == NULL) {
return 0;
}
string_memset(maddr, 0, pages);
_last = (void *)(maddr + pages);
return maddr;
int open(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 NULL;
}
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;
}