Date: Thu, 14 Jun 2018 14:46:20 +0300 From: Yanko Yankulov <yanko.yankulov@gmail.com> To: Konstantin Belousov <kostikbel@gmail.com> Cc: freebsd-emulation@freebsd.org Subject: Re: two proposed linuxulator fixes + ptrace Message-ID: <CABTd0_p=5cqsN5TKtEWXY_oQXtGdJOyMHEzjoUJeaYcKShLCRQ@mail.gmail.com> In-Reply-To: <20180614101324.GW2493@kib.kiev.ua> References: <CABTd0_pqdAtHMH9gSJdebstASuoomYw1XLbkbbsMCUvtE-=vDA@mail.gmail.com> <20180614101324.GW2493@kib.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --] Hi Konstantin, For the ptrace patch, I suggest you to put it on https://reviews.freebsd.org > and set at least me (kib), jhb and dchagin as reviewers. I will handle it. > > Will do. Just have to figure out how it works. > For the patch 1, TracePid, can you explain what is the meaning of the > pid reported ? > > The TracerPid is the PID of the process currently ptrace-ing the process. TracerPid 0 means no active tracer. So the patch is not semantically correct as it always reports no tracer, but it got the program running. > For the patch 3, %r10 preservation for linux_rt_sigreturn, shouldn't the > same handling applied to non-rt signal return ? And in fact, shouldn't > it be done based on the return code instead of the syscall number ? Look > at the amd64/amd64/vm_machdep.c:cpu_set_syscall_retval(), where I think > EJUSTRETURN case is used by linux sigreturns. > The linux_rt_sigreturn seems to be the only signall return syscall. The no rt_ version seems to be an old pre Linux 2.2 interface. The return code observation sounds right. Thanks. New patch. Ran a quick check, the issue is still solved. [-- Attachment #2 --] From 64e64dab424a8790486325f776317575c2f59a17 Mon Sep 17 00:00:00 2001 From: Yanko Yankulov <yanko.yankulov@gmail.com> Date: Thu, 14 Jun 2018 11:02:56 +0300 Subject: [PATCH] linuxlator/amd64; don't mangle r10 on sigreturn --- sys/amd64/linux/linux_sysvec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c index cd5c8bd382dc..10ebbabccc94 100644 --- a/sys/amd64/linux/linux_sysvec.c +++ b/sys/amd64/linux/linux_sysvec.c @@ -228,8 +228,9 @@ linux_set_syscall_retval(struct thread *td, int error) * the syscall. So, do not clobber %rdx and %r10. */ td->td_retval[1] = frame->tf_rdx; - frame->tf_r10 = frame->tf_rcx; - + if( error != EJUSTRETURN ) + frame->tf_r10 = frame->tf_rcx; + cpu_set_syscall_retval(td, error); /* Restore all registers. */ -- 2.17.1
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABTd0_p=5cqsN5TKtEWXY_oQXtGdJOyMHEzjoUJeaYcKShLCRQ>
