question aboue ARM code generation?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

   I am build vxWorks for ARM 920t, using gcc 3.4.4 which I think is
slightly modified by WindRiver, it accepts the -t5 and -t4 options
which I don't find in the gcc user manual. Code generation with -t5
option and without -t5 option is different. here is my test code:

void AT91USIntRx(AT91_US_CHAN *pChan)
{
	char inChar;
	inChar = pChan->regs->dbgu_rhr;
	inChar = dbgu->dbgu_rhr;
	putc(inChar);
	(*pChan->putRcvChar)(pChan->putRcvArg, inChar);
}

objdump results( complied with -t5 option):

(*pChan->putRcvChar)(pChan->putRcvArg, inChar);

20005ca0:	e51b3010 	ldr	r3, [fp, #-16]
20005ca4:	e51b2010 	ldr	r2, [fp, #-16]
20005ca8:	e55b1011 	ldrb	r1, [fp, #-17]
20005cac:	e5933008 	ldr	r3, [r3, #8]
20005cb0:	e5920010 	ldr	r0, [r2, #16]
20005cb4:	e12fff33 	blx	r3


when executing the blx instruction, the application is out of control!

objdump results( complied without -t5 option):

(*pChan->putRcvChar)(pChan->putRcvArg, inChar);

20005ca8:	e51b3010 	ldr	r3, [fp, #-16]
20005cac:	e51b2010 	ldr	r2, [fp, #-16]
20005cb0:	e55b1011 	ldrb	r1, [fp, #-17]
20005cb4:	e5933008 	ldr	r3, [r3, #8]
20005cb8:	e5920010 	ldr	r0, [r2, #16]
20005cbc:	e1a0e00f 	mov	lr, pc
20005cc0:	e1a0f003 	mov	pc, r3

this version works very well. It seems the 'blx' causes CPU into thumb
state which vxWorks does not support. why this happen? blx can not be
used in ARM instructions?

Maybe it is not proper to send this email here, but I really need help.

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux