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