I ran into another problem with Valgrind:
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.
I already was familiar with this problem and I knew using
FEATURES="nostrip" and a re-emerge of
sys-libs/glibc should help. But after doing that the problem was not gone. After some research I found out that with
-O2 the GCC inlines
strlen(). It is a code optimization, but in this case it causes valgrind to stop working. The solution is somewhat messy: you have to create a portage overlay of
sys-libs/glibc and patch
files/eblits/common.eblit: find the line containing
append-flags -O2 -fno-strict-aliasing and append
-fno-builtin-strlen. Then re-emerge glibc (do not forget to run
ebuild glibc-ver.ebuild digest) and everything should work.