コード例 #1
0
ファイル: syscall.c プロジェクト: chyh1990/ucore-arch-arm
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);
  }
}
コード例 #2
0
ファイル: syscall.c プロジェクト: geraint0923/ucore_plus
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);
}
コード例 #3
0
ファイル: syscall.c プロジェクト: geraint0923/ucore_plus
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);
  }
}