ldm/stm bus error

Umesh Kalappa umesh.kalappa0@gmail.com
Mon May 18 09:06:00 GMT 2015

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.
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
--with-pkgversion='Cisco GCC c4.7.0-p1' --with-cisco-patch-level=1
--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
        .file   "test.c"
        .comm   a,5,4
        .comm   b,5,4
        .align  2
        .global main
        .type   main, %function
        @ 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

More information about the Gcc mailing list