В GNU Assembler, что означает точка в начале имени?
ниже приведена строка из файла запуска микропроцессора, предназначенная для ввода в GNU assembler as:
.section .isr_vector,"a",%progbits
делает точку в начале имени .isr_vector
означает что-нибудь особенное? PS: на это имя ссылается GNU linker ld.
EDIT:
Это имя также отображается в выводе readelf как Заголовок Раздела:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
...
[ 1] .isr_vector PROGBITS 08000000 008000 0001ac 00 A 0 0 1
2 ответов
точка, предшествующая имени, является либо директивы ассемблера или локальная метка.
An директивы ассемблера говорит as
чтобы сделать что-то особенное, например .text
говорит ему генерировать данные в текстовом разделе объектного файла (для таких вещей, как код и литералы, которые нельзя изменить). Есть также директивы, такие как .space
которые говорят ему выделить пустое пространство в объектном файле, это часто используется для выделения пространства в секция bss.
С другой стороны, у нас есть локальные метки как .L1
которые используются в коде, но не предназначены для экспорта в объектный файл и должны быть скрыты из таблицы символов.
однако я не согласен с тем, что это локальная переменная. Только символы с префиксом .L
имею в виду локальные переменные.(Соглашение об именах для локального символа является переносимым, но некоторые соглашения зависят от машины). Тип info as
перейдите к главе Symbols
и раздел Symbol-names
, и вы получите его.
Я думаю, что это просто символ, это название для раздела, и это имя упоминается в скрипте линкера. Вы сказали, что видели это в файле запуска микропроцессора. Из конечно, связывание файлов запуска микропроцессора требует сценария компоновщика. И это имя просто используется для справки, что может звучать странно, но реально.