[U-Boot] [PATCH] 8313erdb: Set guarded bit on BAT that covers the end of the address space.
Scott Wood
scottwood at freescale.com
Tue Mar 17 18:52:27 CET 2009
On Tue, Mar 17, 2009 at 01:47:04PM -0400, Mike Frysinger wrote:
> On Tuesday 17 March 2009 13:09:31 Scott Wood wrote:
> > This board currently sets DBAT6 to cover all of the final 256MiB of
> > address space; however, not all of this space is covered by a device. In
> > particular, flash sits at 0xfe000000-0xfe7fffff, and nothing is mapped
> > at the far end of the address space.
> >
> > In zlib, there is a loop that references p[-1] if p is non-NULL. Under
> > some circumstances, this leads to the CPU speculatively loading from
> > 0xfffffff8 if p is NULL. This leads to a machine check.
>
> isnt that a compiler generating bad code then ?
No. The dereference was on a not-taken side of a conditional branch.
> if C code is doing ptr checks, the compiler should make sure that
> pointer is not dereferenced at all if the hardware cannot suffer the
> consequences, even speculatively.
There is no reasonable way for the compiler to prevent such speculative
accesses. Non-memory-like mappings must have the guarded bit set. That
is what the bit is there for.
-Scott
More information about the U-Boot
mailing list