Я работаю над программой сборки для микроконтроллера на базе ARM Cortex-M3 (набор инструкций Thumb 2), используя GNU как .
В некоторых примерах кода я нахожу такие директивы, как .size
, .section
и .type
, которые, как я понимаю, являются директивами ELF. В качестве примера:
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
bl main
b Infinite_Loop
.size Reset_Handler, .-Reset_Handler
Директива .type
устанавливает тип символа - обычно либо% object (имеется в виду данные?), Либо% function. Я не знаю, какая разница. Не всегда включается,
Также с этим связана директива .thumb_func
. Из того, что я прочитал, кажется, что может быть эквивалентом:
.thumb
.type Symbol_Name, %function
Или это что-то совершенно другое?
.size
якобы устанавливает размер, связанный с символом. Когда это понадобится, понятия не имею. Рассчитывается ли это по умолчанию, но можно ли изменить эту директиву? Если да, то когда вы хотите переопределить?
.section
легче найти документацию, и я думаю, что имею хорошее представление о том, что он делает , но я все еще немного не уверен в использовании. Насколько я понимаю, он переключается между различными секциями ELF (text
для кода, data
для записываемых данных, bss
для неинициализированных данных, rodata
для констант и др.) И при желании определяет новые. Я предполагаю, что вы должны переключаться между ними в зависимости от того, определяете ли вы код, данные, неинициализированные данные и т. Д. Но зачем вам создавать подраздел для функции, как в приведенном выше примере?
Любая помощь с этим приветствуется. Если вы можете найти ссылки на учебные пособия или документы, которые объясняют это более подробно - желательно, понятные для новичка, - я был бы очень благодарен.
Пока что руководство Использование как оказало некоторую помощь - возможно, вы сможете извлечь из него больше, чем я, с большим количеством знаний.