[PATCH][ARM] FAIL: gcc.target/arm/pr58041.c scan-assembler ldrb
Maciej W. Rozycki
macro@codesourcery.com
Tue May 27 17:02:00 GMT 2014
On Tue, 27 May 2014, Richard Earnshaw wrote:
> > Afterwards it is:
> >
> > .L14:
> > vldr d16, [r3, #-16]
> > vldr d17, [r3, #-8]
> > add r3, r3, #16
> > cmp r3, r1
> > vst1.64 {d16-d17}, [r2:64]!
> > bne .L14
> >
> > and the second VLDR instruction traps with SIGILL (the value in R3 is
> > 0x10b29, odd as you'd expect, pointing into `ib'). I don't know why and
> > especially why only the second of the two (regrettably I've been unable to
> > track down an instruction reference that'd be detailed enough to specify
> > what exceptions VLDR can produce and under what conditions).
> >
>
> SIGILL means "undefined instruction". It does not mean misaligned
> address (unless the kernel is messed up) -- that would be SIGBUS.
The kernel has some code to fix up user unaligned accesses that have
caused a trap but VLDR is not among the instructions handled AFAICT.
This may well be the cause of the messup, including the difference seen
when single-stepping. And sending the wrong signal in this case would be
a kernel bug too.
I went ahead and checked the kernel log and it's indeed the case:
[28632.927062] Alignment trap: not handling instruction ed530b04 at [<000087e0>]
[28632.934692] Unhandled fault: alignment exception (0x011) at 0x00010b19
[28634.778594] Alignment trap: not handling instruction ed531b02 at [<000087e4>]
[28634.786163] Unhandled fault: alignment exception (0x001) at 0x00010b21
which correspond to (from `objdump -d'):
87e0: ed530b04 vldr d16, [r3, #-16]
87e4: ed531b02 vldr d17, [r3, #-8]
And it may well be that the kernel this board runs predates this:
commit 3dc91aff9c3ef54b15cdaf32f61f973489fe69eb
Author: Kirill A. Shutemov <kirill@shutemov.name>
Date: Thu Jul 22 13:16:49 2010 +0100
ARM: 6252/1: Use SIGBUS for unaligned access instead of SIGILL
POSIX specify to use signal SIGBUS with code BUS_ADRALN for invalid
address alignment.
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
In any case such code is not supposed to have been produced in the first
place, so don't let any kernel bugs or shortcomings distract us.
Maciej
More information about the Gcc-patches
mailing list