ARM Simulator Bug?
Richard Earnshaw
rearnsha@arm.com
Tue Sep 2 12:43:00 GMT 2003
> Hi all,
>
> Has anyone else come across something similar to the below??
>
> I have a startup file embedded in a header file using inline assembly. This
> file contains the Interrupt vectors for an ARM7TDMi. The main file is compiled
> as ARM and I can simulate this perfectly.
> When I insert a BX command at the end of the inline assembly and add the
> -mthumb CL option to instruct gcc to compile the main as thumb it generates
> the elf. Then when I go to the simulator things go weird. If I place a "b ."
> command at the end of the inline assembly, I can stop gdb at this point and
> it stays at the correct point, i.e. at the b .. But if I remove the "b ." command
> the simulator goes hay-wire, i.e. Does not know where it is
>
>
> The embedded file:
>
> asm(".org 0x00\n"
> "\n"
> " b tst_start @ SVC 0x00\n"
> " b tst_start @ Undfd InstrUND 0x04\n"
> " b tst_start @ SWI _StartupSVC 0x08\n"
> " b tst_start @ Pre Abort ABORT 0x0C\n"
> " b tst_start @ Data AbortABORT 0x10\n"
> " b tst_start\n"
> " b tst_start @ IRQ _StartupIRQ 0x18\n"
> " b tst_start @ FIQ _Startup FIQ 0x1C\n"
> ".global tst_start\n"
> "tst_start: \n"
> " mov sp,#0x12000\n"
> " adr R0,tmp+1\n"
> " bx R0\n" !!!!!!!!! Problem Line
> ".code 16\n"
> "tmp:\n"
> "\n");
>
>
> My main file:
>
>
> #include "tester.h"
>
> int main()
> {
> unsigned int b=0x01;
> unsigned int count = 0x00;
>
> while ( b != 0x00)
> {
> count++;
> }
> return 0;
>
> }
>
> My compile script:
>
> arm-elf-gcc.exe -mthumb \
> $1.c -mthumb-interwork -mcpu=arm7tdmi\
> -g -Wall -nostartfiles -mlittle-endian -save-temps -O$2 \
> -Wl,-T /c/tst/scripts/clink.x -o $1.elf
>
> I have tried this with the same result with gcc3.2.3, gcc version 3.3.2 20030825
> and gdb snapshots from 10-6-2003 and 01-09-2003
>
> Any ideas?
It's more likely to be the way you are trying to get into Thumb state. Try
adr r0, __start_of_thumb
bx r0
.code 16
.global __start_of_thumb
.thumb_func
__start_of_thumb:
This is really brokenness in the way gas implements ARM and Thumb code
areas, but it's hard to fix properly until GAS starts using mapping
symbols.
R.
More information about the Gdb
mailing list