无法交叉编译ARM的Valgrind

无法交叉编译ARM的Valgrind,arm,embedded,cross-compiling,valgrind,embedded-linux,Arm,Embedded,Cross Compiling,Valgrind,Embedded Linux,在谷歌上有很多类似于我的问题,我都试过了,但没有一个有效,所以我不得不发布这个问题 我正在尝试使用Valgrind检测一些二进制文件的内存泄漏,这些文件是为我的设备编译的(使用处理器:ARM926EJ-S rev 5(v5l)) 因此,我尝试使用我的设备的特定工具链交叉编译Valgrind 以下是我的流程: 我正在使用Valgrind3.13.0和Ubuntu 16 1/cd-3.13.0 2/sed“s/armv7/arm/g”configure(这样它就不会抱怨不支持的架构师) 3//con

在谷歌上有很多类似于我的问题,我都试过了,但没有一个有效,所以我不得不发布这个问题

我正在尝试使用Valgrind检测一些二进制文件的内存泄漏,这些文件是为我的设备编译的(使用处理器:ARM926EJ-S rev 5(v5l))

因此,我尝试使用我的设备的特定工具链交叉编译Valgrind

以下是我的流程: 我正在使用Valgrind3.13.0和Ubuntu 16

1/
cd-3.13.0

2/
sed“s/armv7/arm/g”configure
(这样它就不会抱怨不支持的架构师)

3/
/configure--host=arm none linux gnueabi
(使用我特定的交叉编译器,而不是linux上的默认编译器)

4/
make

弹出以下错误:

error: bad value (cortex-a8) for -mcpu= switch
=>由于我的设备使用ARM926EJ-S处理器,我将Valgrin-3.13.0文件夹中所有文件的
ARM926EJ-S
替换为
cortex-a8

再次运行上述步骤,会弹出另一个错误:

m_dispatch/dispatch-arm-linux.S: Assembler messages:
m_dispatch/dispatch-arm-linux.S:104: Error: selected processor does not support `movw r1,#47'
m_dispatch/dispatch-arm-linux.S:105: Error: selected processor does not support `movw r2,#0'
m_dispatch/dispatch-arm-linux.S:157: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:158: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindirs_32'
m_dispatch/dispatch-arm-linux.S:165: Error: selected processor does not support `movw r1,#(((1<<15))-1)'
m_dispatch/dispatch-arm-linux.S:166: Error: selected processor does not support `movw r4,#:lower16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:169: Error: selected processor does not support `movt r4,#:upper16:vgPlain_tt_fast'
m_dispatch/dispatch-arm-linux.S:182: Error: selected processor does not support `movw r1,#:lower16:vgPlain_stats__n_xindir_misses_32'
m_dispatch/dispatch-arm-linux.S:183: Error: selected processor does not support `movt r1,#:upper16:vgPlain_stats__n_xindir_misses_32'
Makefile:3224: recipe for target 'm_dispatch/libcoregrind_arm_linux_a-dispatch-arm-linux.o' failed
m_dispatch/dispatch arm linux.S:汇编程序消息:
m_dispatch/dispatch arm linux.S:104:错误:所选处理器不支持'movw r1,#47'
m_dispatch/dispatch arm linux.S:105:错误:所选处理器不支持'movw r2,#0'
m_dispatch/dispatch arm linux.S:157:错误:所选处理器不支持'movw r1,#:lower16:vgPlain_stats_un_xindirs_32'
m_dispatch/dispatch arm linux.S:158:错误:所选处理器不支持'movt r1,#:upper16:vgPlain_stats_un_xindirs_32'

m_dispatch/dispatch arm linux.S:165:错误:所选处理器不支持'movw r1,#((1ARM9使用旧的ARMv5指令集。从错误消息中,Valgrind的汇编代码似乎希望使用比处理器更新的arm(ARMv7)指令集


因此,您可能运气不佳,需要将上述汇编程序移植到ARMv4以使valgrind正常工作。

您还需要交叉编译valgrind。我不熟悉此流程。不幸的是,移植汇编程序超出了我的知识范围,可能需要花费太多时间。也许我应该找到另一种方法。您可以向我推荐其他软件吗相当于Valgrind(内存泄漏检查),并且能够在ARM926EJ-S上运行?编写您自己的内存泄漏检查程序。您应该能够编写跟踪所有内存分配和释放的malloc钩子。除非使用帧指针构建,否则调用堆栈可能会有点问题