LINUX.ORG.RU

Как узнать, что занимает слишком много места в ELF-файле

 , ,


0

2

Пишу тут самодельный набор Makefile-ов для сборки прошивки для STM32 с использованием ChibiOS (не хочу использовать её систему сборки по некоторым причинам). После линковки что-то отжирает очень много места в секции .bss.

   text	   data	    bss	    dec	    hex	filename
   5116	    448	 131076	 136640	  215c0	build/controller.elf

А как узнать, что? Никаких огромных массивов не объявлял.

Символы из секции .bss:

$ arm-none-eabi-objdump -j .bss -t build/controller.elf 

build/controller.elf:     file format elf32-littlearm

SYMBOL TABLE:
20000800 l    d  .bss	00000000 .bss
20000800 l     O .bss	00000004 endmem
20000804 l     O .bss	00000004 nextmem
20000808 l     O .bss	00000020 default_heap
20000828 g     O .bss	00000001 running
20000a08 g     O .bss	00000078 SD2
20000800 g       .bss	00000000 _bss_start
20000a80 g       .bss	00000000 _bss_end
20000830 g     O .bss	000001d8 ch

Вроде ничего криминального нет. Опять же пробежался по объектным файлам, из которых собирается ELF - в BSS они очень мало должны занимать.

★★★★★

Последнее исправление: KivApple (всего исправлений: 1)

Т.к. твой elf, скорей всего более-менее прямо мапится в image, там скорей всего посто нули от развёрнутого блока:

In embedded software, the bss segment is mapped into memory *.

PS: мимокрокодил

beastie ★★★★★
()
Ответ на: комментарий от beastie

Вот, кстати, размеры всех объектных файлов - там неоткуда набраться десяткам килобайт - http://pastebin.com/uihSjJy2

Команда линковки:

arm-none-eabi-gcc ... куча файлов ... -nostartfiles -ffunction-sections -fdata-sections -fno-common -mthumb -mno-thumb-interwork -Wl,-Map=./build/controller.map,--library-path=./platforms/chibios/ChibiOS/os/common/ports/ARMCMx/compilers/GCC/ld/..,--script=./platforms/chibios/ChibiOS/os/common/ports/ARMCMx/compilers/GCC/ld/STM32F407xG.ld,--defsym=__process_stack_size__=0x400,--defsym=__main_stack_size__=0x400,--gc-sections -lm -o build/controller.elf
KivApple ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Я тут пилю свою систему сборки с модульностью. Хочу чтобы был каталог modules, в который я пихаю подкаталоги драйверов типа MPU6050, DS1307, USB CDC и т. д. А потом в скрипте сборки выбираю, что хочу получить в прошивке. А ещё чтобы платформы поддерживаемые были не только микроконтроллеры (их поддержку даст мне ChibiOS), но и Linux (на всяких одноплатниках вполне себе выведены GPIO и различные интерфейсы, ну не RTOS, да, но не всегда же нужен жёсткий риалтайм). Соответственно, модули работают через драйвера выбранной платформы.

В итоге хочу получить по максимуму повторное использование кода.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)

правда давно было и не на STM: если объектники сначала ar`ом собрать в lib, а потом статически линковать «всех чохом» то итоговый бинарник получался меньше.

MKuznetsov ★★★★★
()
firmware.sym: firmware.elf
	@printf "$(COLOR_CYAN)[$(TYPE)]$(COLOR_NORMAL) Generating symbols file ...\n"
	@$(NM) -A -l -C -td --reverse-sort --size-sort $< > $@


$ head firmware.sym
firmware.elf:00000842 T tfp_format	/home/work/st/tinyprintf/tinyprintf.c:253
firmware.elf:00000832 T STM32_Configuration	/home/work/st.c:123
firmware.elf:00000716 T mybigfn	/home/work/st.c:174
firmware.elf:00000682 T __divdi3
firmware.elf:00000634 T __subdf3
firmware.elf:00000634 T __aeabi_dsub
firmware.elf:00000630 T __aeabi_dadd
firmware.elf:00000630 T __adddf3

Где число, размер в байтах.

joy4eg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.