From owner-freebsd-hackers Thu Nov 15 14:36:52 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from shumai.marcuscom.com (rdu57-28-046.nc.rr.com [66.57.28.46]) by hub.freebsd.org (Postfix) with ESMTP id 247CF37B419; Thu, 15 Nov 2001 14:36:36 -0800 (PST) Received: from localhost (marcus@localhost) by shumai.marcuscom.com (8.11.6/8.11.6) with ESMTP id fAFMadn10807; Thu, 15 Nov 2001 17:36:39 -0500 (EST) (envelope-from marcus@marcuscom.com) X-Authentication-Warning: shumai.marcuscom.com: marcus owned process doing -bs Date: Thu, 15 Nov 2001 17:36:39 -0500 (EST) From: Joe Clarke To: Maxim Sobolev Cc: freebsd-ports@FreeBSD.org, Subject: Re: Using bit 21 of EFLAGS in user-mode [was: Re: sigreturn: eflags creash (fixed!)] In-Reply-To: <200111152156.XAA79972@ipcard.iptcom.net> Message-ID: <20011115173550.W47613-100000@shumai.marcuscom.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Thu, 15 Nov 2001, Maxim Sobolev wrote: > On Thu, 15 Nov 2001 14:56:31 -0500 (EST), Joe Clarke wrote: > > > > I learned about this by reading through some of the -hackers archives. > > One person complained of similar errors trying to get xine to work on > > FreeBSD. Removing the MMX detection code fixed it. I remembered libpng > > also used MMX, so I removed the pnggccrd.c source, and voila! > > > > Based on core dumps, strace output, and a lot of code surfing, this makes > > sense to me. Basically, any png-dependent app's thread that runs longer > > than what ITIMER_PROF is set to gets hit with a SIGPROF. When that > > happens, things context switch. eflags must have been corrupted by the > > MMX code, thus sigreturn() bombs out, and causes uthread_kern to die as > > well. Here's what strace looks like when balsa tries to read a 33 MB > > mailbox: > > > > 74202 sigreturn(0x81f2c64 > > > > When this happens, strace politely dies with a bus error. > > > > Thanks for testing this, Maxim. Hopefully someone can find the problem > > and fix it for good. > > That explains... After a quick glance at png code I found that > the only place where EFLAGS is altered is CPUID code, where > the library flips bit 21 of EFLAGS in order to ensure that the > CPUID instruction is supported (otherwise it will get SIGILL > on older processors). Unfortunately, for some reason FreeBSB > kernel considers bit 21 of EFLAGS as one that should not be > altered in the user mode, thus making it illegal to use standard > user-mode processor-detection routines based around that bit. > AFAIK, it is a bug in FreeBSD, because there is actually nothing > wrong with altering bit 21 in the user mode - it doesn't have > any side effects and pretty much any of the currently available > on the i386 OSes allows it. > > Therefore, I would like to ask you to test attached patch and > if it works and there are no other objections I would like to > commit it shortly. To test the patch, you need to recompile > kernel with patch applied, reboot, recompile/reinstall png with > MXX support turned on and try to run Nautilus. Please let me know > if it helped or not. Works like a champ! Thanks a lot for taking this to the next step. It's really good to have full Gnome functionality. Joe > > Thanks! > > -Maxim To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message