Skip site navigation (1)Skip section navigation (2)
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>