Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 May 2012 00:29:30 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, Ed Schouten <ed@FreeBSD.org>, rwatson@FreeBSD.org, Bruce Evans <brde@optusnet.com.au>, svn-src-head@FreeBSD.org, jonathan@FreeBSD.org
Subject:   Re: svn commit: r236026 - in head/sys: amd64/linux32 compat/freebsd32 kern
Message-ID:  <20120529002201.C1877@besplex.bde.org>
In-Reply-To: <20120528133633.GB2358@deviant.kiev.zoral.com.ua>
References:  <201205252150.q4PLomFk035064@svn.freebsd.org> <20120526173233.A885@besplex.bde.org> <20120526164927.GU2358@deviant.kiev.zoral.com.ua> <20120527043827.W3357@besplex.bde.org> <20120528133633.GB2358@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 28 May 2012, Konstantin Belousov wrote:

> On Sun, May 27, 2012 at 07:49:36AM +1000, Bruce Evans wrote:
>> On Sat, 26 May 2012, Konstantin Belousov wrote:
>>
>>> On Sat, May 26, 2012 at 10:21:25PM +1000, Bruce Evans wrote:
>>> The 'low level' AKA magic happens in several *_fetch_syscall_args()
>>> functions. For both linux32 and freebsd32, the magic code automatically
>>> zero-extends the arguments into 64bit entities. Linux passes args in
>>> registers, while FreeBSD uses words on stack.
>>
>> Actually, the amd64 linux_fetch32_fetch_syscall_args() just copies from
>> 64-bit registers frame->tf_r* to 64-bit sa->args[*].  I can't see how
>> this gives anything except garbage in the top bits.  Is there magic in
>> the switch to 64-bit mode that sets the top bits?  Anyway, sign extension
>> would give garbage for unsigned args, and zero-extension would give
>> garbage for negative signed args.
> Hardware zero-extends any register touched in the 32bit mode.

So they have garbage extension when not touched?  Or maybe the kernel
extends them.

> In fact, please see r217991 for related bug.

That seems to be the kernel extending them.  I tested on a kernel built
on 3 Mar 2012.  It is much later than that, and shows nonzero extensions
(about half of the wrong cases sign extensions).

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120529002201.C1877>