注:按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用。
1. 从http://valgrind.org/downloads/?src=www.discoversdk.com 下载Valgrind 3.15.0即valgrind-3.15.0.tar.bz2;
2. 在valgrind-3.15.0目录下,创建一个build.sh脚本文件,内容如下:
./configure \
--prefix="$PWD/install" \
CC=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc \
CXX=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ \
CPP=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-cpp \
AR=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-ar \
--target=aarch64-himix100-linux \
--host=aarch64-himix100-linux \
--program-prefix=hisi-
3. 依次执行如下命令后,会在当前install目录下生成bin, include, lib, libexec, share五个目录,每个目录的内容如下图所示
./build.sh
make -j8
make install
4. 将install/bin目录下的可执行文件hisi-valgrind拷贝到海思板子上,将install/lib目录下的valgrind目录也拷贝到海思板子上,此目录下包含了执行hisi-valgrind时需要的库,然后依次执行如下命令,结果如下图所示:
export VALGRIND_LIB=valgrind/
./hisi-valgrind --version
5. 测试代码main.cpp如下:
#include <stdio.h>
#include <iostream>
namespace {
void func1() {
int* p1 = new int[10];
}
void func2() {
int* p2 = new int[5];
}
} // namespace
int main()
{
fprintf(stdout, "test start\n");
func1();
func2();
fprintf(stdout, "test finish\n");
}
6. 执行如下命令,生成可执行文件main:
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -g -o main main.cpp
7. 将可执行文件main拷贝到海思板子上,执行如下命令 ,结果如下图所示:
./hisi-valgrind --tool=memcheck --leak-check=full ./main
从上图中可以看出编译好的hisi-valgrind还是不能在海思板子上直接使用,可以参考http://www.ebaina.com/blog/show.php?itemid=307 和https://www.ebaina.com/articles/140000002852中的方法试着处理下,本人未验证。