Question about unaligned memory access on ARMv7
Hi,
My linux kernel complained about the user space binaries doing unaligned memory access.
Here is one of the log:
[ 1056.522396] Alignment trap: rsyslogd (1400) PC=0x4004450e
Instr=0xe8541f00 Address=0x409f84f5 FSR 0x001
$ echo "0xe8 0x54 0x1f 0x00"|/opt/local/ibos/bin/llvm-mc --disassemble
-triple=thumb-apple-darwin9
strb r0, [r5, r3]
movs r7, r3I'm using the NVIDIA Harmony board, which has a Cortex-A9MP dual core CPU. According to the specification, this instruction is legitimate and shouldn't fault.
I checked in arch/arm/mm/alignment.c, the function do_alignment_t32_to_handler will ignore this because the CPU should be able to handle it.
I also checked with the newest version of arch/arm/mm/alignment and I noticed no changes.
Am I missing some erratas that can possibly fix this bug?
PS: I'm using a sufficiently old (2.6.32.9) kernel and I'm unable to update it because a bug in the bootloader. :-(
Any suggestions are appreciated.
Cheers,
Haohui
Quoted 9 lines · Haohui Mai
Hi,
My linux kernel complained about the user space binaries doing unaligned memory access.
Here is one of the log:
[ 1056.522396] Alignment trap: rsyslogd (1400) PC=0x4004450eInstr=0xe8541f00 Address=0x409f84f5 FSR
0x001
That is an LDREX instruction. It does not support unaligned addresses.
Quoted 4 lines
$ echo "0xe8 0x54 0x1f 0x00"|/opt/local/ibos/bin/llvm-mc --disassemble
-triple=thumb-apple-darwin9
strb r0, [r5, r3]
movs r7, r3You got the byte order wrong there.
Quoted 1 line
Any suggestions are appreciated.
Fix your application.
Signature · 2 lines
M?ns Rullg?rd mans at mansr.com