[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: PC machine types switched to SeaBIOS/gPXE

From: Kevin O'Connor
Subject: Re: [Qemu-devel] Re: PC machine types switched to SeaBIOS/gPXE
Date: Tue, 3 Nov 2009 20:38:04 -0500
User-agent: Mutt/1.5.19 (2009-01-05)

On Tue, Nov 03, 2009 at 09:11:40AM -0500, Beth Kon wrote:
> Kevin O'Connor wrote:
>> When was this gpxe rom built?  I know gpxe used to have an issue with
>> the checksum not being updated, but I thought that was fixed about six
>> months ago.
> The rom was built about 2 weeks ago. But I don't follow what you're  
> saying. The same rom works when the Seabios tree is reset to the commit  
> just prior to this one. That would suggest to me that the rom isn't the  
> problem. But I agree that there is no obvious connection between that  
> commit and a bad checksum. What am I missing?

I traced this down, and it looks like there is a series of subtle bugs
that led to this situation.

The bug causing the boot to fail is that gPXE didn't update its
checksum.  This was supposed to be fixed in gPXE commit f16668d, but
it looks like gPXE either regressed or the e1000 driver is special in
some way.

The reason SeaBIOS commit a5826b5a exposes this issue, is that commit
a5826b5a broke SeaBIOS' PMM support - the gPXE bug only shows up when
PMM is not available.

So, why did commit a5826b5a break PMM?  This appears to be some weird
interaction with gcc and its "-fwhole-program -combine" options.  One
of the variables (ZoneTmpHigh) is incorrectly marked by gcc as being
local instead of global after commit a5826b5a.  Unfortunately, instead
of getting an error, the build proceeded and had a bogus reference to
the ZoneTmpHigh variable - which caused PMM allocations to fail even
when there was memory.

I've reorganized the build slightly to work around this problem with
"-combine".  I've also updated the SeaBIOS linker scripts so that they
will cause a build failure if a similar issue arises in the future.
The latest SeaBIOS git should have this all working again (even with
the current e1000 gPXE).

It looks like SeaBIOS may have to stop using gcc's "-combine" option,
as this seems to be a bit fragile in various gcc builds.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]