On 31 May 2013 00:34, William Mills <wmi...@ti.com> wrote: > We are using the Linaro prebuilt binary 2013.03 toolchain. > We have a program that does a memcpy of 6 bytes and the source and > destination pointers are both 6 byte arrays (through multiple levels of > struct & union etc). > At -O2 we get the memcpy inlined. > The code area in question is: > 22840: f8b7 2054 ldrh.w r2, [r7, #84] ; 0x54 > 22844: f853 1d12 ldr.w r1, [r3, #-18]! > 22848: f042 0202 orr.w r2, r2, #2 > 2284c: 889b ldrh r3, [r3, #4] > 2284e: b292 uxth r2, r2 > ->22850: f8c7 101a str.w r1, [r7, #26] > 22854: f8a7 2054 strh.w r2, [r7, #84] ; 0x54 > 22858: 83fb strh r3, [r7, #30] > 2285a: f8da 3000 ldr.w r3, [sl] > > And we get an alignment fault at the str.w marked above. > Looking at the types involved and their location in the containing > structures I don't see how the compiler could think that the destination was > word aligned > (I believe it is guaranteed that dest % 8 == 6) > > There are no -march -mcpu or -mtune params passed to the compiler. The code > is running in user space on a A15.
So what is the default target for the compiler? gcc -v should say how it was configured. > Basic question before we look further: > Is the compiler assuming that cp15 SCTLR.A is 0 so that it is free to > generate unaligned loads and stores? If targeting ARMv6 or later, yes. This is the reset default and the recommended setting. > If the answer to the above is "no" we can isolate the code more and bring it > back to the list. If you, ill-advisedly, enable strict alignment checking, you must compile with -mno-unaligned-access. -- Mans Rullgard / mru _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain