This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/26664] use of rjmp on devices with more than 2kb flash
- From: "hochstein at algo dot informatik dot tu-darmstadt dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Mar 2006 08:27:13 -0000
- Subject: [Bug target/26664] use of rjmp on devices with more than 2kb flash
- References: <bug-26664-6286@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from hochstein at algo dot informatik dot tu-darmstadt dot de 2006-03-14 08:27 -------
This is a GCC bug although my first test program did not show this.
Consider this program:
void a()
{
}
void b()
{
__asm("nop\n nop\n nop\n nop\n nop\n nop");
// ...
// (repeat this line 500 times)
}
int main(){
a();
}
Compile with
avr-gcc -mmcu=atmega8515 -c jmp-test.c
Now avr-objdump shows this:
Disassembly of section .text:
00000000 <a>:
0: cf 93 push r28
2: df 93 push r29
4: cd b7 in r28, 0x3d ; 61
6: de b7 in r29, 0x3e ; 62
8: df 91 pop r29
a: cf 91 pop r28
c: 08 95 ret
[...]
0000178c <main>:
178c: c0 e0 ldi r28, 0x00 ; 0
178e: d0 e0 ldi r29, 0x00 ; 0
1790: de bf out 0x3e, r29 ; 62
1792: cd bf out 0x3d, r28 ; 61
1794: 35 d4 rcall .+2154 ; 0x2000 <main+0x874>
1796: 00 c0 rjmp .+0 ; 0x1798 <main+0xc>
The call to a() goes into nirvana since a() cannot be reached by
"rcall". "call" must be used instead.
I suppose there is an analogous example for "rjmp".
--
hochstein at algo dot informatik dot tu-darmstadt dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26664