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
        .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

Reply via email to