This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA:] Caveat for ARM in gcc-4.7/changes.html: unaligned accesses


> From: Michael Hope <michael.hope@linaro.org>
> Date: Fri, 8 Jun 2012 04:42:30 +0200

> On 8 June 2012 12:15, Hans-Peter Nilsson <hans-peter.nilsson@axis.com> wrote:
> > The "some source
> > codes" was in the analyzed case a strcpy of a five-byte string
> > (busybox/libbb/procps.c:365 'strcpy(filename_tail, "stat");' of
> > some unknown busybox-version).
> >
> > An OS configured with unaligned accesses turned off (IIUC the
> > default for Linux/ARM), has the nice property that you easily
> > spot a certain class of bad codes.
> >
> > Ok to commit?
> 
> The wording is scarier than I'd like.  Userspace and the Linux kernel
> post 3.1 are fine.

So the default for ALIGNMENT_TRAP changed in >3.1?

>  Earlier kernels fail to start due to the kernel
> turning off the hardware support and an interaction of
> -fconserve-stack and -munaligned-access cause a char array to be
> unaligned on the stack.
> 
> I don't agree that unaligned access is a sign of wrong code.  It's
> very common when poking about in protocol buffers.  Using the hardware
> support is better than the multi-byte read plus OR that GCC used to
> do.

Totally disagree.  Code that e.g. casts unaligned char * to int *
and dereferences that, is crappy and unportable and fails
without OS-configury choice on some platforms, and is also
avoidable.  But hopefully that wasn't what you meant.

> Where else have you seen this?

I don't get the "else".  I've seen the unaligned accesses from
userland code as quoted above.  There were other (userland)
places in that build-tree that I'm not going to check, as this
was (again) GCC-generated code.  There were no other misaligned
accesses on that system; not from the kernel, not from userspace.

> > + ? ?<li>On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
> > + ? ?ARMv7-R, or ARMv7-M
> 
> How about "ARMv6K and above"? or "ARMv6 and above, except for ARMv6-M"

I'll let an ARM maintainer sort out the names and color for the
toolshed; ARMv6K isn't an obvious improvement to me over the
names used in the patch introducing -munaligned-access.

> > the default of the new option
> > + ? ?<code>-munaligned-accesses</code> is on, which for some source
> > + ? ?codes generates code that accesses memory on unaligned adresses.
> > + ? ?This will require the OS of those systems to enable such accesses
> > + ? ?(controlled by CP15 register c1, refer to ARM documentation).
> 
> The CPU has an unaligned access trap which is off by default.  The
> kernel has to turn the trap on to cause the fault.

In arch/arm/Kconfig it looks for all purposes default "on" to me
(config ALIGNMENT_TRAP, 2.6.35): "default y if !ARCH_EBSA110"
where ARCH_EBSA110 seems to be for some "evaluation board from Digital".

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]