public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] disk: add -mno-unaligned-access to CFLAGS
Date: Fri, 29 Mar 2013 08:00:54 +0100	[thread overview]
Message-ID: <20130329080054.095a29ec@lilith> (raw)
In-Reply-To: <1515022.qtqTyrluE4@ax5200p>

Hi Marc,

On Thu, 28 Mar 2013 23:35 +0100, Marc Dietrich <marvin24@gmx.de> wrote:

> Hi Albert,
> 
> On Thursday 28 March 2013 21:42:13 Albert ARIBAUD wrote:
> > On Thu, 28 Mar 2013 19:57:31 +0100, Marc Dietrich <marvin24@gmx.de>
> > wrote:
> > > Many on-disk structures used in the directory are accessed in a
> > > non aligned manner. gcc => 4.7 (and gcc-4.6 from Linaro) switched
> > > to -munaligned-access on default causing exceptions on ARM. The
> > > easiest way to fix this is to force no-unaligned-access in this
> > > (non speed critical) directory.
> > > 
> > > Signed-off-by: Marc Dietrich <marvin24@gmx.de>
> > > ---
> > > 
> > >  disk/Makefile |    1 +
> > >  1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/disk/Makefile b/disk/Makefile
> > > index 5affe34..01134a3 100644
> > > --- a/disk/Makefile
> > > +++ b/disk/Makefile
> > > @@ -24,6 +24,7 @@
> > > 
> > >  include $(TOPDIR)/config.mk
> > >  
> > >  #CFLAGS += -DET_DEBUG -DDEBUG
> > > 
> > > +CFLAGS += -mno-unaligned-access
> > > 
> > >  LIB	= $(obj)libdisk.o
> > 
> > Which fields, which structures, which files are affected by the
> > unalignment issue?
> 
> in my test case, it is the start sector of a partition (check 
> include/part_efi.h). disk/part_efi.c reads the legacy mbr (to an aligned 
> buffer) which has a partition structure on offset 440+4+2 (<- not aligned to 4 
> byte boundary) and inside this a 32 bit field start_sect (aligned to 4 byte 
> boundary). Reading this field (and also the next, nr_sects) will cause an 
> exception. Same is for part_dos, but there we still use le32_to_int which 
> reads byte by byte. I didn't checked others.

Thanks for clarifying.

Considering this is about a very small number of reads, I strongly
prefer that these reads be done through the get_unaligned(&field) macro
defined in e.g. arch/arm/include/asm/unaligned.h, even at the slightly
added cost of decomposing the reads into 8-bit accesses.

Doing so solves the issue at hand while still allowing the rest of the
code to detect cases where unalignment stems from error conditions, e.g.
bad pointers or erroneous changes in structures, etc.

> Marc

Amicalement,
-- 
Albert.

  reply	other threads:[~2013-03-29  7:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-28 18:57 [U-Boot] [PATCH] disk: add -mno-unaligned-access to CFLAGS Marc Dietrich
2013-03-28 20:42 ` Albert ARIBAUD
2013-03-28 22:35   ` Marc Dietrich
2013-03-29  7:00     ` Albert ARIBAUD [this message]
2013-03-29 11:31       ` Marc Dietrich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130329080054.095a29ec@lilith \
    --to=albert.u.boot@aribaud.net \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox