mercoledì 21 dicembre 2011

Valgrind e Sabayon

Per lavoro sono costretto a programmare in C++ e Valgrind si è rivelato essere un ottimo alleato soprattutto nel momento in cui ci si trova costretti a combattere con problemi riguardanti l'allocazione della memoria.

Nelle ultime versioni di Sabayon ho però riscontrato un problema che impedisce a Valgrind di funzionare correttamente. Se quando avviate Valgrind avete un output simile al seguente:

$ valgrind ls

==30502== Memcheck, a memory error detector
==30502== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==30502== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==30502== Command: ls
==30502== 

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-linux-x86-64.so.2
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-x86-64.so.2
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.
valgrind:  
valgrind:  Cannot continue -- exiting now.  Sorry.


allora vi conviene seguire i consigli che potete trovare qui. Fondamentalmente, quello che è necessario fare è:
  • Aprire il file /etc/entropy/client.conf;
  • Inserire la riga "splitdebug = enable" alla fine del file;
  • Reinstallare glibc (sudo equo install glibc);
  • Eliminare la riga appena aggiunta dal file /etc/entropy/client.conf.
In questo modo le librerie glibc verranno reinstallate con i simboli per il debug che è proprio quello che serve a Valgrind per funzionare correttamente.