diff options
author | frangarcj | 2016-09-06 13:49:55 +0200 |
---|---|---|
committer | frangarcj | 2016-09-06 13:49:55 +0200 |
commit | 1a5fd79401ac52789fad34c6b852b947200a6334 (patch) | |
tree | 6284e07ed78f659bd87c7e75c0db54d52fa784eb /frontend/vita/sys | |
parent | 1cc8c854f8161cd0251a9b92929ad01584031ed3 (diff) | |
download | pcsx_rearmed-1a5fd79401ac52789fad34c6b852b947200a6334.tar.gz pcsx_rearmed-1a5fd79401ac52789fad34c6b852b947200a6334.tar.bz2 pcsx_rearmed-1a5fd79401ac52789fad34c6b852b947200a6334.zip |
(VITA) Some dynarec
Diffstat (limited to 'frontend/vita/sys')
-rw-r--r-- | frontend/vita/sys/mman.h | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/frontend/vita/sys/mman.h b/frontend/vita/sys/mman.h index 66467f4..89da513 100644 --- a/frontend/vita/sys/mman.h +++ b/frontend/vita/sys/mman.h @@ -18,19 +18,32 @@ extern "C" { 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) @@ -43,8 +56,9 @@ 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); } @@ -53,4 +67,3 @@ static inline int munmap(void *addr, size_t len) #endif #endif // MMAN_H - |