http://gcc.gnu.org/viewcvs?view=revision&revision=184481
Committed to make dragging in startup code more precise. Objects named like __gnu_lto_slim are just markers for the LTO machinery; there is no need to trigger startup code for them, see also http://gcc.gnu.org/ml/gcc/2012-02/msg00391.html Johann PR target/18145 * config/avr/avr.c (avr_asm_output_aligned_decl_common): Skip setting avr_need_clear_bss_p for __gnu_lto* symbols. Index: config/avr/avr.c =================================================================== --- config/avr/avr.c (revision 184475) +++ config/avr/avr.c (working copy) @@ -7245,7 +7245,11 @@ avr_asm_output_aligned_decl_common (FILE unsigned HOST_WIDE_INT size, unsigned int align, bool local_p) { - avr_need_clear_bss_p = true; + /* __gnu_lto_v1 etc. are just markers for the linker injected by toplev.c. + There is no need to trigger __do_clear_bss code for them. */ + + if (!STR_PREFIX_P (name, "__gnu_lto")) + avr_need_clear_bss_p = true; if (local_p) ASM_OUTPUT_ALIGNED_LOCAL (stream, name, size, align);