Невозможность разобрать имя символа в библиотеке (nm, objdump, c++filter)
Я заметил неразборчивые функции в моем выводе
perf script
и изначально думал
perf
может делать что-то не так.
Но если заглянуть глубже в некоторые из
*.so
файлов, мне удалось воспроизвести проблему с
c++filt -t
,
nm -C
, а также .
Я немного не понимаю, что могло пойти не так в процессе демонтажа.
Один из символов, который не удаляется, это:
_ZZNK5Gaudi10Functional7details16MultiTransformerIFSt5tupleIJSt6vectorIN4LHCb14VPLightClusterESaIS6_EESt5arrayIjLm53EEEERK12EventContextRKNS5_8RawEventERK4DeVPENS0_6Traits4use_IJNS5_7DetDesc21useConditionHandleForIJSI_EEENSM_11BaseClass_tINSO_23ConditionAccessorHolderI10FixTESPathINS_9AlgorithmEEEEEEEEELb0EE7executeESE_ENKUlDpRT_E_clIJK21DataObjectWriteHandleIS8_S8_EKS15_ISA_SA_EEEEDaS12_
Библиотека была скомпилирована с GCC 10.1. Но если я скомпилирую с clang 11, я могу найти тот же символ в
objdump -D -C
.
Я сейчас немного в тупике, поэтому любые предложения относительно того, что я мог бы проверить, были бы очень признательны. :)
1 ответ
Resolved by using the tool suggested in the comments.
llvm-cxxfilt
also works and might be already available on some machines.
c++filt
,
nm
,
perf
, and
objdump
use functionality that is implemented in libiberty which is part of GCC.Thus I've filed a bug report there: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102851