Как узнать, какие функции НЕ были включены

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

EDIT: я знаю, как явно запрашивать функцию, которая не должна быть встроена, используя атрибут gcc builtin noinline.

Ответы

Ответ 1

Используйте gcc -fdump-tree-all и найдите файлы дампа для "inline".

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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