banach-space / llvm-tutor

A collection of out-of-tree LLVM passes for teaching and learning
MIT License
2.95k stars 393 forks source link

OpcodeCounter #115

Closed gihyeonjeon closed 5 months ago

gihyeonjeon commented 5 months ago

Hi. I posted a question on llvm beginners and was guided to github to learn. hello-world pass works normally, but I tried opcodecounter, but it doesn't work properly.

ghjeon@ghjeon:~/build-test$ $LLVM_DIR/bin/opt -load-pass-plugin libOpcodeCounter.so --passes="print<opcode-counter>" -disable-output input_for_cc.bc
Failed to load passes from 'libOpcodeCounter.so'. Request ignored.
Expected<T> must be checked before access or destruction.
Unchecked Expected<T> contained error:
Could not load library 'libOpcodeCounter.so': libOpcodeCounter.so: undefined symbol: _ZTIN4llvm18format_object_baseEPLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.  Program arguments: /home/ghjeon/llvm-project-llvmorg-17.0.6/build//bin/opt -load-pass-plugin libOpcodeCounter.so --passes=print<opcode-counter> -disable-output input_for_cc.bc
 #0 0x0000602c1e1693f6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/Unix/Signals.inc:602:22
 #1 0x0000602c1e1697d5 PrintStackTraceSignalHandler(void*) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/Unix/Signals.inc:675:1
 #2 0x0000602c1e166e99 llvm::sys::RunSignalHandlers() /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/Signals.cpp:104:20
 #3 0x0000602c1e168d0e SignalHandler(int) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007ae3c2242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007ae3c22969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007ae3c22969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x00007ae3c22969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x00007ae3c2242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x00007ae3c22287f3 abort ./stdlib/abort.c:81:7
#10 0x0000602c1a47f5f4 llvm::SmallVectorTemplateBase<llvm::PassPlugin, false>::mallocForGrow(unsigned long, unsigned long&) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/include/llvm/ADT/SmallVector.h:444:4
#11 0x0000602c1a47a3f7 llvm::Expected<llvm::PassPlugin>::assertIsChecked() const /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/include/llvm/Support/Error.h:714:3
#12 0x0000602c1a474280 llvm::Expected<llvm::PassPlugin>::~Expected() /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/include/llvm/Support/Error.h:550:10
#13 0x0000602c1a4660e0 main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/tools/opt/opt.cpp:469:3
#14 0x0000602c1a46927d void std::__invoke_impl<void, main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>(std::__invoke_other, main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /usr/include/c++/11/bits/invoke.h:61:67
#15 0x0000602c1a468fa1 std::enable_if<is_invocable_r_v<void, main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>, void>::type std::__invoke_r<void, main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>(main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /usr/include/c++/11/bits/invoke.h:117:5
#16 0x0000602c1a468cb9 std::_Function_handler<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&), main::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)>::_M_invoke(std::_Any_data const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /usr/include/c++/11/bits/std_function.h:291:44
#17 0x0000602c1a47af99 std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)>::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /usr/include/c++/11/bits/std_function.h:590:66
#18 0x0000602c1a487130 llvm::cl::list<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, llvm::cl::parser<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/include/llvm/Support/CommandLine.h:1670:12
#19 0x0000602c1e071ed2 llvm::cl::Option::addOccurrence(unsigned int, llvm::StringRef, llvm::StringRef, bool) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/CommandLine.cpp:1854:1
#20 0x0000602c1e06b0d6 CommaSeparateAndAddOccurrence(llvm::cl::Option*, unsigned int, llvm::StringRef, llvm::StringRef, bool) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/CommandLine.cpp:643:32
#21 0x0000602c1e06b4b4 ProvideOption(llvm::cl::Option*, llvm::StringRef, llvm::StringRef, int, char const* const*, int&) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/CommandLine.cpp:683:41
#22 0x0000602c1e071343 (anonymous namespace)::CommandLineParser::ParseCommandLineOptions(int, char const* const*, llvm::StringRef, llvm::raw_ostream*, bool) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/CommandLine.cpp:1713:36
#23 0x0000602c1e06fe2a llvm::cl::ParseCommandLineOptions(int, char const* const*, llvm::StringRef, llvm::raw_ostream*, char const*, bool) /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/lib/Support/CommandLine.cpp:1469:47
#24 0x0000602c1a4664a1 main /home/ghjeon/llvm-project-llvmorg-17.0.6/llvm/tools/opt/opt.cpp:474:30
#25 0x00007ae3c2229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#26 0x00007ae3c2229e40 call_init ./csu/../csu/libc-start.c:128:20
#27 0x00007ae3c2229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#28 0x0000602c1a435ee5 _start (/home/ghjeon/llvm-project-llvmorg-17.0.6/build//bin/opt+0xa33ee5)
Aborted (core dumped)

Both the so file build and the input file build were completed successfully.

How can I solve this problem?...

Thanks!!

banach-space commented 5 months ago

Looking at this:

 undefined symbol: _ZTIN4llvm18format_object_baseEPLEASE

Which version of LLVM are you using?

gihyeonjeon commented 5 months ago

I am using version 17.0.6. After deleting all the build files and going through the same process again, it is working properly. Thank you for your help. Your information is very helpful.