Valgrind kann selbst mit --extra-debuginfo-path keine Debug-Symbole finden

6

Ich versuche, Valgrind auf einem eingebetteten Debian-basierten PowerPC-System zu installieren. Ich habe es geschafft, es erfolgreich zu kompilieren, aber jetzt beklagt es sich, dass es keine Debug-Informationen finden kann. Ich habe nicht entfernte Kopien der relevanten freigegebenen Objekte in das Dateisystem gestellt und Valgrind über dieses Verzeichnis informiert, aber es funktioniert immer noch nicht.

Aufruf:

[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.

Die beleidigende Akte, ld.so.1, ist in /libund meine nicht abisolierten Kopien befinden sich in einem separaten Verzeichnis:

[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

Meine nicht gestrippten Kopien von libc6-dbg_2.7-10ubuntu3_powerpc.deb scheint kompatibel zu sein:

[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

Und wenn ich verstehe wie objdump Funktioniert, so scheint es, als ob die von Valgrind erwähnte "must-be-redirected function" tatsächlich einen Eintrag in der Debug-Kopie hat:

[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

Und doch die --extra-debuginfo-path Argument hat keine Wirkung. Es gibt eine kurze Erwähnung dieses Schalters im Handbuch , aber das sind praktisch alle Informationen, die ich darüber finden konnte. Vermisse ich noch etwas?

Für die Aufzeichnung kann dieses Gerät keine Verbindung zum Internet herstellen, also lassen apt / dpkg sich um die Dinge zu kümmern, kommt leider nicht in Frage. /lib und die meisten anderen Systemverzeichnisse sind ebenfalls schreibgeschützt bereitgestellt, sodass ich nicht einfach einen nicht abisolierten Ersatz für hinzufügen kann ld-2.7.so (nicht, dass ich ein solches Risiko eingehen würde).

Fraxtil
quelle

Antworten:

0

Ich hatte ein ähnliches Problem und fügte hinzu --allow-mismatched-debuginfo=yes parameter to valgrind löste das problem.

Ferenc
quelle
Interessant ...
Pierre.Vriens
Das hat bei mir nicht funktioniert. Ich bekomme immer noch "???" anstelle von eigentlichen Debug-Symbolen.
Geremia