Когда GAS ELF нужны директивы .type, .thumb, .size и .section?

Я работаю над программой сборки для микроконтроллера на базе 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 для констант и др.) И при желании определяет новые. Я предполагаю, что вы должны переключаться между ними в зависимости от того, определяете ли вы код, данные, неинициализированные данные и т. Д. Но зачем вам создавать подраздел для функции, как в приведенном выше примере?


Любая помощь с этим приветствуется. Если вы можете найти ссылки на учебные пособия или документы, которые объясняют это более подробно - желательно, понятные для новичка, - я был бы очень благодарен.

Пока что руководство Использование как оказало некоторую помощь - возможно, вы сможете извлечь из него больше, чем я, с большим количеством знаний.

15
задан Ciro Santilli 新疆改造中心法轮功六四事件 15 July 2015 в 12:27
поделиться