Черепаха чередующийся источник и сборка

Интересно, можно ли генерировать чередующийся источник и сборку из 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.