[U-Boot] [PATCH v2] arm: Switch to -mno-unaligned-access when supported by the compiler

Albert ARIBAUD albert.u.boot at aribaud.net
Mon Feb 17 16:55:03 CET 2014


Hi Tom,

On Mon, 17 Feb 2014 10:45:35 -0500, Tom Rini <trini at ti.com> wrote:

> On Wed, Feb 12, 2014 at 05:19:15PM +0100, Albert ARIBAUD wrote:
> > Hi Tom,
> > 
> > On Wed, 12 Feb 2014 09:35:55 -0500, Tom Rini <trini at ti.com> wrote:
> > 
> > > On Tue, Feb 11, 2014 at 05:37:55PM +0100, Albert ARIBAUD wrote:
> > > > Hi Måns,
> > > > 
> > > > On Tue, 11 Feb 2014 15:33:09 +0000, Måns Rullgård <mans at mansr.com>
> > > > wrote:
> > > > 
> > > > > The problem is that the current settings do
> > > > > the exact opposite.  By using -munaligned-access by default, you are
> > > > > asking the compiler to go ahead and do whatever it thinks is best, which
> > > > > is sometimes to perform an intentional unaligned access.  Exactly when
> > > > > this will happen is largely impossible to predict.
> > > > 
> > > > The -munaligned-access option does *not* "[ask] the compiler to go
> > > > ahead and do whatever it thinks is best", it tells it to use direct
> > > > native accesses when unaligned accesses are required, as opposed to
> > > > splitting unaligned accesses into smaller but aligned aligned native
> > > > accesses, which is what you get with -mno-unaligned-access.
> > > 
> > > Incorrect, and gets to the heart of our problem.  It says that native
> > > unaligned accesses are valid and make use of this as appropriate.  So
> > > our goal of "make the compiler use native unaligned accesses so we can
> > > find bad code" is invalid.  It's making properly written code fail
> > > instead and improperly written code will still be just as improper.
> > 
> > Code which translates into uncontrolled unaligned accesses is not
> > properly written.
> 
> It's not.  A problem we now have is that when we want to do unaligned
> accesses for valid reasons the compiler generates valid code for what we
> told it to do, but then fails at run time because we lied to the
> compiler.

If we have a valid reason to perform an unaligned access, then we must
make it explicit that we want it, by including <asm/unaligned.h> and
using put_unaligned() or get_unaligned() or variants thereof.

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list