Ming Lei <ming....@canonical.com> inquires: > Bcc can be installed on ubuntu 16.04/arm64 successfully, but when > I try to trace, the folllowing failure[1] is triggered. > So is bcc not ready for arm64? Or something is wrong? [ . . . ]
> In file included from ./arch/arm64/include/asm/cputype.h:94: > ./arch/arm64/include/asm/sysreg.h:260:43: warning: value size does not match > register I thought that rather than using the Debian package, I would try to cross-compile bcc in a multistrap Debian container with Clang and LLVM packages of version 3.8 from Debian Unstable. The build gets about halfway through and then fails on linking of CPUDistribution. The details are preserved in the attachment, but here's the bottom line: alison@bonnet:~/bcc/build$ make Scanning dependencies of target clang_frontend [ 1%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/loader.cc.o [ 3%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/b_frontend_action.cc.o [ . . . ] Linking CXX static library libbcc.a [ 52%] Built target bcc-static Scanning dependencies of target CPUDistribution [ 54%] Building CXX object examples/cpp/CMakeFiles/CPUDistribution.dir/CPUDistribution.cc.o Linking CXX executable CPUDistribution ../../src/cc/libbcc.a(bpf_module.cc.o): In function `ebpf::BPFModule::dump_ir(llvm::Module&)': bpf_module.cc:(.text+0x4600): undefined reference to `llvm::createPrintModulePass(llvm::raw_ostream&, std::string const&, bool)' plus several other related errors about missing symbols. Is this liable to be a version mismatch problem? I find that the file src/cc/CMakeFiles/bcc-shared.dir/build.make refers to libraries and archives in /usr/lib/llvm-3.8/lib/ which exist and are arm64-ABI, as expected. Thanks for any suggestions. I guess I could try the package after all, but that doesn't sound promising, either. My eventual goal is run eBPF on a Dragonboard, which has too little memory to compile bcc-tools natively. Thanks for any suggestions, Alison --- Alison Chaiken ali...@she-devel.com, 650-279-5600 http://{ she-devel.com, exerciseforthereader.org } "You shouldn't try to optimize things you can't measure." -- Elecia White, http://embedded.fm/episodes/170
root@bonnet:~# dpkg --add-architecture arm64 root@bonnet:~# apt-get update root@bonnet:~# apt-get install -t unstable libclang-dev:arm64 llvm-dev:arm64 zlib1g-dev:arm64 alison@bonnet:~/bcc/build$ file /usr/lib/llvm-3.8/lib/libLLVM-3.8.1.so.1 /usr/lib/llvm-3.8/lib/libLLVM-3.8.1.so.1: symbolic link to ../../aarch64-linux-gnu/libLLVM-3.8.so.1 alison@bonnet:~/bcc/build$ file /usr/lib/aarch64-linux-gnu/libelf.so /usr/lib/aarch64-linux-gnu/libelf.so: symbolic link to libelf.so.1 alison@bonnet:~/bcc/build$ file /usr/lib/aarch64-linux-gnu/libelf.so.1 /usr/lib/aarch64-linux-gnu/libelf.so.1: symbolic link to libelf-0.166.so alison@bonnet:~/bcc/build$ file /usr/lib/aarch64-linux-gnu/libelf-0.166.so /usr/lib/aarch64-linux-gnu/libelf-0.166.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamcally linked, BuildID[sha1]=567f250f8131b10905e3bbc08ed825ee8d8f137f, stripped alison@bonnet:~# mkdir build alison@bonnet:~# cd build alison@bonnet:~/bcc/build$ cmake -DCMAKE_TOOLCHAIN_FILE=CMakeCross.txt .. Target system:Linux, Host system: CROSS COMPILING for aarch64-linux-gnu-gcc Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- The C compiler identification is GNU 4.9.2 -- The CXX compiler identification is GNU 4.9.2 -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc -- works -- Detecting C compiler ABI info Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ -- works -- Detecting CXX compiler ABI info Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- Detecting CXX compiler ABI info - done -- Latest recognized Git tag is v0.2.0 -- Git HEAD is e596170fbcfda9cb61db778f3ee97be96e1e52f2 -- Revision is 0.2.0-e596170f -- Found BISON: /usr/bin/bison (found version "3.0.2") -- Found FLEX: /usr/bin/flex (found version "2.5.39") -- Found LLVM: /usr/lib/llvm-3.8/include -- Found LibElf: /usr/lib/aarch64-linux-gnu/libelf.so -- Performing Test ELF_GETSHDRSTRNDX Target system:Linux, Host system:Linux-3.16.0-4-amd64 CROSS COMPILING for aarch64-linux-gnu-gcc -- Performing Test ELF_GETSHDRSTRNDX - Success -- Using static-libstdc++ -- Configuring done -- Generating done -- Build files have been written to: /home/alison/bcc/build alison@bonnet:~/bcc/build$ make Scanning dependencies of target clang_frontend [ 1%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/loader.cc.o [ 3%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/b_frontend_action.cc.o [ 5%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/tp_frontend_action.cc.o [ 7%] Building CXX object src/cc/frontends/clang/CMakeFiles/clang_frontend.dir/kbuild_helper.cc.o Linking CXX static library libclang_frontend.a [ 7%] Built target clang_frontend Scanning dependencies of target bcc-loader-static [ 9%] Building C object src/cc/CMakeFiles/bcc-loader-static.dir/libbpf.c.o [ 11%] Building C object src/cc/CMakeFiles/bcc-loader-static.dir/perf_reader.c.o /home/alison/bcc/src/cc/perf_reader.c: In function 'read_data_head': /home/alison/bcc/src/cc/perf_reader.c:198:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint64_t data_head = *((volatile uint64_t *)&perf_header->data_head); ^ [ 13%] Building C object src/cc/CMakeFiles/bcc-loader-static.dir/bcc_elf.c.o [ 15%] Building C object src/cc/CMakeFiles/bcc-loader-static.dir/bcc_perf_map.c.o [ 16%] Building C object src/cc/CMakeFiles/bcc-loader-static.dir/bcc_proc.c.o Linking C static library libbcc-loader-static.a [ 16%] Built target bcc-loader-static [ 18%] [FLEX][Lexer] Building scanner with flex 2.5.39 lexer.ll:110: warning, -s option given but default rule can be matched [ 20%] [BISON][Parser] Building parser with bison 3.0.2 parser.yy:19.9-17: warning: deprecated directive, use '%define api.namespace ebpf::cc' [-Wdeprecated] %define namespace "ebpf::cc" ^^^^^^^^^ parser.yy:19.9-17: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated] %define namespace "ebpf::cc" ^^^^^^^^^ parser.yy:20.9-25: warning: %define variable 'parser_class_name' requires '{...}' values [-Wdeprecated] %define parser_class_name "BisonParser" ^^^^^^^^^^^^^^^^^ Scanning dependencies of target b_frontend [ 22%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/loader.cc.o [ 24%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/codegen_llvm.cc.o [ 26%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/node.cc.o [ 28%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/parser.cc.o [ 30%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/printer.cc.o [ 32%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/type_check.cc.o [ 33%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/parser.yy.cc.o [ 35%] Building CXX object src/cc/frontends/b/CMakeFiles/b_frontend.dir/lexer.ll.cc.o /home/alison/bcc/build/src/cc/frontends/b/lexer.ll.cc: In member function 'virtual int ebpf::cc::Lexer::yylex()': /home/alison/bcc/build/src/cc/frontends/b/lexer.ll.cc:764:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for ( yyl = 0; yyl < yyleng; ++yyl ) ^ Linking CXX static library libb_frontend.a [ 35%] Built target b_frontend Scanning dependencies of target bcc-static [ 37%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/bpf_common.cc.o [ 39%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/bpf_module.cc.o [ 41%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/shared_table.cc.o [ 43%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/exported_files.cc.o [ 45%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/bcc_syms.cc.o [ 47%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/usdt_args.cc.o [ 49%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/usdt.cc.o [ 50%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/BPF.cc.o [ 52%] Building CXX object src/cc/CMakeFiles/bcc-static.dir/BPFTable.cc.o Linking CXX static library libbcc.a [ 52%] Built target bcc-static Scanning dependencies of target CPUDistribution [ 54%] Building CXX object examples/cpp/CMakeFiles/CPUDistribution.dir/CPUDistribution.cc.o Linking CXX executable CPUDistribution ../../src/cc/libbcc.a(bpf_module.cc.o): In function `ebpf::BPFModule::dump_ir(llvm::Module&)': bpf_module.cc:(.text+0x4600): undefined reference to `llvm::createPrintModulePass(llvm::raw_ostream&, std::string const&, bool)' ../../src/cc/libbcc.a(bpf_module.cc.o): In function `ebpf::BPFModule::run_pass_manager(llvm::Module&)': bpf_module.cc:(.text+0x479c): undefined reference to `llvm::createPrintModulePass(llvm::raw_ostream&, std::string const&, bool)' ../../src/cc/libbcc.a(bpf_module.cc.o): In function `llvm::RTDyldMemoryManager::getSymbolAddress(std::string const&)': bpf_module.cc:(.text._ZN4llvm19RTDyldMemoryManager16getSymbolAddressERKSs[_ZN4llvm19RTDyldMemoryManager16getSymbolAddressERKSs]+0x4): undefined reference to `llvm::RTDyldMemoryManager::getSymbolAddressInProcess(std::string const&)' ../../src/cc/libbcc.a(bpf_module.cc.o): In function `llvm::RTDyldMemoryManager::findSymbol(std::string const&)': bpf_module.cc:(.text._ZN4llvm19RTDyldMemoryManager10findSymbolERKSs[_ZN4llvm19RTDyldMemoryManager10findSymbolERKSs]+0x24): undefined reference to `llvm::RTDyldMemoryManager::getSymbolAddressInProcess(std::string const&)' ../../src/cc/libbcc.a(bpf_module.cc.o):(.data.rel.ro._ZTVN4ebpf15MyMemoryManagerE[_ZTVN4ebpf15MyMemoryManagerE]+0x50): undefined reference to `llvm::SectionMemoryManager::finalizeMemory(std::string*)' ../../src/cc/libbcc.a(bpf_module.cc.o):(.data.rel.ro._ZTVN4ebpf15MyMemoryManagerE[_ZTVN4ebpf15MyMemoryManagerE]+0x90): undefined reference to `llvm::RTDyldMemoryManager::getPointerToNamedFunction(std::string const&, bool)' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::BTypeVisitor::VisitBinaryOperator(clang::BinaryOperator*)': b_frontend_action.cc:(.text+0x7a4): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' b_frontend_action.cc:(.text+0x7d8): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::BTypeVisitor::VisitFunctionDecl(clang::FunctionDecl*)': b_frontend_action.cc:(.text+0x2488): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::BTypeVisitor::VisitCallExpr(clang::CallExpr*)': b_frontend_action.cc:(.text+0x3394): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' b_frontend_action.cc:(.text+0x3b04): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o):b_frontend_action.cc:(.text+0x3d30): more undefined references to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' follow ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::BMapDeclVisitor::VisitRecordDecl(clang::RecordDecl*)': b_frontend_action.cc:(.text+0xa0b8): undefined reference to `llvm::APInt::toString(unsigned int, bool) const' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::ProbeVisitor::VisitMemberExpr(clang::MemberExpr*)': b_frontend_action.cc:(.text+0xb0f0): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' b_frontend_action.cc:(.text+0xb124): undefined reference to `clang::QualType::getAsString(clang::Type const*, clang::Qualifiers)' b_frontend_action.cc:(.text+0xb160): undefined reference to `clang::QualType::getAsString(clang::Type const*, clang::Qualifiers)' ../../src/cc/frontends/clang/libclang_frontend.a(b_frontend_action.cc.o): In function `ebpf::ProbeVisitor::VisitUnaryOperator(clang::UnaryOperator*)': b_frontend_action.cc:(.text+0xb75c): undefined reference to `clang::Rewriter::getRewrittenText(clang::SourceRange) const' b_frontend_action.cc:(.text+0xb790): undefined reference to `clang::QualType::getAsString(clang::Type const*, clang::Qualifiers)' ../../src/cc/frontends/clang/libclang_frontend.a(tp_frontend_action.cc.o): In function `ebpf::TracepointTypeVisitor::VisitFunctionDecl(clang::FunctionDecl*)': tp_frontend_action.cc:(.text+0x116c): undefined reference to `clang::QualType::getAsString(clang::Type const*, clang::Qualifiers)' collect2: error: ld returned 1 exit status examples/cpp/CMakeFiles/CPUDistribution.dir/build.make:140: recipe for target 'examples/cpp/CPUDistribution' failed make[2]: *** [examples/cpp/CPUDistribution] Error 1 CMakeFiles/Makefile2:110: recipe for target 'examples/cpp/CMakeFiles/CPUDistribution.dir/all' failed
_______________________________________________ iovisor-dev mailing list iovisor-dev@lists.iovisor.org https://lists.iovisor.org/mailman/listinfo/iovisor-dev