strange things with ARMulator (thumb state, swi)
Nick Clifton
nickc@cambridge.redhat.com
Thu Nov 29 02:18:00 GMT 2001
Hi Adrian,
> Now, the problem is the thumb swi instruction - there seem to be
> various problems, lr and spsr seem to have bogus values for thumb.
Hmm, well the newlib C library uses the SWI interface to perform
system calls to the Angel or Demon debug interfaces and the ARM
simulator traps and emulates these SWI calls, so I believe that it
should be working.
I have not tried single stepping through a SWI call in GDB however, so
it is quite possible that this does not work. :-( Personally I would
recommend using lower level debugging techniques than a source
debugger when trying to get SWI code working. But that is just me.
In case it helps here is a quick overview of how the simulator handles
a SWI:
A Thumb SWI is first caught in ARMul_ThumbDecode() in
sim/arm/thumbemu.c where it is transformed into a ARM SWI (see case 27
around line 391). This is then transfered to ARMul_Emulate32() in
sim/arm/armemu.c where it is passed to ARMul_OSHandleSWI() defined in
sim/arm/armos.c. If the SWI value is not oneof the debug commands
then the default case will set up the registers and tell the emulator
to perform a Software Interrupt exception and follow the SWI vector.
Cheers
Nick
More information about the Binutils
mailing list