c:\tmp>"c:\Program Files\Atmel\AVRTools\AVRToolchain\bin\avr-gcc" --version avr-gcc (AVR_8_bit_GNU_Toolchain_3.2.3_314) 4.5.1
c:\tmp>"c:\Program Files\Atmel\AVRTools\AVRToolchain\bin\avr-gcc" w.c -Os -DF_CPU=14745600UL -mmcu=atmega2561 -Wa,-adhlns=w.lst -Wl,-Map=w.map,--cref -o w.elf
w.c:
char a1[] = "abcdefghijklmnopqrstuvwxyz"; void foo1(void) { __asm( ".skip 70000,0 \n\t" ); } int main(void) { }
relevant portion of w.lss:
000000dc <__do_copy_data>: dc: 12 e0 ldi r17, 0x02 ; 2 de: a0 e0 ldi r26, 0x00 ; 0 e0: b2 e0 ldi r27, 0x02 ; 2 e2: e4 e7 ldi r30, 0x74 ; 116 e4: f2 e1 ldi r31, 0x12 ; 18 e6: 02 c0 rjmp .+4 ; 0xec <.do_copy_data_start> 000000e8 <.do_copy_data_loop>: e8: 05 90 lpm r0, Z+ ea: 0d 92 st X+, r0 000000ec <.do_copy_data_start>: ec: ac 31 cpi r26, 0x1C ; 28 ee: b1 07 cpc r27, r17 f0: d9 f7 brne .-10 ; 0xe8 <.do_copy_data_loop>
The same, when compiled using WinAVR20100110:
000000dc <__do_copy_data>: dc: 12 e0 ldi r17, 0x02 ; 2 de: a0 e0 ldi r26, 0x00 ; 0 e0: b2 e0 ldi r27, 0x02 ; 2 e2: e8 e8 ldi r30, 0x88 ; 136 e4: f2 e1 ldi r31, 0x12 ; 18 e6: 01 e0 ldi r16, 0x01 ; 1 e8: 0b bf out 0x3b, r16 ; 59 ea: 02 c0 rjmp .+4 ; 0xf0 <__do_copy_data+0x14> ec: 07 90 elpm r0, Z+ ee: 0d 92 st X+, r0 f0: ac 31 cpi r26, 0x1C ; 28 f2: b1 07 cpc r27, r17 f4: d9 f7 brne .-10 ; 0xec <__do_copy_data+0x10>
Spot two differences :-)
JW
(PS. verified by disassembling the respective lib that the error is indeed in incorrectly compiled crt)