Что означает флаг "aw" в атрибуте section? - PullRequest
12 голосов
/ 06 июня 2011

В следующей строке кода (которая объявляет глобальную переменную),

unsigned int __attribute__((section(".myVarSection,\"aw\",@nobits#"))) myVar;

что означает флаг "aw"?

Насколько я понимаю, флаг nobits предотвратит инициализацию переменной до нуля, но я изо всех сил пытаюсь найти информацию о флаге "aw".

Кроме того, какое значение имеют @ и # вокруг флага nobits?

Ответы [ 2 ]

17 голосов
/ 25 июля 2012

Атрибут section("section-name") помещает переменную в определенный раздел, создавая следующую строку ассемблера:

.section    section-name,"aw",@progbits

Когда вы устанавливаете section-name в ".myVarSection,\"aw\",@nobits#", вы используетевид " внедрение кода " в GCC для получения:

.section    .myVarSection,"aw",@nobits#,"aw",@progbits

Обратите внимание, что знак # начинает однострочный комментарий.

См. GNUРуководство по сборке для полного описания директивы .section.Общий синтаксис:

.section name [, "flags"[, @type[,flag_specific_arguments]]]

, поэтому "aw" - это флаги:

  • a : раздел выделяется
  • w: раздел доступен для записи

и @nobits является типом:

  • @ nobits : раздел не содержит данных (т. Е.раздел занимает только пространство)

Все вышеперечисленное также применимо к функциям , а не только к переменным.

4 голосов
/ 06 июня 2011

что означает флаг "aw"?

Это означает, что раздел может быть размещен (то есть загружен в память во время выполнения) и доступен для записи (и, конечно, для чтения).

Насколько я понимаю, флаг nobits будет препятствовать инициализации переменной в ноль, но я изо всех сил пытаюсь найти информацию о флаге "aw".

Кроме того, чточто означает @ и # вокруг флага nobits?

@ nobits (@ это просто часть имени) означает, что раздел не хранится в изображении на диске, он существует тольково время выполнения (и он заполняется нулями при запуске). Символ

# начинает комментарий, поэтому все, что компилятор добавит в дополнение к указанному, будет проигнорировано.

...