(In reply to Matt from comment #9) > It does expose an issue on Ubuntu/Debian 64 bit machines and maybe others. > Is it reasonable to have no entry point for strlen(), which is an ANSI C > library function? > It would certainly be 'easier' in some sense if valgrind moved to another > means of detecting a library with proper debug symbols.
I don't think that you understand the problem. Valgrind (and in particular, memcheck) is running and checking the guest binary from the get go. That means that everything runs under Valgrind, including the code for ld.so that loads any shared libraries like libc.so. Because libc.so isn't even loaded yet when ld.so is doing its stuff ld.so also provides its own implementation of a few libc functions like malloc and strlen. Some platforms have optimised versions of strlen that generate many false positives. We need to redirect strlen to avoid them and so strlen redirection is mandatory. The only other thing that I could do is to make this a configure time check. That way packagers could turn off the requirement. Obviously if the distro ignores our instructions in README_PACKAGERS and ld.so strlen needs to be redirected and Valgrind allows it to be not redirected then you will have an unusable Valgrind. -- You received this bug notification because you are a member of Debcrafters packages, which is subscribed to glibc in Ubuntu. https://bugs.launchpad.net/bugs/1247026 Title: valgrind does not work on amd64 (strlen missing) Status in Valgrind: Unknown Status in glibc package in Ubuntu: Confirmed Status in valgrind package in Ubuntu: Confirmed Bug description: It seems that strlen has been inlined in the amd64 version of glibc currently used in Ubuntu 13.10 (saucy). This makes it impossible to run valgrind. It fails with the following output: 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. The package you need valgrind: to install for fix (1) is called valgrind: valgrind: On Debian, Ubuntu: libc6-dbg valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo valgrind: valgrind: Cannot continue -- exiting now. Sorry. Either the glibc package needs to be fixed so it does not inline strlen or valgrind needs to be fixed. A work-around patch to valgrind can be found in this thread: https://bugs.kde.org/show_bug.cgi?id=286864 To manage notifications about this bug go to: https://bugs.launchpad.net/valgrind/+bug/1247026/+subscriptions -- Mailing list: https://launchpad.net/~debcrafters-packages Post to : [email protected] Unsubscribe : https://launchpad.net/~debcrafters-packages More help : https://help.launchpad.net/ListHelp

