On Tue, Nov 11, 2014 at 06:54:26PM +0100, Ondrej Zary wrote:
> On Tuesday 11 November 2014 00:17:59 Mike Hommey wrote:
> > On Tue, Nov 11, 2014 at 12:06:30AM +0100, Ondrej Zary wrote:
> > > (gdb) print JSC::MacroAssemblerX86Common::s_sseCheckState
> > > $1 = JSC::MacroAssemblerX86Common::HasSSE3
> >
> > Aha! At least now it's clear what part is doing wrong.
> >
> > Can you compile and run the following code, and give its output?
> >
> > #include <stdio.h>
> >
> > int main() {
> > int flags_edx = 0;
> > int flags_ecx = 0;
> > asm (
> > "movl $0x1, %%eax;"
> > "pushl %%ebx;"
> > "cpuid;"
> > "popl %%ebx;"
> >
> > : "=c" (flags_ecx), "=d" (flags_edx)
> > :
> > : "%eax"
> >
> > );
> > printf("%04x %04x\n", flags_ecx, flags_edx);
> > return 0;
> > }
>
> $ cc -Wall test.c -o test
> $ ./test
> 4db6ebee 80a135
> $ ./test
> 24953363 80a135
> $ ./test
> 235945c1 80a135
> $ ./test
> e6ad9217 80a135
> $ ./test
> c74a535e 80a135
> $ ./test
> 8671f3 80a135
>
> This was the same bug, only in kernel:
> https://bugzilla.kernel.org/show_bug.cgi?id=3767
What are the values when you clobber ecx first? If edx doesn't change,
then there is more to do than clobbering ecx in the iceweasel case.
Mike
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]