On 18/05/15 10:05, Umesh Kalappa wrote: > Hi All, > > Getting a bus/hard error for the below case ,make sense since ldm/stm > expects the address to be word aligned . > > bash-4.1$ cat test.c > struct test > { > char c; > int i; > } __attribute__((packed)); > > struct test a,b; > > int main() > { > a =b ; //here compiler is not sure that a or b is word aligned > return a.i; > } > > bash-4.1$ arm-eabi-gcc -v > Using built-in specs. > COLLECT_GCC=arm-eabi-gcc > COLLECT_LTO_WRAPPER=/nobackup/ukalappa/build/gcc/mv-ga/c4.7.0-p1/x86_64-linux/libexec/gcc/arm-eabi/4.7.0/lto-wrapper > Target: arm-eabi > Configured with: /nobackup/ukalappa/src/gcc/mv-ga/gcc/configure > --srcdir=/nobackup/ukalappa/src/gcc/mv-ga/gcc --build=x86_64-linux > --target=arm-eabi --host=x86_64-linux > --prefix=/nobackup/ukalappa/build/gcc/mv-ga/c4.7.0-p1 > --exec-prefix=/nobackup/ukalappa/build/gcc/mv-ga/c4.7.0-p1/x86_64-linux > --with-pkgversion='Cisco GCC c4.7.0-p1' --with-cisco-patch-level=1 > --with-cisco-patch-level-minor=0 > --with-bugurl=http://wwwin.cisco.com/it/services/ > --disable-maintainer-mode --enable-languages=c,c++ --disable-nls > Thread model: single > gcc version 4.7.0 > > bash-4.1$ ./arm-eabi-gcc -march=armv7 -mthumb -S test.c > > bash-4.1$ cat test.s > .syntax unified > .arch armv7 > .fpu softvfp > .eabi_attribute 20, 1 > .eabi_attribute 21, 1 > .eabi_attribute 23, 3 > .eabi_attribute 24, 1 > .eabi_attribute 25, 1 > .eabi_attribute 26, 1 > .eabi_attribute 30, 6 > .eabi_attribute 34, 1 > .eabi_attribute 18, 4 > .thumb > .file "test.c" > .comm a,5,4 > .comm b,5,4
The above two lines create (common) instances of a and b that are 4-byte aligned, so the LDM should not be faulting in this case, unless your binutils have ignored the alignment constraints. I don't think the compiler has done the wrong thing here. R. > .text > .align 2 > .global main > .thumb > .thumb_func > .type main, %function > main: > @ args = 0, pretend = 0, frame = 0 > @ frame_needed = 1, uses_anonymous_args = 0 > @ link register save eliminated. > push {r7} > add r7, sp, #0 > movw r3, #:lower16:a > movt r3, #:upper16:a > movw r2, #:lower16:b > movt r2, #:upper16:b > ldmia r2, {r0, r1} //Bus error > str r0, [r3] > adds r3, r3, #4 > strb r1, [r3] > movw r3, #:lower16:a > movt r3, #:upper16:a > ldr r3, [r3, #1] @ unaligned > mov r0, r3 > mov sp, r7 > pop {r7} > bx lr > .size main, .-main > > > Arm states that ldm/stm should be word aligned and generating ldm/stm > in the above case is the compiler error/bug ,do you guys agree with me > or i'm missing something here ? > > > Thank you > ~Umesh >