I found a bug in gcc compiler. I'm trying to cross compile simple program using debian package avr-gcc (gcc version 4.1.0) using command
avr-gcc -mmcu=attiny2313 -Wall -Os -c test.c I have problem with very simple code when using array bigger than 128 bytes. char text[] = "AB... ....YZ"; // 128 characters char *pointer = text; while (*pointer) { UDR = *pointer; while ( !(UCSRA & (1<<UDRE))); pointer++; } This code is not working. When I remove 128th character it's OK. The problem is in the pointer. I tried to make asm from the working and non-working sources using avr-gcc -mmcu=attiny2313 -Wall -Os -S test.c and the important part of diff is just < ldi r24,lo8(-127) --- > ldi r24,lo8(-128) There is no other code working with the higher byte. r* registers are just 8bit so it can't work at all. -- Summary: Wrong code generation when cross compile for attiny2313 Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: p dot mateja at sh dot cvut dot cz GCC host triplet: i686-pc-linux-gnu GCC target triplet: attiny2313 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27556