Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Valgrind for ARM with Linaro Toolchain requiring libc6-dbg with Buildroot

I cross compiled Valgrind (http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2) for ARM using the following commands with the Linaro Toolchain on my Ubuntu 10.04 host ( I am using Buildroot ):

export PATH=$PATH:/home/user/toolchain/linaro/bin
CC=arm-linux-gnueabi-gcc CFLAGS=-I/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/include LDFLAGS=-L/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/lib ./configure --prefix=/opt/valgrind --host=armv7-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-ubuntu-linux
make
sudo make install

When I copy the binaries to my ARM target board, I get the following error:

==413== Memcheck, a memory error detector
==413== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==413== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==413== Command: /home/user/testApp
==413== 

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

My Linaro Toolchain Version is:

gcc version 4.7.1 20120402 (prerelease) (crosstool-NG linaro-1.13.1-2012.04-20120426 - Linaro GCC 2012.04) 

I've searched around on Google but cannot find a solution to this. How can I get Valgrind to work on my target board? I use Buildroot to build my system but libc6-dbg is not a package I can find in the build system. Is there some directory or files I need to copy from the toolchain sysroot? Thanks -

The command I am using to run Valgrind is shown here:

# which valgrind
/usr/bin/valgrind
# valgrind /home/user/MyQtApp
==216== Memcheck, a memory error detector
...
...
like image 981
PhilBot Avatar asked Nov 16 '12 14:11

PhilBot


3 Answers

I've been facing the same issue, and found a solution. Thus in case someone faces it also, here is how I made things happened : The reason why Valgrind can't debug the application is the missing symbols in C libraries. While building buildroot with an external toolchain (Linaro), we can find the non stripped C libraries in Linaro tree. in arm-linux-gnueabihf\libc\lib\arm-linux-gnueabihf folder, you will find the non stripped libraries. Simply copy the non stripped files on your target .. That's it. Hope this will help others.

like image 57
Laurent COIGNOT Avatar answered Oct 30 '22 13:10

Laurent COIGNOT


So you are using Buildroot or OpenEmbedded to build your Libc?

If it is OE then you should have libc6-dbg package available in local repository (TMPDIR/deploy/ipk). Or add "dbg-pkgs" into IMAGE_FEATURES and rebuild your image.

Glibc 2.12 shows that you are using old version of OpenEmbedded. But even this should give you libc6-dbg package.

Can not help with Buildroot as never used it.

like image 40
Marcin Juszkiewicz Avatar answered Oct 30 '22 13:10

Marcin Juszkiewicz


You need librairies unstripped in your target.

2 ways to do it.

in your buildroot config:

1- make an unstripped system: BR2_STRIP_none=y It will make a very big target image

2- unstrip only the librairie folder. BR2_STRIP_EXCLUDE_DIRS="lib"

like image 41
David Bonnin Avatar answered Oct 30 '22 12:10

David Bonnin