William "Chops" Westfield schrieb:

A week or so ago I mentioned that avr-gcc 4.5.3 caused the optiboot
bootloader (used by Arduino and etc) to grow 22 bytes (from 500 bytes
to 522 bytes, pushing it over the size that it needs to be.)


Any thoughts as to what might be going on here?

Thanks WestfW

I tested the code with avr-gcc 4.5 and command line options -Os -mmcu=atmega8

With the attributes, the object size is 54 bytes.
Without the attributes the object size is 64 bytes.

If you get > 500 bytes you should turn on optimization.

The difference between 54 and 64 is because main's prologue is not void if it's not naked.

Herer is a diff between the respective assembler files:

 __SP_L__ = 0x3d
 __tmp_reg__ = 0
 __zero_reg__ = 1
-       .section        .init9,"ax",@progbits
+       .text
 .global        main
        .type   main, @function
 main:
-/* prologue: naked */
+       push r29
+       push r28
+       push __tmp_reg__
+       in r28,__SP_L__
+       in r29,__SP_H__
+/* prologue: function */
 /* frame size = 1 */
-/* stack size = 0 */
-.L__stack_usage = 0
+/* stack size = 3 */
+.L__stack_usage = 3
 .L7:
        rcall getch
        cpi r24,lo8(24)

So you see it's all about prologue and naked, the code is the same.

Johann

_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to