Любопытный глюк в MS VC с ассемблерным листингом и /GL
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 03.04.21 15:22
Оценка:
Сегодня обнаружил в MS VS/VC забавный глюк. Если указать компилятору ключ /GL (link-time code generation), то ключи /FAs, /FAc, /FAsc перестают создавать ассемблерные листинги. Наблюдается с компиляторами с 13.00 до 19.28 (из последней VS 2019). Логика этого совершенно непонятна, но вот так.

Но, если компилятор запускается из-под студии, то в конфигурациях "Application" и "DLL" ассемблерные листинги волшебным образом создаются, а вот в конфигурации "Static library" — нет. Понятно, что библиотеке LTCG, как правило, не нужно, а нередко и вредно, но я на автомате включил LTCG для всех проектов, после чего обнаружил, что листинги библиотеки перестали создаваться.

Командные строки компилятора идентичны с точностью до автоматически вставляемых студией определений вроде "/D_WINDLL". Если скопировать командную строку из лога студии и подсунуть ее CL, хоть непосредственно, хоть в RSP-файле — листинги не создаются, если присутствует /GL. Когда компилятор запускается студией с той же командной строкой — создаются.

Такое впечатление, что студия определяет какие-то переменные окружения, на которые реагирует компилятор. Вот только зачем вся эта шняга — .
Re: Любопытный глюк в MS VC с ассемблерным листингом и /GL
От: cserg  
Дата: 03.04.21 15:49
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>... Логика этого совершенно непонятна, но вот так.

Ну, возможно, что если LTCG включен, то объектные файлы на самом деле содержат не объектный код, а промежуточное представление компилятора. dumpbin /disasm <objfile> показывает ассемблерный листинг?
Re[2]: Любопытный глюк в MS VC с ассемблерным листингом и /GL
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 03.04.21 15:57
Оценка:
Здравствуйте, cserg, Вы писали:

C>Ну, возможно, что если LTCG включен, то объектные файлы на самом деле содержат не объектный код, а промежуточное представление компилятора.


В таком случае, что они содержат, когда компилятор запускается из-под студии, и таки создает вполне кошерные ассемблерные листинги?
Re[3]: Любопытный глюк в MS VC с ассемблерным листингом и /GL
От: cserg  
Дата: 03.04.21 16:17
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В таком случае, что они содержат, когда компилятор запускается из-под студии, и таки создает вполне кошерные ассемблерные листинги?

Например, здесь пишут следующее:

Well, things are actually quite simple. When you build a translation unit the frontend translates the translation unit into a high-level intermediate representation. Typically, several compiler phases lowering the IR until it is eventually written to a COFF object file. When you build a translation unit with /GL, the compiler simply dumps the IR to disk (I'm not sure how this is handled in VC++, but IRs are typically quite complex and versioning is a bit of a pain so you sometimes simply tie it to the build number).

Я сам это не проверял. Лень.
Re[4]: Любопытный глюк в MS VC с ассемблерным листингом и /GL
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 04.04.21 00:55
Оценка:
Здравствуйте, cserg, Вы писали:

C>Например, здесь пишут


Это все понятно. Но вряд ли ребята из MS всерьез полагали, что кто-то, включив LTCG, возжелает затем использовать ассемблерные листинги для побайтного сравнения кода. В них ведь есть и другая информация, которая может помочь при контроле/отладке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.