2012-11-16 9 views
6

Ho incrociato Valgrind (http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2) per ARM usando i seguenti comandi con la Toolchain di Linaro sulla mia Ubuntu 10.04 host (sto usando Buildroot):Valgrind per ARM con Linaro Toolchain che richiede libc6-dbg con Buildroot

export PATH=$PATH:/home/user/toolchain/linaro/bin 
CC=arm-linux-gnueabi-gcc CFLAGS=-I/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/include LDFLAGS=-L/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/lib ./configure --prefix=/opt/valgrind --host=armv7-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-ubuntu-linux 
make 
sudo make install 

Quando copio i binari al mio braccio bordo di destinazione, ottengo il seguente errore:

==413== Memcheck, a memory error detector 
==413== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. 
==413== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info 
==413== Command: /home/user/testApp 
==413== 

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:  memcpy 
valgrind: in an object with soname matching: ld-linux.so.3 
valgrind: was not found whilst processing 
valgrind: symbols from the object with soname: ld-linux.so.3 
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. 

mio Linaro Toolchain versione è:

gcc version 4.7.1 20120402 (prerelease) (crosstool-NG linaro-1.13.1-2012.04-20120426 - Linaro GCC 2012.04) 

Ho cercato in giro su Google ma non riesco a trovare una soluzione a questo. Come posso far funzionare Valgrind sulla mia bacheca di destinazione? Uso Buildroot per creare il mio sistema ma libc6-dbg non è un pacchetto che posso trovare nel sistema di build. C'è qualche directory o file che devo copiare dalla toolchain sysroot? Grazie -

Il comando che sto usando per eseguire Valgrind è mostrata qui:

# which valgrind 
/usr/bin/valgrind 
# valgrind /home/user/MyQtApp 
==216== Memcheck, a memory error detector 
... 
... 
+0

Puoi specificare quale comando utilizzare per eseguire Valgrind sulla destinazione, in modo che possiamo provare a riprodurre il problema? Grazie. –

+0

Thomas, ho aggiunto i miei comandi al post in alto - Grazie. – PhilBot

+0

Ciao Thomas, sei riuscito a riprodurre questo? Sto ancora vedendo questo problema con l'installazione di Buildroot Valgrind. Grazie! – PhilBot

risposta

1

Ho riscontrato lo stesso problema e ho trovato una soluzione. Quindi, nel caso qualcuno lo faccia anche, ecco come ho fatto le cose è successo: Il motivo per cui Valgrind non può eseguire il debug dell'applicazione sono i simboli mancanti nelle librerie C. Mentre costruisci il buildroot con una toolchain esterna (Linaro), possiamo trovare le librerie C non spogliate nell'albero di Linaro. nella cartella arm-linux-gnueabihf \ libc \ lib \ arm-linux-gnueabihf, troverete le librerie non spogliate. Copia semplicemente i file non eliminati sul tuo obiettivo ... Tutto qui. Spero che questo aiuti gli altri.

+0

Come hai copiato i file non strippati sulla destinazione? Quando li copio, si rompe il sistema operativo. Oppure li stai copiando in una posizione separata e modificando LD_LIBRARY_PATH? – Fred

0

Spiacente io vi do un collegamento al pacchetto non ho usato da solo, ma spero che sia gonna lavoro:

https://launchpad.net/ubuntu-leb/oneiric/armel/libc6-dbg

+0

Grazie per il suggerimento - Ho scaricato il .deb e ho estratto il suo contenuto nella mia directory/lib sulla scheda di destinazione. Tuttavia, la mia scheda non si avvia ora. Guardo TeraTerm e il kernel boot ma si blocca solo dopo aver caricato il kernel. Ci deve essere una sorta di incompatibilità qui. – PhilBot

+1

sei sicuro che sia sufficiente estrarre semplicemente il pacchetto? potrebbero esserci alcuni script di installazione che eseguono alcune impostazioni necessarie, ecc ... –

5

Quindi stai utilizzando Buildroot o OpenEmbedded per creare il tuo Libc?

Se è OE, è necessario disporre del pacchetto libc6-dbg disponibile nel repository locale (TMPDIR/deploy/ipk). Oppure aggiungi "dbg-pkgs" in IMAGE_FEATURES e ricostruisci la tua immagine.

Glibc 2.12 mostra che si sta utilizzando la versione precedente di OpenEmbedded. Ma anche questo dovrebbe darti il ​​pacchetto libc6-dbg.

Impossibile aiutare con Buildroot come mai usato.

+0

Grazie per la risposta - In realtà sto usando Buildroot e ho modificato la mia domanda per chiarire. Spero che la tua risposta aiuti gli altri a risolvere questo problema. – PhilBot

1

Hai bisogno di librairie non spogliate nel tuo obiettivo.

2 modi per farlo.

nella configurazione buildroot:

1- fa un sistema di unstripped: BR2_STRIP_none = y Si farà un'immagine molto grande obiettivo

2- unstrip solo la cartella librairie. BR2_STRIP_EXCLUDE_DIRS = "lib"

+0

Sto usando una toolchain esterna (Linaro) e se provo a cambiare il ld - *. Così sulla mia scheda ottengo un panico del kernel quando si riavvia. Buildroot non sta costruendo la mia toolchain, quindi non posso creare binari compatibili/lib per avviarli che non vengono sterminati usando questo metodo. – PhilBot

Problemi correlati