KAAAsS 49ec5ba157
古董整理
我也不知道发生了什么,但姑且同步一下
2022-04-19 20:54:02 +08:00

67 lines
1.2 KiB
C

#include "malloc.h"
#include "bug.h"
#include "string.h"
#include "syscall.h"
#define PMO_SIZE 0x1000
// FIXME 0x1000000 就会出诡异 bug
#define MAP_VA 0x1500000
/* virtual memory rights */
#define VM_READ (1 << 0)
#define VM_WRITE (1 << 1)
#define VM_EXEC (1 << 2)
/* PMO types */
#define PMO_ANONYM 0
#define PMO_DATA 1
/* a thread's own cap_group */
#define SELF_CAP 0
#define MALLOC_SZ (50ull * 1024 * 1024)
static char *malloc_buf_;
static size_t malloc_header_ = 0;
void *malloc(size_t size)
{
BUG_ON(malloc_header_ + size > MALLOC_SZ);
if (malloc_header_ == 0) {
int pmo_cap, r;
pmo_cap = usys_create_pmo(MALLOC_SZ, PMO_ANONYM);
if (pmo_cap < 0) {
printf("usys_create_pmo ret:%d\n", pmo_cap);
usys_exit(pmo_cap);
}
r = usys_map_pmo(SELF_CAP, pmo_cap, MAP_VA, VM_READ | VM_WRITE);
if (r < 0) {
printf("usys_map_pmo ret:%d\n", r);
usys_exit(r);
}
malloc_buf_ = (char *)MAP_VA;
}
void *ptr = (void *)&malloc_buf_[malloc_header_];
malloc_header_ += size;
return ptr;
}
void *calloc(size_t nmemb, size_t size)
{
(void)nmemb;
(void)size;
void *ptr = malloc(nmemb * size);
memset(ptr, 0, nmemb * size);
return ptr;
}
void free(void *ptr)
{
(void)ptr;
}