Обычно можно получить оптимизированный вывод ассемблера GCC из исходного файла, используя флаг -S
в GCC и Clang, как в следующем примере.
gcc -O3 -S -c -o foo.s foo.c
Но предположим,Я компилирую все мои исходные файлы, используя -O3 -flto
, чтобы включить оптимизацию всей программы во время компоновки, и хочу увидеть финальную сгенерированную компилятором оптимизированную сборку для функции и / или посмотреть, где / как код вставляется.
Результатом компиляции является набор .o
файлов, которые на самом деле являются IR-файлами, замаскированными под объектные файлы, как и ожидалось. При связывании исполняемой или разделяемой библиотеки они затем объединяются, оптимизируются как единое целое, а затем компилируются в целевой двоичный файл.
Но что, если я хочу получить вывод сборки из этой процедуры? То есть источник сборки, который выдает после оптимизации времени соединения, во время компиляции IR в сборку и перед фактической сборкой и связыванием в конечный исполняемый файл.
Iпопробовал просто добавить флаг -S
к шагу ссылки, но это не сработало.
Я знаю, что разборка исполняемого файла возможна, даже чередование с исходным кодом, но иногда лучше смотреть нафактическая сборка, сгенерированная компилятором, особенно с -fverbose-asm
.