Valgrind again: strlen() redirection
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.