static uint32_t __sys_linux_mmap2(uint32_t arg[]) { //TODO void *addr = (void*)arg[0]; size_t len = arg[1]; int prot = (int)arg[2]; int flags = (int)arg[3]; int fd = (int)arg[4]; size_t off = (size_t)arg[5]; kprintf("TODO __sys_linux_mmap2 addr=%08x len=%08x prot=%08x flags=%08x fd=%d off=%08x\n", addr,len,prot,flags, fd, off); if(fd == -1 || flags & MAP_ANONYMOUS){ //print_trapframe(pls_read(current)->tf); uint32_t ucoreflags = 0; if(prot & PROT_WRITE) ucoreflags |= MMAP_WRITE; int ret = __do_linux_mmap((uintptr_t)&addr, len, ucoreflags); //kprintf("@@@ ret=%d %e %08x\n", ret,ret, addr); if(ret) return MAP_FAILED; kprintf("__sys_linux_mmap2 ret=%08x\n", addr); return addr; }else{ return (uint32_t)sysfile_linux_mmap2(addr, len, prot, flags,fd, off); } }
static uint32_t sys_linux_mmap(uint32_t arg[]) { void *addr = (void*)arg[0]; size_t len = arg[1]; int fd = (int)arg[2]; size_t off = (size_t)arg[3]; return (uint32_t)sysfile_linux_mmap2(addr, len, 0, 0, fd, off); }
static uint32_t __sys_linux_mmap2(uint32_t arg[]) { //TODO uintptr_t addr = (uintptr_t)arg[0]; size_t len = arg[1]; uint32_t prot = (uint32_t)arg[2]; uint32_t flags = (uint32_t)arg[3]; int fd = (int)arg[4]; size_t off = (size_t)arg[5]; #ifdef UCONFIG_BIONIC_LIBC kprintf("TODO __sys_linux_mmap2 addr=%08x len=%08x prot=%08x flags=%08x fd=%d off=%08x\n", addr,len,prot,flags, fd, off); #endif //UCONFIG_BIONIC_LIBC if(fd == -1 || flags & MAP_ANONYMOUS){ //print_trapframe(pls_read(current)->tf); #ifdef UCONFIG_BIONIC_LIBC if(flags & MAP_FIXED) { return linux_regfile_mmap2(addr, len, prot, flags, fd, off); } #endif //UCONFIG_BIONIC_LIBC uint32_t ucoreflags = 0; if(prot & PROT_WRITE) ucoreflags |= MMAP_WRITE; kprintf("do_linux_mmap!!!\n"); int ret = __do_linux_mmap((uintptr_t)&addr, len, ucoreflags); //kprintf("@@@ ret=%d %e %08x\n", ret,ret, addr); if(ret) return MAP_FAILED; //kprintf("__sys_linux_mmap2 ret=%08x\n", addr); return addr; }else{ kprintf("sysfile_linux_mmap2???"); return (uint32_t)sysfile_linux_mmap2(addr, len, prot, flags,fd, off); } }