Mailinglist Archive: opensuse-bugs (13069 mails)

< Previous Next >
[Bug 400487] gcc 4.3 miscompiles kernel
  • From: bugzilla_noreply@xxxxxxxxxx
  • Date: Thu, 22 Jan 2009 10:21:58 -0700 (MST)
  • Message-id: <20090122172158.4057ECC7CD@xxxxxxxxxxxxxxxxxxxxxx>
https://bugzilla.novell.com/show_bug.cgi?id=400487

User matz@xxxxxxxxxx added comment
https://bugzilla.novell.com/show_bug.cgi?id=400487#c16


Michael Matz <matz@xxxxxxxxxx> changed:

What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |NEEDINFO
Info Provider| |schwab@xxxxxxxxxx




--- Comment #16 from Michael Matz <matz@xxxxxxxxxx> 2009-01-22 10:21:56 MST ---
The only relevant difference that I can detect in the asm (comparing
the output of gcc42-4.2.1_20070724-17.1 and gcc43-4.3.3_20081022-1.2) is
in vesa_store_edid(), where the constant 0x4f15 is stored in a register
which is reused in the second use after an int 0x10 call that could possibly
clobber that register.

The asm certainly misses a clobber. So, can you try adding one to this
asm in vesa_store_edid:

/* Note: The VBE DDC spec is different from the main VESA spec;
we genuinely have to assume all registers are destroyed here. */
asm("pushw %%es; movw %2,%%es; "INT10"; popw %%es"
: "+a" (ax), "+b" (bx)
: "c" (cx), "D" (di)
: "esi");

In particular add "edx" to the clobber list (that's the register used
in my case), but the above also misses "ecx", "edi", which have to be added
as in/out constraints (i.e. "+c") probably, not as clobbers.

Note especially how the comment explicitely warns about assuming that
all regs are destroyed, but how the asm makes no try to cater for that.

--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

< Previous Next >