Message ID | 20230819094806.14965-13-kariem.taha2.7@gmail.com |
---|---|
State | New |
Headers | show |
Series | Implement the mmap system call for FreeBSD. | expand |
On Sat, Aug 19, 2023 at 3:49 AM Karim Taha <kariem.taha2.7@gmail.com> wrote: > From: Stacey Son <sson@FreeBSD.org> > > Signed-off-by: Stacey Son <sson@FreeBSD.org> > Signed-off-by: Karim Taha <kariem.taha2.7@gmail.com> > --- > bsd-user/bsd-mem.h | 20 ++++++++++++++++++++ > bsd-user/freebsd/os-syscall.c | 9 +++++++++ > 2 files changed, 29 insertions(+) > Reviewed-by: Warner Losh <imp@bsdimp.com> > diff --git a/bsd-user/bsd-mem.h b/bsd-user/bsd-mem.h > index fed7b7cd80..057c995a6e 100644 > --- a/bsd-user/bsd-mem.h > +++ b/bsd-user/bsd-mem.h > @@ -62,4 +62,24 @@ extern abi_ulong bsd_target_brk; > extern abi_ulong bsd_target_original_brk; > extern abi_ulong brk_page; > > +/* mmap(2) */ > +static inline abi_long do_bsd_mmap(void *cpu_env, abi_long arg1, abi_long > arg2, > + abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long > arg7, > + abi_long arg8) > +{ > + if (regpairs_aligned(cpu_env) != 0) { > + arg6 = arg7; > + arg7 = arg8; > + } > + return get_errno(target_mmap(arg1, arg2, arg3, > + target_to_host_bitmask(arg4, > mmap_flags_tbl), > + arg5, target_arg64(arg6, arg7))); > +} > + > +/* munmap(2) */ > +static inline abi_long do_bsd_munmap(abi_long arg1, abi_long arg2) > +{ > + return get_errno(target_munmap(arg1, arg2)); > +} > + > #endif /* BSD_USER_BSD_MEM_H */ > diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c > index 7e2a395e0f..3525d39d7b 100644 > --- a/bsd-user/freebsd/os-syscall.c > +++ b/bsd-user/freebsd/os-syscall.c > @@ -486,6 +486,15 @@ static abi_long freebsd_syscall(void *cpu_env, int > num, abi_long arg1, > /* > * Memory management system calls. > */ > + case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ > + ret = do_bsd_mmap(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6, > arg7, > + arg8); > + break; > + > + case TARGET_FREEBSD_NR_munmap: /* munmap(2) */ > + ret = do_bsd_munmap(arg1, arg2); > + break; > + > #if defined(__FreeBSD_version) && __FreeBSD_version >= 1300048 > case TARGET_FREEBSD_NR_shm_open2: /* shm_open2(2) */ > ret = do_freebsd_shm_open2(arg1, arg2, arg3, arg4, arg5); > -- > 2.40.0 > >
On 8/19/23 02:47, Karim Taha wrote: > + case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ > + ret = do_bsd_mmap(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, > + arg8); Indentation. Align after (. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/bsd-user/bsd-mem.h b/bsd-user/bsd-mem.h index fed7b7cd80..057c995a6e 100644 --- a/bsd-user/bsd-mem.h +++ b/bsd-user/bsd-mem.h @@ -62,4 +62,24 @@ extern abi_ulong bsd_target_brk; extern abi_ulong bsd_target_original_brk; extern abi_ulong brk_page; +/* mmap(2) */ +static inline abi_long do_bsd_mmap(void *cpu_env, abi_long arg1, abi_long arg2, + abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long arg7, + abi_long arg8) +{ + if (regpairs_aligned(cpu_env) != 0) { + arg6 = arg7; + arg7 = arg8; + } + return get_errno(target_mmap(arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, target_arg64(arg6, arg7))); +} + +/* munmap(2) */ +static inline abi_long do_bsd_munmap(abi_long arg1, abi_long arg2) +{ + return get_errno(target_munmap(arg1, arg2)); +} + #endif /* BSD_USER_BSD_MEM_H */ diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 7e2a395e0f..3525d39d7b 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -486,6 +486,15 @@ static abi_long freebsd_syscall(void *cpu_env, int num, abi_long arg1, /* * Memory management system calls. */ + case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ + ret = do_bsd_mmap(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, + arg8); + break; + + case TARGET_FREEBSD_NR_munmap: /* munmap(2) */ + ret = do_bsd_munmap(arg1, arg2); + break; + #if defined(__FreeBSD_version) && __FreeBSD_version >= 1300048 case TARGET_FREEBSD_NR_shm_open2: /* shm_open2(2) */ ret = do_freebsd_shm_open2(arg1, arg2, arg3, arg4, arg5);