Как узнать, какие функции НЕ были встроены - PullRequest
9 голосов
/ 08 февраля 2012

Есть ли способ получить список функций, которые нигде не были встроены?Либо путем передачи параметра в gcc, либо путем проверки двоичного файла?

РЕДАКТИРОВАТЬ: я знаю, как явно попросить функцию не быть встроенным с помощью встроенного атрибута gcc noinline.

Ответы [ 4 ]

6 голосов
/ 09 февраля 2012

Добавьте -fdump-ipa-inline к параметрам вашего компилятора.

Grep файл yoursourcefile.inline, который создается рядом с объектным файлом для "Рассматриваемого встроенного кандидата", чтобы выяснить все функции, которые рассматривал компилятор встраивание.

Grep файл для «Inlined into», чтобы узнать все функции, которые компилятор наконец-то выполнил inline .
Grep для «inline_failed:», если вас интересует причина, почемукомпилятор отклонил кандидата (например, «вызов маловероятен, а размер кода увеличился бы»).

3 голосов
/ 08 февраля 2012

Используйте gcc -fdump-tree-all и ищите в файлах дампа «inline».

0 голосов
/ 08 февраля 2012

'inline' НЕ является атрибутом функции, функция может быть как встроенной, так и не встроенной. когда вы вызываете функцию, компилятор решает, встроить ее или нет, если есть несколько вызовов, компилятор может выбрать другую опцию для другого вызова. если есть хотя бы один не встроенный вызов, функция появится в таблице символов. и если он экспортируется, он также появится в таблице символов.

так что нет способа проверить, встроена функция или нет, вы можете только проверить, является ли конкретный вызов встроенным или нет реверс-инженером.

0 голосов
/ 08 февраля 2012

Вы можете использовать команду nm в Unix / Linux, чтобы получить список символов в двоичном формате.
Если функция не встроена, ее имя символа будет присутствовать в двоичном файле.

...