This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ARM Simulator Bug?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]