GNU как расширение директивы .macro - PullRequest
12 голосов
/ 30 января 2012

Есть ли способ, чтобы GNU как расширял только директивы .macro в файле .S, создавая другой файл .S без них? Подобно тому, что gcc -E делает с кодом C.

Обратите внимание, что речь идет о директиве .macro на ассемблере, как в следующем коде, не о макросах в стиле C #define, которые можно развернуть с помощью cpp.

.macro my_macro src, so, dest
    movl    \so+10(\src), %r8d

Ответы [ 2 ]

3 голосов
/ 06 декабря 2016

GNU as препроцессора не обрабатывает .include и .macro, поскольку все, начинающееся с точки, на самом деле является директивой ассемблера;таким образом, расширение макроса выполняется вдоль сборки программы и не может быть выполнено отдельно, по крайней мере, как.

У вас есть следующие опции:

  • Поиск в Google чужого скрипта
  • Напишите свое собственное (кажется хорошим упражнением в программировании)
  • Переключение на макросы в стиле C или M4

Обработка макросов в стиле C выполняется по умолчанию при использовании *Расширение 1017 * (прописные) для файлов сборки, которые вы используете для подачи газа, и препроцессор C также может быть вызван автономно с помощью команды cpp

0 голосов
/ 30 января 2012

Возможно, вы могли бы использовать cpp для оценки макросов:

> cpp -P file.S

или собрать после расширения макроса:

> cpp -P file.S | as -o file.o

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...