#ifndef MMAN_H
#define MMAN_H
+#include <stdlib.h>
+#include <stdio.h>
+#include <psp2/kernel/sysmem.h>
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "stdlib.h"
-#include "stdio.h"
-
#define PROT_READ 0b001
#define PROT_WRITE 0b010
#define PROT_EXEC 0b100
static inline void* mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
- (void)addr;
(void)prot;
(void)flags;
(void)fd;
(void)offset;
- void* addr_out;
+ int block, ret;
+
+ block = sceKernelAllocMemBlockForVM("code", len);
+ if(block<=0){
+ sceClibPrintf("could not alloc mem block @0x%08X 0x%08X \n", block, len);
+ exit(1);
+ }
+
+ // get base address
+ ret = sceKernelGetMemBlockBase(block, &addr);
+ if (ret < 0)
+ {
+ sceClibPrintf("could get address @0x%08X 0x%08X \n", block, addr);
+ exit(1);
+ }
- addr_out = malloc(len);
- if(!addr_out)
+
+ if(!addr)
return MAP_FAILED;
- return addr_out;
+ return addr;
}
static inline int mprotect(void *addr, size_t len, int prot)
static inline int munmap(void *addr, size_t len)
{
- free(addr);
- return 0;
+ int uid = sceKernelFindMemBlockByAddr(addr, len);
+
+ return sceKernelFreeMemBlock(uid);
}
#endif
#endif // MMAN_H
-