public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c/10834: GCC for ARM 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ")))
@ 2003-05-17  9:26 dong_geming
  0 siblings, 0 replies; only message in thread
From: dong_geming @ 2003-05-17  9:26 UTC (permalink / raw)
  To: gcc-gnats; +Cc: nickc


>Number:         10834
>Category:       c
>Synopsis:       GCC for ARM 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ")))
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Sat May 17 09:26:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Adam Dong
>Release:        GCC 3.3
>Organization:
>Environment:
cygwin --host=i686-pc-cygwin  --target=arm-elf
>Description:
I cmopiled the following file with gcc 3.3 for ARM.

  /* begin of file ext_irq.c */
void ext_IRQ0_handler(void) __attribute__ ((interrupt ("IRQ")));
void ext_IRQ0_handler(void)
{
   int i = 0;
   i = i++;
}
  /* end of file ext_irq.c */

If it was Compiled with the following command:
    arm-elf-gcc -gdwarf ext_irq.c -o.\debug\ext_irq.o
then Dump the ext_irq.o, and we can get the following code:

00000000 <ext_IRQ0_handler>:
   0:	e52dc004 	str	ip, [sp, -#4]!
   4:	e1a0c00d 	mov	ip, sp
   8:	e24ee004 	sub	lr, lr, #4	; 0x4
   c:	e92dd80e 	stmdb	sp!, {r1, r2, r3, fp, ip, lr, pc}
  10:	e24cb004 	sub	fp, ip, #4	; 0x4
  14:	e24dd004 	sub	sp, sp, #4	; 0x4
  18:	e3a03000 	mov	r3, #0	; 0x0
  1c:	e50b3020 	str	r3, [fp, -#32]
  20:	e24b1020 	sub	r1, fp, #32	; 0x20
  24:	e5913000 	ldr	r3, [r1]
  28:	e1a02003 	mov	r2, r3
  2c:	e50b2020 	str	r2, [fp, -#32]
  30:	e2833001 	add	r3, r3, #1	; 0x1
  34:	e5813000 	str	r3, [r1]
  38:	e95b980e 	ldmdb	fp, {r1, r2, r3, fp, ip, pc}^


On the other way, If it was Compiled with the following command:
    arm-elf-gcc -mthumb-interwork -gdwarf ext_irq.c -o.\debug\ext_irq.o
then Dump the ext_irq.o, and we can get the following code:

00000000 <ext_IRQ0_handler>:
   0:	e52dc004 	str	ip, [sp, -#4]!
   4:	e1a0c00d 	mov	ip, sp
   8:	e24ee004 	sub	lr, lr, #4	; 0x4
   c:	e92dd80e 	stmdb	sp!, {r1, r2, r3, fp, ip, lr, pc}
  10:	e24cb004 	sub	fp, ip, #4	; 0x4
  14:	e24dd004 	sub	sp, sp, #4	; 0x4
  18:	e3a03000 	mov	r3, #0	; 0x0
  1c:	e50b3020 	str	r3, [fp, -#32]
  20:	e24b1020 	sub	r1, fp, #32	; 0x20
  24:	e5913000 	ldr	r3, [r1]
  28:	e1a02003 	mov	r2, r3
  2c:	e50b2020 	str	r2, [fp, -#32]
  30:	e2833001 	add	r3, r3, #1	; 0x1
  34:	e5813000 	str	r3, [r1]
  38:	e91b680e 	ldmdb	fp, {r1, r2, r3, fp, sp, lr}
  3c:	e89d1000 	ldmia	sp, {ip}
  40:	e25ef004 	subs	pc, lr, #4	; 0x4

*******************************
***********PROBLEM*************
*******************************
   Both of the compiled results are not correct. Because
the "sp" register is not restored correctly, It can be 
discovered easily, if we debug this codes on a E.V. board.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-05-17  9:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-17  9:26 c/10834: GCC for ARM 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ"))) dong_geming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).