Eu tive um problema semelhante e adicionar o parâmetro --allow-mismatched-debuginfo=yes
ao valgrind resolveu o problema.
Estou tentando instalar o Valgrind em um sistema PowerPC baseado no Debian. Eu consegui cross-compilar com sucesso, mas agora está reclamando que não é possível encontrar informações de depuração. Coloquei cópias não-removidas dos objetos compartilhados relevantes no sistema de arquivos e informei Valgrind sobre esse diretório, mas ainda não está funcionando.
Invocação:
[email protected]:/# /root/valgrind/bin/valgrind --extra-debuginfo-path=/root/valgrind/usr/lib/debug /path/to/my_program -log
==6000== Memcheck, a memory error detector
==6000== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==6000== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==6000== Command: /path/to/my_program -log
==6000==
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld.so.1
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld.so.1
valgrind:
valgrind: Possible fixes: (1, short term): install glibc's debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Cannot continue -- exiting now. Sorry.
O arquivo incorreto, ld.so.1
, está em /lib
e minhas cópias não removidas estão em um diretório separado:
[email protected]:/# find / -name ld.so.1
/lib/ld.so.1
/root/valgrind/usr/lib/debug/ld.so.1
/root/valgrind/usr/lib/debug/lib/ld.so.1
As minhas cópias não removidas de libc6-dbg_2.7-10ubuntu3_powerpc.deb
parecem ser compatíveis:
[email protected]:/# file /lib/ld.so.1 /root/valgrind/usr/lib/debug/ld.so.1 /root/valgrind/usr/lib/debug/lib/ld.so.1
/lib/ld.so.1: symbolic link to 'ld-2.7.so'
/root/valgrind/usr/lib/debug/ld.so.1: symbolic link to 'ld-2.7.so'
/root/valgrind/usr/lib/debug/lib/ld.so.1: symbolic link to 'ld-2.7.so'
[email protected]:/# file /lib/ld-2.7.so /root/valgrind/usr/lib/debug/ld-2.7.so /root/valgrind/usr/lib/debug/lib/ld-2.7.so
/lib/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0x11676e75, with unknown capability 0x10000 = 0x90401, stripped
/root/valgrind/usr/lib/debug/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped
/root/valgrind/usr/lib/debug/lib/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
E se eu entendi como objdump
funciona, parece que a "função deve ser redirecionada" mencionada por Valgrind realmente tem uma entrada na cópia de depuração:
[email protected]:/# objdump -x /lib/ld-2.7.so | grep strlen
[email protected]:/# objdump -x /root/valgrind/usr/lib/debug/lib/ld-2.7.so | grep strlen
0002f734 l O .data.rel.ro 00000004 max_capstrlen
00018ff0 l F .text 000000b8 strlen
No entanto, o argumento --extra-debuginfo-path
não tem efeito. Há uma breve menção a essa mudança no manual , mas essa é praticamente toda a informação que recebi capaz de encontrar sobre isso. Estou faltando alguma outra coisa?
Para o registro, esta máquina não pode se conectar à Internet, portanto, deixar apt
/ dpkg
cuidar das coisas está, infelizmente, fora de questão. /lib
e a maioria dos outros diretórios do sistema também são montados como somente leitura, portanto, não posso simplesmente incluir uma substituição não removida para ld-2.7.so
(não que eu assumiria tal risco).
Eu tive um problema semelhante e adicionar o parâmetro --allow-mismatched-debuginfo=yes
ao valgrind resolveu o problema.