nm, objdump & amp; pfunct дает противоречивые ответы, чтобы проверить, является ли функция встроенной или нет

у меня есть общий файл obj, скажем, a.so, и в нем я хочу увидеть, встроена ли конкретная функция (скажем, fname) или нет. Я попробовал следующие 4 способа и получить разные ответы:

1) nm a.so | grep fname

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

2) objdump -d a.so | grep fname

-> это не дает никаких о / п, подразумевая, что функция встроена. Пожалуйста, поправьте меня, если я ошибаюсь в заключении здесь.

3) objdump -W a.so

-> для функции fname это дает мне следующую o / p, последняя строка которой гласит «объявлено как встроенное, но проигнорировано»

 DW_AT_name        : (indirect string, offset: 0x10411): fname
DW_AT_decl_file   : 246
DW_AT_decl_line   : 40
DW_AT_prototyped  : 1
DW_AT_inline      : 2      (declared as inline but ignored)

4) pfunct -G a.so | grep fname
-> эта утилита dwarves показывает функцию fname, подразумевая, что функция не является встроенной.

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

1) Why are there differences in the above 4 ways ?
2) Are there any known issues with objdump and pfunct ?
3) Also let me know the best way to check if a function is inlined or not.

Любая помощь будет оценена. Спасибо !!!

3

Решение

Поскольку функция вызывается только в одном месте файла .c, лучший способ проверить, является ли функция встроенной, заключается в следующем:

objdump -d a.so | grep call | grep fname

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

2

Другие решения


По вопросам рекламы [email protected]