From owner-freebsd-emulation@FreeBSD.ORG Mon Apr 14 16:18:31 2008 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D0C0B106564A for ; Mon, 14 Apr 2008 16:18:31 +0000 (UTC) (envelope-from chagin.dmitry@gmail.com) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by mx1.freebsd.org (Postfix) with ESMTP id 4FAC08FC17 for ; Mon, 14 Apr 2008 16:18:30 +0000 (UTC) (envelope-from chagin.dmitry@gmail.com) Received: by fg-out-1718.google.com with SMTP id 16so1832249fgg.35 for ; Mon, 14 Apr 2008 09:18:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:to:cc:subject:in-reply-to:message-id:references:mime-version:content-type:from; bh=JtXbAzAQKSo6a8UTzqrHGLj3l+f9xcpvYA+k6QIgT30=; b=kvCd7Kfnr2YNKEc4WLMR7y+iD/4aFueYLNENr+gPp76oJI+zlhqWAiFcXdo0K1/kmKeddR796x1V9tDdJKlAK3PnlrBAcMvLHWq2DzUGooLxW+a+5YmbMRVWzv5by9VuU2iO3HiWEe83t8BJpRovi+xLcFYAOLphupJCIYtSJHM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:to:cc:subject:in-reply-to:message-id:references:mime-version:content-type:from; b=SfrcNwBIuQXJDtXcoNabKqq33j+3jE8fUkQ99savIBEPuUsdUSR6c4f8O0WoSgShMjF4hvsiGAc7VkH4ooe5oIEy+Dc86x1VTHH0cIECRcAkCsJZexvXfL+ubh8yNoH7LCphtECKGkj1zoY+XaUjfh2DgzmpBaCKnHfeU2Qqrk0= Received: by 10.86.50.8 with SMTP id x8mr13796336fgx.30.1208189909497; Mon, 14 Apr 2008 09:18:29 -0700 (PDT) Received: from ora.chd.net ( [81.200.6.196]) by mx.google.com with ESMTPS id e20sm5490613fga.1.2008.04.14.09.18.27 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 14 Apr 2008 09:18:28 -0700 (PDT) Date: Mon, 14 Apr 2008 20:18:22 +0400 (MSD) To: Kostik Belousov In-Reply-To: <20080414134935.GI18958@deviant.kiev.zoral.com.ua> Message-ID: <20080414194041.Q6842@ora.chd.net> References: <20080412181712.Y38920@ora.chd.net> <20080412145401.GA4139@freebsd.org> <20080413214624.S7426@ora.chd.net> <20080413183248.GA68642@freebsd.org> <20080413183659.GA18958@deviant.kiev.zoral.com.ua> <20080413231135.K1079@ora.chd.net> <20080413192614.GC18958@deviant.kiev.zoral.com.ua> <20080413234359.H1165@ora.chd.net> <20080414123137.GH18958@deviant.kiev.zoral.com.ua> <20080414134935.GI18958@deviant.kiev.zoral.com.ua> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed From: Chagin Dmitry Cc: freebsd-emulation@freebsd.org, Chagin Dmitry Subject: Re: Call for review && test: linux_kdump-1.6 X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Apr 2008 16:18:31 -0000 On Mon, 14 Apr 2008, Kostik Belousov wrote: > On Mon, Apr 14, 2008 at 03:31:37PM +0300, Kostik Belousov wrote: >> On Mon, Apr 14, 2008 at 12:42:29AM +0400, Chagin Dmitry wrote: >>> On Sun, 13 Apr 2008, Kostik Belousov wrote: >>> >>>> On Sun, Apr 13, 2008 at 11:11:55PM +0400, Chagin Dmitry wrote: >>>>> On Sun, 13 Apr 2008, Kostik Belousov wrote: >>>>> >>>>>> On Sun, Apr 13, 2008 at 08:32:48PM +0200, Roman Divacky wrote: >>>>>>> On Sun, Apr 13, 2008 at 09:58:08PM +0400, Chagin Dmitry wrote: >>>>>>>> On Sat, 12 Apr 2008, Roman Divacky wrote: >>>>>>>> >>>>>>>>>> And question: whether i can add to linuxolator some ktr_struct >>>>>>>>>> functionality? >>>>>>>>> >>>>>>>>> sure... please provide a patch and I'll take care about it. >>>>>>>> >>>>>>>> ok, thnx :) >>>>>>>> what about EJUSTRETURN? >>>>>>>> i attached simple patch for demo only (not tested). >>>>>>> >>>>>>> uh... can you provide diff -u ? I dont understand the diff at all ;) >>>>>> >>>>>> Also, please note that the ML software strips your attachments. Either >>>>>> inline the patch, or use the plain-text content-type for it. >>>>>> >>>>> >>>>> ups... ah google )) >>>>> i have understood, sorry and thnx. >>>>> Speech about that in linux_kdump it is impossible to distinguish >>>>> EJUSTRETURN from a real error. look: >>>>> >>>>> --- sys/i386/i386/trap.c.orig 2008-04-13 21:39:18.000000000 +0400 >>>>> +++ sys/i386/i386/trap.c 2008-04-13 22:35:25.000000000 +0400 >>>>> @@ -1091,8 +1091,12 @@ >>>>> td->td_proc->p_pid, td->td_name, code); >>>>> >>>>> #ifdef KTRACE >>>>> - if (KTRPOINT(td, KTR_SYSRET)) >>>>> - ktrsysret(code, error, td->td_retval[0]); >>>>> + if (KTRPOINT(td, KTR_SYSRET)) { >>>>> + if (error == EJUSTRETURN) >>>>> + ktrsysret(code, 0, td->td_retval[0]); >>>>> + else >>>>> + ktrsysret(code, error, td->td_retval[0]); >>>>> + } >>>>> #endif >>>>> >>>>> /* >>>>> @@ -1104,4 +1108,3 @@ >>>>> >>>>> PTRACESTOP_SC(p, td, S_PT_SCX); >>>>> } >>>>> - >>>> >>>> I do not quite understand the intent of this change. >>>> >>>> EJUSTRETURN is used for two different purposes in the kernel. >>>> 1. The sigreturn family of the syscalls use it after the interrupted >>>> frame is restored to avoid the normal syscall return sequence to modify >>>> the machine state. >>>> 2. It is used by the kernel to notify the in-kernel caller code about >>>> some special condition, that nonetheless shall not be returned to the >>>> userspace. >>>> >>>> Only the first case is applicable to the kdump, and IMHO you actually >>>> destroy some information, since error == EJUSTRETURN is reported as 0. >>>> >>>> Could you, please, provide some more arguments in the support of your >>>> proposed change ? >>>> >>> >>> Thanks for you informative reply Kostya. >>> The problem arises only in linux_kdump. Because linux error >>> codes negative and EJUSTRETURN coincides with ENOENT. >>> Before a call ktr_sysret we decode return codes of emulators syscalls. >> >> Ah, I see. Then, we shall never dump the ERESTART and EJUSTRETURN >> for the emulated ABIs. At least, this is true for Linux, I am not >> so sure about iBCS2 and SVR4. >> I do not absolutely agree with this statement. If the emulated syscalls should return native FreeBSD errno, that why to not write them to a ktrace file without conversion? Current linux_kdump port uses strerror because expects it. At least, it is convenient :) Your patch is correct for my version of linux_kdump, but does not solve a problem with the current port version. If it's possible, explain please, that is not correct in my last patch? thnx >> Could you test the patch below, instead ? > >> diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c >> index e7de579..55642d1 100644 >> --- a/sys/i386/i386/trap.c >> +++ b/sys/i386/i386/trap.c > > The patch is obviously wrong, it just prevents the Linux ENOENT to be > dumped. Please, try this one instead. > > diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c > index b6a454d..3b1368a 100644 > --- a/sys/amd64/amd64/trap.c > +++ b/sys/amd64/amd64/trap.c > @@ -861,9 +861,18 @@ syscall(struct trapframe *frame) > frame->tf_rip -= frame->tf_err; > frame->tf_r10 = frame->tf_rcx; > td->td_pcb->pcb_flags |= PCB_FULLCTX; > - break; > - > + /* FALLTHROUGH */ > case EJUSTRETURN: > +#ifdef KTRACE > + /* > + * The ABIs that use the negative error codes, like > + * Linux, would confuse the in-kernel errno values > + * with proper userspace errno. Clean these values to > + * avoid a confusion in the kdump. > + */ > + if (p->p_sysent->sv_errsize) > + error = 0; > +#endif > break; > > default: > diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c > index e7de579..6ec04b0 100644 > --- a/sys/i386/i386/trap.c > +++ b/sys/i386/i386/trap.c > @@ -1040,9 +1040,18 @@ syscall(struct trapframe *frame) > * int 0x80 is 2 bytes. We saved this in tf_err. > */ > frame->tf_eip -= frame->tf_err; > - break; > - > + /* FALLTHROUGH */ > case EJUSTRETURN: > +#ifdef KTRACE > + /* > + * The ABIs that use the negative error codes, like > + * Linux, would confuse the in-kernel errno values > + * with proper userspace errno. Clean these values to > + * avoid a confusion in the kdump. > + */ > + if (p->p_sysent->sv_errsize) > + error = 0; > +#endif > break; > > default: > -- Have fun! chd