From owner-freebsd-emulation@FreeBSD.ORG Mon Jan 22 08:18:12 2007 Return-Path: X-Original-To: freebsd-emulation@freebsd.org Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 34CD116A402; Mon, 22 Jan 2007 08:18:12 +0000 (UTC) (envelope-from xdivac02@stud.fit.vutbr.cz) Received: from eva.fit.vutbr.cz (eva.fit.vutbr.cz [147.229.176.14]) by mx1.freebsd.org (Postfix) with ESMTP id BDD2313C45D; Mon, 22 Jan 2007 08:18:11 +0000 (UTC) (envelope-from xdivac02@stud.fit.vutbr.cz) Received: from eva.fit.vutbr.cz (localhost [127.0.0.1]) by eva.fit.vutbr.cz (envelope-from xdivac02@eva.fit.vutbr.cz) (8.13.8/8.13.7) with ESMTP id l0M8IAj8043210 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 22 Jan 2007 09:18:10 +0100 (CET) Received: (from xdivac02@localhost) by eva.fit.vutbr.cz (8.13.8/8.13.3/Submit) id l0M8IA9n043209; Mon, 22 Jan 2007 09:18:10 +0100 (CET) Date: Mon, 22 Jan 2007 09:18:10 +0100 From: Divacky Roman To: Tijl Coosemans Message-ID: <20070122081810.GA42976@stud.fit.vutbr.cz> References: <790a9fff0701211041j1176d00gd6dd75d0989cf4ec@mail.gmail.com> <20070121185445.GA88090@stud.fit.vutbr.cz> <200701220001.22404.tijl@ulyssis.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200701220001.22404.tijl@ulyssis.org> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.57 on 147.229.176.14 Cc: freebsd-emulation@freebsd.org, jkim@freebsd.org Subject: Re: linuxolator: tls_test results amd64 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, 22 Jan 2007 08:18:12 -0000 On Mon, Jan 22, 2007 at 12:01:19AM +0100, Tijl Coosemans wrote: > On Sunday 21 January 2007 19:54, Divacky Roman wrote: > > On Sun, Jan 21, 2007 at 12:41:02PM -0600, Scot Hetzel wrote: > > > Divacky Roman asked me to update my sources to the latest P4 patches > > > and run the tls_test program. Below are the results: > > > > > > hp010 / # ./tls_test > > > > > > doing 1st set_thread_area(): > > > ====> got GDT selector: 0x0 --- TEST PASSED. > > > > > > reading first byte of [0x00000000] TLS: > > > ====> 123 --- TEST PASSED. > > > > > > doing 2nd set_thread_area(): > > > ====> got GDT selector: 0x4 --- TEST PASSED. > > > context-switching once ... > > > > > > reading first byte of 4K [0x0804aca0] TLS: > > > Segmentation fault (core dumped) > > > > this means that we are able to set up the TLS for the very first > > time but not any other time. > > > > can someone explain this? > > > > the tls_test program is at > > > > www.stud.fit.vutbr.cz/~xdivac02/tls_test.c > > I don't have an amd64 box, so I can only guess, but I think it's your > test that's bugged and not your tls implementation. > > Your test uses FS and your tls implementation uses GS and while they > each point to the same GDT entry they don't end up pointing to the > same addresses because your tls implementation doesn't touch the GDT > entry at all. It simply (and correctly as far as I can tell) changes > the upper 32 bits of GS (using wrmsr). yeah, I thought about this as well and we might test it but 1) why the first test succeeds? 2) why real apps (ie. using %gs) show the very same behaviour (first program works then it doesnt) > So what you should change in your test I believe, is remove the > initseg() function and every use of it and in __readseg() and > __writeseg() use gs instead of fs. to be honest I dont think this is possible. we have to support every program written for 32bit linux. its no way to change userland apps if we could I'd better port them to fbsd and avoid linuxulator at all :) amd64 running 32bit program runs in a special "compatibility mode". I dont know much about it but I guess it at least "emulates" things like GDT etc. otherwise a lot would not be possible. imho roman