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:   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.