This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: ARM Simulator Bug?
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: mckennad at esatclear dot ie
- Cc: gdb at sources dot redhat dot com, insight at sources dot redhat dot com, Richard dot Earnshaw at arm dot com
- Date: Tue, 02 Sep 2003 13:43:07 +0100
- Subject: Re: ARM Simulator Bug?
- Organization: ARM Ltd.
- Reply-to: Richard dot Earnshaw at arm dot com
> 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.