Request process arguments differently, mmap-style dlmalloc port, new linklist utils
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user