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
>