поробывал своей сборкой.
собираю код состоящий из одного пустого main + 2 функции которые заведомо не используются чтоб проверить -Wl,-gc-sections + -ffunction-sections -fdata-sections.
стотрб листинг - что с -lprintf_flt что без - лишнего кода нет:
Код
#include <string.h>
void b(char *b, char *d, char f)
{
char count = f;
do
{
*(d++) = *(b++);
} while ( f-- );
}
void cpy ( char* x , char* y , size_t s )
{
if ( !s ) return;
size_t t = s;
do
{
*(y++) = *(x++);
}
while( --t );
}
int main ()
{
return 1;
}
на выходе
avr-gcc -mmcu=atmega32 a.c -ggdb3 -Os -lprintf_flt -Wl,-gc-sections -ffunction-sections -fdata-sections
avr-objdump -h -C -S a.out > a.txt
Код
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000009c 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .stab 000006b4 00000000 00000000 000000f0 2**2
CONTENTS, READONLY, DEBUGGING
2 .stabstr 00000067 00000000 00000000 000007a4 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_aranges 00000030 00000000 00000000 0000080b 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 00000029 00000000 00000000 0000083b 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00000106 00000000 00000000 00000864 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000000ac 00000000 00000000 0000096a 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000129 00000000 00000000 00000a16 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000040 00000000 00000000 00000b40 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 0000006a 00000000 00000000 00000b80 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000000c3 00000000 00000000 00000bea 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_macinfo 00001883 00000000 00000000 00000cad 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_pubtypes 0000001d 00000000 00000000 00002530 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 00000020 00000000 00000000 0000254d 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
size_t t = s;
do
{
*(y++) = *(x++);
}
while( --t );
0: 0c 94 2a 00 jmp 0x54; 0x54 <__ctors_end>
4: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
8: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
c: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
10: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
14: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
18: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
1c: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
20: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
24: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
28: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
2c: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
30: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
34: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
38: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
3c: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
40: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
44: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
48: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
4c: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
50: 0c 94 47 00 jmp 0x8e; 0x8e <__bad_interrupt>
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1; 63
58: cf e5 ldi r28, 0x5F; 95
5a: d8 e0 ldi r29, 0x08; 8
5c: de bf out 0x3e, r29; 62
5e: cd bf out 0x3d, r28; 61
00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00; 0
62: a0 e6 ldi r26, 0x60; 96
64: b0 e0 ldi r27, 0x00; 0
66: ec e9 ldi r30, 0x9C; 156
68: f0 e0 ldi r31, 0x00; 0
6a: 02 c0 rjmp .+4 ; 0x70 <__do_copy_data+0x10>
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
70: a0 36 cpi r26, 0x60; 96
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <__do_copy_data+0xc>
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00; 0
78: a0 e6 ldi r26, 0x60; 96
7a: b0 e0 ldi r27, 0x00; 0
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a0 36 cpi r26, 0x60; 96
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 49 00 call 0x92; 0x92 <main>
8a: 0c 94 4c 00 jmp 0x98; 0x98 <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0; 0x0 <__vectors>
00000092 <main>:
}
int main ()
{
return 1;
92: 81 e0 ldi r24, 0x01; 1
94: 90 e0 ldi r25, 0x00; 0
96: 08 95 ret
00000098 <_exit>:
98: f8 94 cli
0000009a <__stop_program>:
9a: ff cf rjmp .-2 ; 0x9a <__stop_program>
вродебы так и должно работать. видимо всетаки -lprintf_flt у Вас особенная