Получение сборочного вывода из GCC / Clang в режиме LTO - PullRequest
2 голосов
/ 31 октября 2019

Обычно можно получить оптимизированный вывод ассемблера GCC из исходного файла, используя флаг -S в GCC и Clang, как в следующем примере.

gcc -O3 -S -c -o foo.s foo.c

Но предположим,Я компилирую все мои исходные файлы, используя -O3 -flto, чтобы включить оптимизацию всей программы во время компоновки, и хочу увидеть финальную сгенерированную компилятором оптимизированную сборку для функции и / или посмотреть, где / как код вставляется.

Результатом компиляции является набор .o файлов, которые на самом деле являются IR-файлами, замаскированными под объектные файлы, как и ожидалось. При связывании исполняемой или разделяемой библиотеки они затем объединяются, оптимизируются как единое целое, а затем компилируются в целевой двоичный файл.

Но что, если я хочу получить вывод сборки из этой процедуры? То есть источник сборки, который выдает после оптимизации времени соединения, во время компиляции IR в сборку и перед фактической сборкой и связыванием в конечный исполняемый файл.

Iпопробовал просто добавить флаг -S к шагу ссылки, но это не сработало.

Я знаю, что разборка исполняемого файла возможна, даже чередование с исходным кодом, но иногда лучше смотреть нафактическая сборка, сгенерированная компилятором, особенно с -fverbose-asm.

...