Черепаха чередующийся источник и сборка
Интересно, можно ли генерировать чередующийся источник и сборку из clang?
Я ищу что-то, что эквивалентно команде gcc (как показано на http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/)
gcc -Wa,-adhln -g source_code.c > assembly_list.s
Я посетил ссылку: Как получить вывод ассемблера из источника C/С++ в gcc?, но он дошел до списка сборки, но не чередовался.
Кроме того, Visual Studio дает вам довольно приятный сборный сборник, подробности здесь: Как просмотреть сборку за кодом с помощью Visual С++?
Спасибо за помощь.
Sarang
Ответы
Ответ 1
Кажется, в прошлом году сообщалось об ошибке: http://llvm.org/bugs/show_bug.cgi?id=16647
Bug 16647 - No option to produce mixed source + assembly listing?
Так как он все еще NEW
, я думаю, что clang еще не поддерживается.
Как альтернатива, как насчет компиляции вашего кода, а затем используйте objdump -S
? Формат вывода несколько похож...
Ответ 2
По состоянию на август 2016 года ошибка, отмеченная @dragosht, остается открытой. Тем не менее, существует обходное решение, предлагаемое связанная ошибка 17465: clang -no-integrated-as -Xassembler -adhln
. Он отключает встроенный ассемблер и вызывает внешний ассемблер, который, как мы надеемся, поддерживает варианты создания списков.
Это работает нормально в Linux, но не работает в Mac OS X (по состоянию на 10.11.6). Проблема в том, что даже внешний ассемблер в OS X не поддерживает параметры создания листинга - вы можете проверить это с помощью man as
.
objdump -S
- это альтернатива, которая также хорошо работает в Linux, но альтернатива objdump для Mac OS X - otool, которая обеспечивает разборку, но не чередует источник. Надеюсь, что это изменится в ближайшее время, потому что otool, похоже, уже на пороге, а llvm развивает собственный objdump. См. man llvm-otool
.
Наконец, для OS X лучший вариант, похоже, использует gobjdump -S
, из binutils. Его можно установить с помощью MacPorts или brew.