В 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, и вы получите его.

Я думаю, что это просто символ, это название для раздела, и это имя упоминается в скрипте линкера. Вы сказали, что видели это в файле запуска микропроцессора. Из конечно, связывание файлов запуска микропроцессора требует сценария компоновщика. И это имя просто используется для справки, что может звучать странно, но реально.