Message ID | 20220201111455.52511-5-imp@bsdimp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | bsd-user: Start upstreaming the system calls. | expand |
On Tue, Feb 1, 2022 at 5:14 AM Warner Losh <imp@bsdimp.com> wrote: > > This doesn't build on openbsd at the moment, and this could > should arguably be in bsd-user/*bsd/i386 somewhere. Until could or should, let's pick one and drop the other. :-) > we refactor to support OpenBSD/NetBSD again, drop it here. > > Signed-off-by: Warner Losh <imp@bsdimp.com> > --- > bsd-user/i386/target_arch_cpu.h | 84 +++++++++++++++------------------ > 1 file changed, 37 insertions(+), 47 deletions(-) > Reviewed-by: Kyle Evans <kevans@FreeBSD.org> > diff --git a/bsd-user/i386/target_arch_cpu.h b/bsd-user/i386/target_arch_cpu.h > index 3cbf69d8af2..9da22202d48 100644 > --- a/bsd-user/i386/target_arch_cpu.h > +++ b/bsd-user/i386/target_arch_cpu.h > @@ -116,55 +116,45 @@ static inline void target_cpu_loop(CPUX86State *env) > process_queued_cpu_work(cs); > > switch (trapnr) { > - case 0x80: > + case 0x80: { > /* syscall from int $0x80 */ > - if (bsd_type == target_freebsd) { > - abi_ulong params = (abi_ulong) env->regs[R_ESP] + > - sizeof(int32_t); > - int32_t syscall_nr = env->regs[R_EAX]; > - int32_t arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; > - > - if (syscall_nr == TARGET_FREEBSD_NR_syscall) { > - get_user_s32(syscall_nr, params); > - params += sizeof(int32_t); > - } else if (syscall_nr == TARGET_FREEBSD_NR___syscall) { > - get_user_s32(syscall_nr, params); > - params += sizeof(int64_t); > - } > - get_user_s32(arg1, params); > - params += sizeof(int32_t); > - get_user_s32(arg2, params); > - params += sizeof(int32_t); > - get_user_s32(arg3, params); > - params += sizeof(int32_t); > - get_user_s32(arg4, params); > - params += sizeof(int32_t); > - get_user_s32(arg5, params); > - params += sizeof(int32_t); > - get_user_s32(arg6, params); > - params += sizeof(int32_t); > - get_user_s32(arg7, params); > + abi_ulong params = (abi_ulong) env->regs[R_ESP] + > + sizeof(int32_t); > + int32_t syscall_nr = env->regs[R_EAX]; > + int32_t arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; > + > + if (syscall_nr == TARGET_FREEBSD_NR_syscall) { > + get_user_s32(syscall_nr, params); > params += sizeof(int32_t); > - get_user_s32(arg8, params); > - env->regs[R_EAX] = do_freebsd_syscall(env, > - syscall_nr, > - arg1, > - arg2, > - arg3, > - arg4, > - arg5, > - arg6, > - arg7, > - arg8); > - } else { /* if (bsd_type == target_openbsd) */ > - env->regs[R_EAX] = do_openbsd_syscall(env, > - env->regs[R_EAX], > - env->regs[R_EBX], > - env->regs[R_ECX], > - env->regs[R_EDX], > - env->regs[R_ESI], > - env->regs[R_EDI], > - env->regs[R_EBP]); > + } else if (syscall_nr == TARGET_FREEBSD_NR___syscall) { > + get_user_s32(syscall_nr, params); > + params += sizeof(int64_t); > + } > + get_user_s32(arg1, params); > + params += sizeof(int32_t); > + get_user_s32(arg2, params); > + params += sizeof(int32_t); > + get_user_s32(arg3, params); > + params += sizeof(int32_t); > + get_user_s32(arg4, params); > + params += sizeof(int32_t); > + get_user_s32(arg5, params); > + params += sizeof(int32_t); > + get_user_s32(arg6, params); > + params += sizeof(int32_t); > + get_user_s32(arg7, params); > + params += sizeof(int32_t); > + get_user_s32(arg8, params); > + env->regs[R_EAX] = do_freebsd_syscall(env, > + syscall_nr, > + arg1, > + arg2, > + arg3, > + arg4, > + arg5, > + arg6, > + arg7, > + arg8); > } > if (((abi_ulong)env->regs[R_EAX]) >= (abi_ulong)(-515)) { > env->regs[R_EAX] = -env->regs[R_EAX]; > -- > 2.33.1 >
On 2/1/22 22:14, Warner Losh wrote: > This doesn't build on openbsd at the moment, and this could > should arguably be in bsd-user/*bsd/i386 somewhere. Until > we refactor to support OpenBSD/NetBSD again, drop it here. > > Signed-off-by: Warner Losh<imp@bsdimp.com> > --- > bsd-user/i386/target_arch_cpu.h | 84 +++++++++++++++------------------ > 1 file changed, 37 insertions(+), 47 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/bsd-user/i386/target_arch_cpu.h b/bsd-user/i386/target_arch_cpu.h index 3cbf69d8af2..9da22202d48 100644 --- a/bsd-user/i386/target_arch_cpu.h +++ b/bsd-user/i386/target_arch_cpu.h @@ -116,55 +116,45 @@ static inline void target_cpu_loop(CPUX86State *env) process_queued_cpu_work(cs); switch (trapnr) { - case 0x80: + case 0x80: { /* syscall from int $0x80 */ - if (bsd_type == target_freebsd) { - abi_ulong params = (abi_ulong) env->regs[R_ESP] + - sizeof(int32_t); - int32_t syscall_nr = env->regs[R_EAX]; - int32_t arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; - - if (syscall_nr == TARGET_FREEBSD_NR_syscall) { - get_user_s32(syscall_nr, params); - params += sizeof(int32_t); - } else if (syscall_nr == TARGET_FREEBSD_NR___syscall) { - get_user_s32(syscall_nr, params); - params += sizeof(int64_t); - } - get_user_s32(arg1, params); - params += sizeof(int32_t); - get_user_s32(arg2, params); - params += sizeof(int32_t); - get_user_s32(arg3, params); - params += sizeof(int32_t); - get_user_s32(arg4, params); - params += sizeof(int32_t); - get_user_s32(arg5, params); - params += sizeof(int32_t); - get_user_s32(arg6, params); - params += sizeof(int32_t); - get_user_s32(arg7, params); + abi_ulong params = (abi_ulong) env->regs[R_ESP] + + sizeof(int32_t); + int32_t syscall_nr = env->regs[R_EAX]; + int32_t arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; + + if (syscall_nr == TARGET_FREEBSD_NR_syscall) { + get_user_s32(syscall_nr, params); params += sizeof(int32_t); - get_user_s32(arg8, params); - env->regs[R_EAX] = do_freebsd_syscall(env, - syscall_nr, - arg1, - arg2, - arg3, - arg4, - arg5, - arg6, - arg7, - arg8); - } else { /* if (bsd_type == target_openbsd) */ - env->regs[R_EAX] = do_openbsd_syscall(env, - env->regs[R_EAX], - env->regs[R_EBX], - env->regs[R_ECX], - env->regs[R_EDX], - env->regs[R_ESI], - env->regs[R_EDI], - env->regs[R_EBP]); + } else if (syscall_nr == TARGET_FREEBSD_NR___syscall) { + get_user_s32(syscall_nr, params); + params += sizeof(int64_t); + } + get_user_s32(arg1, params); + params += sizeof(int32_t); + get_user_s32(arg2, params); + params += sizeof(int32_t); + get_user_s32(arg3, params); + params += sizeof(int32_t); + get_user_s32(arg4, params); + params += sizeof(int32_t); + get_user_s32(arg5, params); + params += sizeof(int32_t); + get_user_s32(arg6, params); + params += sizeof(int32_t); + get_user_s32(arg7, params); + params += sizeof(int32_t); + get_user_s32(arg8, params); + env->regs[R_EAX] = do_freebsd_syscall(env, + syscall_nr, + arg1, + arg2, + arg3, + arg4, + arg5, + arg6, + arg7, + arg8); } if (((abi_ulong)env->regs[R_EAX]) >= (abi_ulong)(-515)) { env->regs[R_EAX] = -env->regs[R_EAX];
This doesn't build on openbsd at the moment, and this could should arguably be in bsd-user/*bsd/i386 somewhere. Until we refactor to support OpenBSD/NetBSD again, drop it here. Signed-off-by: Warner Losh <imp@bsdimp.com> --- bsd-user/i386/target_arch_cpu.h | 84 +++++++++++++++------------------ 1 file changed, 37 insertions(+), 47 deletions(-)