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