При сборке bcc под aarch64 вылезло: builder@localhost:~/RPM/BUILD/bcc-v0.5.0/BUILD/introspection$ clang -pipe -Wall -g -O2 -Wall -O2 -g -DNDEBUG -rdynamic CMakeFiles/bps.dir/bps.c.o -o bps ../src/cc/libbpf.a builder@localhost:~/RPM/BUILD/bcc-v0.5.0/BUILD/introspection$ ./bps -bash: ./bps: No such file or directory builder@localhost:~/RPM/BUILD/bcc-v0.5.0/BUILD/introspection$ readelf -l bps|grep interpreter [Requesting program interpreter: /lib/ld-linux-aarch64.so.1] builder@localhost:~/RPM/BUILD/bcc-v0.5.0/BUILD/introspection$ ls -l /lib/ld-linux-aarch64.so.1 ls: cannot access '/lib/ld-linux-aarch64.so.1': No such file or directory На сервере arena линкер находится в /lib64/ld-linux-aarch64.so.1. Или не там находится линкер на альте, или не туда его линкует clang. Инвестигация показала, что значения hardcoded в clang: llvm-project/clang/lib/Driver/ToolChains/Linux.cpp: std::string Linux::getDynamicLinker(const ArgList &Args) const { ... case llvm::Triple::aarch64: LibDir = "lib"; Loader = "ld-linux-aarch64.so.1"; break;
Пока придумал сделать так: %ifarch aarch64 objcopy --dump-section .interp=/tmp/interp /bin/ls /dev/null objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bps %if_with luajit objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bcc-lua %endif %endif
Ты повесил багу когда она уже была исправлена но исправление ещё не добралось до Сизифа: * Tue Jun 12 2018 Gleb F-Malinovskiy <glebfm@altlinux.org> 6.0.0-alt0.8.rel - lld: backported upstream patch implementing --{push,pop}-state support. - clang: changed default dynamic linker path for aarch64 architecture. - aarch64: temporarily rebuilt with gcc to fix build from source. - clang-alt-triple.patch: added mipsel and mips64el triplets.
(In reply to comment #1) > Пока придумал сделать так: > > %ifarch aarch64 > objcopy --dump-section .interp=/tmp/interp /bin/ls /dev/null > objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bps > %if_with luajit > objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bcc-lua > %endif > %endif А Wl,-dynamic-linker передать не проще?
(In reply to comment #3) > (In reply to comment #1) > > Пока придумал сделать так: > > > > %ifarch aarch64 > > objcopy --dump-section .interp=/tmp/interp /bin/ls /dev/null > > objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bps > > %if_with luajit > > objcopy --update-section .interp=/tmp/interp %buildroot/usr/bin/bcc-lua > > %endif > > %endif > > А Wl,-dynamic-linker передать не проще? export LDFLAGS="-fuse-ld=lld -Wl,-dynamic-linker /lib64/ld-linux-aarch64.so.1" Так тоже сработало. (Не с первого раза, конечно, так как lld не поддерживает `=` в этой опции). (FYI: Правда, bcc все равно как-то не так собрался, но это уже другая история.)
Также в glibc-ore добавлен симлинк /lib/ld-linux-aarch64.so.1 https://bugzilla.altlinux.org/37641