Valgrind again: strlen() redirection

Christian Kruse

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: valgrind:  was not found whilst processing                          valgrind:  symbols from the object with soname: 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 (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.