zoukankan      html  css  js  c++  java
  • Fix Valgrind's must-be-redirected error in Gentoo

    Last week, I tried to use Valgrind to identify potential memory related bugs, since segmentation faults occured randomly in a Python C library. However, Valgrind failed to start and displayed the following error message:

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

    The message mentions how to fix this error in various distributions (Debian, Ubuntu, Fedora, etc), except for Gentoo. Note that there is no such thing as a "debugging symbols package" in Gentoo, because Portage will compile all packages from scratch.

    In order to fix this error, it is necessary to:

    1. enable the splitdebug feature (or rather: it is "recommended" to enable).
    2. enable debugging symbols for glibc.
    3. recompile sys-libs/glibc.

    The first step is trivial: add splitdebug to FEATURES in /etc/make.conf:

    FEATURES="$FEATURES splitdebug"
                    

    The second step, enabling debugging symbols, can also be set globally. However Portage allows you to specify CFLAGS and CXXFLAGS per package. So adding -ggdb to both CFLAGS and CXXFLAGS will complete the second step. Create the file /etc/portage/env/debug.conf and add:

    CFLAGS="${CFLAGS} -ggdb"
                    CXXFLAGS="${CFLAGS} -ggdb"
                    

    Next, add the following line to /etc/portage/package.env/glibc:

    sys-libs/glibc debug.conf
                    

    Note: It is also possible to enable splitdebug on a per package basis, but in my humble opinion it is useful to have debugging symbols system-wide in case you want to backtrace a segfault of an arbitrary executable using gdb.

    The final step is recompiling glibc: emerge sys-libs/glibc (this part should be straightforward). Once glibc is emerged, you should see the file /usr/lib/debug/lib/ld-2.12.2.so.debug (substitute 2.12.2 with your glibc version number), which contains the stripped debugging symbols of glibc. To confirm this, file will show that the file is not stripped:

    /usr/lib/debug/lib/ld-2.12.2.so.debug: ELF 32-bit LSB shared object, Intel
                    80386, version 1 (SYSV), dynamically linked, not stripped
                    

    If all steps succeeded, you should be able to run Valgrind successfully on Gentoo!

    http://blog.kompiler.org/post/10/2011-11-30/Fix_Valgrind's_must-be-redirected_error_in_Gentoo/
  • 相关阅读:
    常见http状态码
    通过adb shell命令查看内存,CPU,启动时间,电量等信息
    Jmeter获取数据库数据参数化
    jmeter链接mysql数据库,sql数据库,oracle数据库
    appium 隐藏键盘
    python编码
    python:打印所有文件名字的扩展名
    python中字符串常见操作
    python中的字符串存储及切片介绍
    Ubuntu14.04安装部署bugzilla5.0.3
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/3483712.html
Copyright © 2011-2022 走看看