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