Date: Thu, 15 Nov 2001 17:36:39 -0500 (EST) From: Joe Clarke <marcus@marcuscom.com> To: Maxim Sobolev <sobomax@FreeBSD.org> Cc: freebsd-ports@FreeBSD.org, <hackers@FreeBSD.org> Subject: Re: Using bit 21 of EFLAGS in user-mode [was: Re: sigreturn: eflags creash (fixed!)] Message-ID: <20011115173550.W47613-100000@shumai.marcuscom.com> In-Reply-To: <200111152156.XAA79972@ipcard.iptcom.net>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011115173550.W47613-100000>